• 締切済み

エクセルVBAがエラーが出て作動しません。

以下のVBAコードを作成してみました。ところが、"Sub Sample1()"の部分が黄色く塗りつぶされ、"get folder"が選択された状態で”Subまたはfunctionが定義されていません”というエラーがでます。こちらですがどこを直せばうまくいくかご教示いただけないでしょうか?因みにファイルを探すコードを試している過程でたまたまネットでコードを見つけたので試ている段階です。 ーーーーーーーーーーーーーーーーーーーー Sub Sample1() Dim f As Variant, buf As String, cnt As Long, FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") With Application.FileSearch .NewSearch buf = InputBox("ZGBL_DLV_SOM_RP0442_SLS_ORD (39).xlsx") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf buf = GetFolder("C:\Users\ytsuruok\Desktop\test") If buf = "" Then Exit Sub .LookIn = buf .SearchSubFolders = True ''サブフォルダも検索する If .Execute() > 0 Then For Each f In .FoundFiles cnt = cnt + 1 Cells(cnt, 1) = f ''パス+ファイル名 Cells(cnt, 2) = FSO.GetFile(f).Name ''ファイル名 Cells(cnt, 3) = FSO.GetFile(f).ParentFolder ''パス Next f Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing End Sub ーーーーーーーーーーーーーーーー

みんなの回答

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

私の知識では、「GetFolder」は、「Scripting.FileSystemObject」の機能を使わないとダメです。 すなわち、「Set FSO = CreateObject("Scripting.FileSystemObject")」としているので、 Set buf = FSO.GetFolder("C:\Users\ytsuruok\Desktop\test") と、記述しなければなりません。 「GetFolder()」で得られるのは、オブジェクトですので、「Set」しなければならないのです。 すなわち、 For Each f In buf.Files などとすると、「buf」フォルダ内のファイルが処理できますが、「buf」が単なる文字列の場合には、このようなことはできません。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

例えばhttp://officetanaka.net/excel/vba/file/file07.htmの例にあるように (1)With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder("C:\Sample").Files のようにWith で上位のobjectを指定するか (2)上位のobjectを前につけて、FSO.GetFolder(....のように指定する か、しないとダメでしょう。ピリオドが画面上は小さい陰影で、見にくいとしても、このルールは基本ですよ。

回答No.1

buf = GetFolder("C:\Users\ytsuruok\Desktop\test") を buf = FSO.GetFolder("C:\Users\ytsuruok\Desktop\test") としたら、どうなりますか。