エクセルVBAでファイルを取得する方法

このQ&Aのポイント
  • エクセル2000のVBAを使用して、外付ハードディスクにあるファイルを取得する方法を教えてください。現在、コンボボックス1で選択したフォルダ内のファイルを取得しようとしていますが、パスが見つかりませんのエラーが発生しています。
  • エクセル2000のVBAを使って、外付ハードディスクにあるファイルを取得する方法について教えてください。具体的には、コンボボックス1で選択したフォルダ内のファイルを取得したいですが、パスが見つかりませんのエラーが出ています。
  • エクセル2000のVBAを用いて、外付ハードディスクにあるファイルを取得する方法を教えてください。現在、コンボボックス1で選択したフォルダ内のファイルを取得しようとしていますが、パスが見つかりませんのエラーが出ます。解決策を教えてください。
回答を見る
  • ベストアンサー

エクセルVBA ファイル取得方法?

エクセル2000のVBAにて 外付ハードディスクにあるファイルを取得しようとして、 下記のように書き込みました。 Private Sub CommandButton1_Click() Dim myFSO As New FileSystemObject Dim myFolder As Folder Dim myFiles As Files Dim myFile As File Set myFolder = myFSO.GetFolder("L:\製品実現プロセス書類\作業標準書\ ComboBox1") Set myFiles = myFolder.Files For Each myFile In myFiles ComboBox2.AddItem myFile.Name Next End Sub Private Sub UserForm_Initialize() Dim myFSO As New FileSystemObject Dim myFolders As Folders Dim myFolder As Folder Set myFolders = myFSO.GetFolder("L:\製品実現プロセス書類\作業標準書\").SubFolders i = 1 For Each myFolder In myFolders ComboBox1.AddItem myFolder.Name Next ComboBox1.ListIndex = 0 '初期値 End Sub コンボボックス1には フォームを開いたときにハードディスクLの製品実現プロセス書類フォルダ内の作業標準書フォルダー内のフォルダをすべてを書き込むようして、 コンボボックス2にはコマンドボタン1をクリックしたときに コンボボックス1で選択したフォルダ内のファイルを取得したいのですがパスが見つかりませんのエラーが出ます。 たぶん、コンボボックス1の書き込み方を間違えていると思いますが わかりません?? 教えていただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

Set myFolder = myFSO.GetFolder("L:\製品実現プロセス書類\作業標準書\ ComboBox1") 最後のComboBox1の部分は、Combobox1で選択された項目ですから Set myFolder = myFSO.GetFolder("L:\製品実現プロセス書類\作業標準 書\" & ComboBox1.Text) ではないですか?   それから、今回の件とは関係ないですが、 ComboBox2のFor Each myFile in myFilesの前に ComboBox2.Clear が必須だと思いますが。 外しましたらご容赦願います。  

77TAKETAKA
質問者

お礼

ありがとうございます。 ファイル取得できました。 ご指摘のようにComboBox2.Clear は必須ですね。

関連するQ&A

  • エクセルVBAで質問です

    下のコードをみつけました。 質問が二つあります。 1.エラーになります。 実行するとユーザー定義型は定義されていません、と出ます。どこが不具合でしょうか?おなじように記述したつもりですが・・・ 2.コードでは、Cドライブの中にあるフォルダに固定されていますが、これをウィンドウを表示させて、検索したいフォルダを選択させて調べるようにできますか? どうぞよろしくお願いします。 Sub フォルダ取得() Dim myFSO As New FileSystemObject Dim myFolders As Folders Dim myFolder As folder Dim i As Integer Set myFolders = myFSO.GetFolder("C:\").SubFolders i = 1 For Each myFolder In myFolders Cells(i + 1, 1).Value = myFolder.Name i = i + 1 Next End Sub

  • VBA 一つのフォルダの中のフォルダ名とファイル名

    一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?

  • テキストファイルをエクセルに移すマクロのことで?

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String 'ここのアドレスをファイルが格納されているフォルダのパスに変えてください FolderPath = "C:\Users\・・・" Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub

  • エクセルならうまく行くのですがアクセスだとエラーに

    エクセルならうまく行くのですがアクセスだとエラーになるのですがなぜでしょうか? フォルダに入ってるフォルダ名を全て取得して一つにつなげたいのですが Sub フォルダ名を取得() 参照設定:Microsoft Scripting Runtime Dim MyFSO As Object Dim MyGetFolder As String Dim MyFolderName As String Dim MyFolder As Folder Dim i As Long MyGetFolder = "D:\My Documents" Set MyFSO = CreateObject("Scripting.FileSystemObject") With MyFSO With .GetFolder(MyGetFolder) For Each MyFolder In .SubFolders MyFolderName = MyFolderName & "," & MyFolder.Name Next End With End With MsgBox MyFolderName Set MyFSO = Nothing End Sub これを実行するとアクセスだと For Each MyFolder In .SubFolders で、実行時エラー13 型が一致しません。 になります。 エクセルもアクセスも参照設定:Microsoft Scripting Runtimeにチェックを入れています。 コードはネットで拾ってきたコードです。 オフィスの種類は2003・OSはXPです。

  • FSOでエクセルファイルを作成したい

    FSOでエクセルファイルを作成したいのですが、 ファイルの作成はできますが、作成したファイルが開けません。 Sub 新規Excelファイルを作成する() Dim MyFile As String Dim myFSO As Object MyFile = "管理簿.xlsx" Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO.CreateTextFile("C:\" & MyFile) .Close End With Set myFSO = Nothing End Sub で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。

  • エクセルVBAのコンボボックス

    エクセル2002使用です。 生年月日とかを入力できるコンボボックスを作っているのですが、同じコンボボックスを5つ作ろうとしています。例えば和暦を入力するには Private Sub userform_initialize() With ComboBox(1) .AddItem "昭和" .AddItem "平成" End sub でうまくいくのですが、2個目から5つ目まで同じものを作成する場合、 With ComboBox(2) ・・・ With ComboBox(3) ・・・ と、コードを記述していかないと駄目なのでしょうか? できれば With ComboBox(1: 5) とか、 変数を使って Private Sub userform_initialize() Dim i As Integer For i = 1 To 5 With ComboBox(i) .AddItem "昭和" .AddItem "平成" End With Next End sub といった具合にまとめたいのですが、コンパイルエラーとなってしまいます。 初歩的な質問で申し訳ないのですが、よろしくお願いします。

  • マクロのことで再度質問です。

    すいません、先ほど質問した者です。 http://okwave.jp/qa/q7357905.html 以下のマクロを試すと・・ Aのセルに「ファイル名.txt」 Bのセルに「C:\Users\~¥フォルダ名」 となります。 この「.txt」と「C:\Users\~¥」は表示させたくありません。 自分でもいじってみたのですが、できませんでした。 表示させないようにするにはどうすればいいでしょうか? 度々の質問で恐縮ですが、よろしくお願いします。 Sub Macro() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") Dim FolderPath As String FolderPath = ThisWorkbook.Path Dim myFile As Object Dim i As Long i = 2 Dim myFolder As Object For Each myFolder In fso.GetFolder(FolderPath).SubFolders For Each myFile In fso.GetFolder(myFolder).Files Cells(i, 4).Value = myFolder Cells(i, 1).Value = myFile.Name Cells(i, 7).Value = fso.OpenTextFile(myFile.Path).ReadAll() i = i + 1 Next Next End Sub Private Sub CommandButton1_Click() End Sub

  • VBA SFO C:\Windows

    Cドライブには、 IntelもWindowsのどちらのフォルダも存在するのに Sub Sample() Dim myFSO As Object Debug.Print CreateObject("scripting.filesystemobject").GetFolder("C:\Intel").Size Debug.Print CreateObject("scripting.filesystemobject").GetFolder("C:\Windows").Size Set myFSO = Nothing End Sub をVBAで実行すると \Windows の方だけエラーになります。 エラー内容は 実行時エラー 70 書き込みできません。 です。 何故でしょうか?

  • エクセルマクロでフォルダのコピーがしたい

    こんにちわ 色々調べてフォルダのコピーはできたのですが、色々いじっていて分からないことが出てきたので質問に来ました。 やりたいことはフォルダをコピーしたいのですが、それぞれ名前を自動で変えようと思い下記(1)を元に下記(2)を作ってみましたが、動きませんでした。 (1)いくつかのサイトを見て動いたマクロ sub test() Dim myFSO As New FileSystemObject myFSO.CopyFolder "C:\test", "C:\test2" End Sub (2)ちょっといじって動かないマクロ sub test() Dim myFSO As New FileSystemObject Dim name As String Dim name2 As String name = "C:\test" name2 = "C:\test2" myFSO.CopyFolder "name", "name2" End Sub 「パスが見つかりません」と出てきたので、読み込んでいないのだとは思うのですが、どうしたら動くかアドバイスをいただきたいです。 よろしくお願いします。

  • 同じコンボボックスを二つ以上作る方法

    今同じ内容を表示するコンボボックスを二つ作ろうと思っているのですがつくり方がわかりません。 どのようにすれば一つのプログラムで二つのコンボボックスを作れるのでしょうか 例: 表示では はい いいえ プログラム: Private Sub UserForm_Initialize() ComboBox1.AddItem "はい" ComboBox1.AddItem "いいえ" End Sub Private Sub UserForm_Initialize() ComboBox2.AddItem "はい" ComboBox2.AddItem "いいえ" End Sub ↑のような作り方ではなく簡略化して Private Sub UserForm_Initialize() ComboBox●.AddItem "はい" ComboBox●.AddItem "いいえ" End Sub ●部を変更できれば一つのプログラムでコンボボックスを2つ操作できると思うのですがどのようにすればよろしいでしょうか?

専門家に質問してみよう