• ベストアンサー

エクセル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

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

  • ベストアンサー
  • suz83238
  • ベストアンサー率30% (197/656)
回答No.1

1.New FileSystemObjectでエラーが出るのであれば Sub フォルダ取得() Dim myFSO, myFolders, myFolder Dim i As Integer Set myFSO = CreateObject("Scripting.FileSystemObject") 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 2.フォルダを選択 Sub フォルダ取得2() Dim myFSO, myFolders, myFolder, Fol Dim i As Integer Set myFSO = CreateObject("Scripting.FileSystemObject") With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then Fol = .SelectedItems(1) & "\" End With Set myFolders = myFSO.GetFolder(Fol).SubFolders i = 1 For Each myFolder In myFolders Cells(i + 1, 1).Value = myFolder.Name i = i + 1 Next End Sub

newme
質問者

補足

suz83238さんありがとうございました。完璧なご回答いただき感謝です。一点、お聞きしてから締め切りをさせていただきたいのですが、お願いできるでしょうか? New FileSystemObjectでエラーというのは、パソコンによってサポートしていなかったりする、というようなことでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> 実行するとユーザー定義型は定義されていません、と出ます 使用する前に、[プロジェクト]→[参照設定]で Microsoft Scripting Runtime の参照にチェックを入れておいて下さい。 これがされていないPCでエラーになります。 > 検索したいフォルダを選択させて調べるようにできますか? Sub Test() Dim MyTarget As String Dim myFSO As New FileSystemObject Dim myFolders As Folders Dim MyFolder As folder Dim i As Integer With Application.FileDialog(msoFileDialogFolderPicker) .Show MyTarget = .SelectedItems(1) End With Set myFolders = myFSO.GetFolder(MyTarget).SubFolders i = 1 For Each MyFolder In myFolders Cells(i + 1, 1).Value = MyFolder.Name i = i + 1 Next End Sub

newme
質問者

お礼

エラーの原因よくわかりました。こちらのコードも勉強になりました。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル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の書き込み方を間違えていると思いますが わかりません?? 教えていただけないでしょうか?

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

    エクセルならうまく行くのですがアクセスだとエラーになるのですがなぜでしょうか? フォルダに入ってるフォルダ名を全て取得して一つにつなげたいのですが 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です。

  • 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 ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?

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

    すいません、先ほど質問した者です。 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

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

    以前、複数のテキストファイルをエクセルに移すマクロを教えてもらったのですが、 以下マクロですと、フォルダのパスを指定しないといけません。 今回教えてもらいたいのは、フォルダのパスを指定しなくてもよい方法です。 どういう事かと言うと、仮にディスクトップにフォルダがあるとします。 そのフォルダの中には、マクロが入っているエクセルシートとテキストが入っているフォルダです。 つまり、そのフォルダ内だけで、処理をしたいと考えています。 また、フォルダ名は、その時によって異なります。 今までは、以下の方法を使っていたのですが、ちょっと使いにくいと感じています。 申し訳ありませんが、どなたか教えていただけないでしょうか? 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

  • 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 「パスが見つかりません」と出てきたので、読み込んでいないのだとは思うのですが、どうしたら動くかアドバイスをいただきたいです。 よろしくお願いします。

  • A列の値を元にフォルダを作成するVBAの質問です

    A列の値を元にフォルダを作成するVBAで 富士通の緑の本を参考にして作ってみたのですが、 うまく動作しません。 1.Sub フォルダ作成() 2. 3. Dim MyFSO As New FileSystemObject 4. Dim Folderpath As String 5. Dim i As Integer 6. 7. i = 1 8. 9. Do While Cells(i, 1).Value <> "" 10. 11. Folderpath = ThisWorkbook & "\Cells(i, 1).value" 12. 13. MyFSO.CreateFolder Path:=Folderpath 14. 15. i = i + 1 16. 17. Loop 18. 19.Set MyFSO = Nothing 20. 21.End Sub 目的の動作は 今のワークブックのある場所にSheet1のA列の1~データがなくなるまで、 そのセルの値のフォルダを作成する。 になります。 よろしくお願いします。

  • 実行時エラー 76 パスが見つかりません。

    VBAのFileSystemObjectでフォルダをコピーしているのですが フォルダ1は問題なくコピーできるのですが 毎回フォルダ2だけは、 実行時エラー 76 パスが見つかりません。 と言うエラーになってしまいます。 Sub Sample() Dim myFSO As Object Dim MyPath As String MyPath = "C:\" Set myFSO = CreateObject("Scripting.FileSystemObject") myFSO.CopyFolder MyPath & "フォルダ2", MyPath & "新フォルダ2" Set myFSO = Nothing End Sub このようなコードなのですが、フォルダ1もフォルダ2も同じコードを使っています。 フォルダ2に関しては容量が10GBくらいありますが、フォルダが重すぎるのが原因でしょうか?

  • 「New」はつけた方がいいのでしょうか?

    vbaなのですが、 FileSystemObjectでドライブの情報を取得したりファイル操作をしているのですが FileSystemObjectを宣言する時は、 Dim myFSO As New FileSystemObject にしたほうがいいのか、 Dim myFSO As FileSystemObject でいいのか教えてください. Sub Sample() Dim myFSO As New FileSystemObject Dim Drv As Variant Dim buf As String Set myFSO = CreateObject("Scripting.FileSystemObject") For Each Drv In myFSO.Drives Debug.Print Drv.DriveLetter Next Drv Set myFSO = Nothing End Sub 上記のコードは、newを付けても付けなくても結果は変わりませんでした。 よろしくお願いします。

専門家に質問してみよう