• ベストアンサー

このコードはFSOを使ってるのでしょうか?

Sub フォルダ作成() MkDir "C:\新しいフォルダ" End Sub で、フォルダが作成されますが、 上記のコードは省略されてるだけで FileSystemObjectオブジェクトは使われていますか? フォルダの操作は、FSOじゃないとできないと思っていましたが 上記のコードを見る限りFSOを使わなくても出来てるような気がして 混乱しています。 ご回答よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

いいえ。MkDirはFileSystemObjectのメンバではありません。 FSOは、CreateObjectでロードしてしまう場合が多いですが、VBAの参照設定で「Microsoft Scripting Runtime」にチェックを入れると実装されます。scrrun.dllのライブラリに含まれています。 一方MkDirなどはVBAのライブラリ(VBE6.DLL)に含まれています。VBAの標準のステートメントです。

b1b1vc2v2
質問者

お礼

ライブラリが違うのですね。 有難うございました。

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

その他の回答 (1)

  • ariseru
  • ベストアンサー率56% (930/1659)
回答No.1

>上記のコードは省略されてるだけで >FileSystemObjectオブジェクトは使われていますか? 使っていません。 FileSystemObjectのフォルダ作成用のメソッド名はCreateFolderなのでMkDirとは別物です。

b1b1vc2v2
質問者

お礼

フォルダ作成のメソッドは ・CreateFolder ・MkDir があり、 今回は、後者のMkDirを使ったから、 FSOは使ってないという事ですね。 有難うございました。

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

関連するQ&A

  • 同名でもエラーにならない理由

    Sub バックアップ作成() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CopyFile CurrentProject.FullName, "C:\test.mdb" Set FSO = Nothing End Sub このコードを実行すると、同じファイルがあってもエラーになりません。 Sub DiskOprate4() MkDir "C:\バックアップ" End Sub なら同名のフォルダがあればエラーになります。 ファイルはエラーにならないがフォルダならエラーになるのでしょうか? それともFSOというのを使うとエラーにならないのですか? よろしくお願いします。

  • 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 で、エラーにならずうまくいっています。 が、その出来上がったファイルを開こうとすると 「ファイル形式またはファイル拡張子が正しくありません」 と言う旨のメッセージが表示されます。 何が間違ってますか? よろしくお願いします。

  • FSOを使いサブフォルダのファイル操作

    同じ階層のサブフォルダにxlsm入るが入っており、VBAによりモジュールを解放しようと試みています。 まずは、FSOを使ってサブフォルダにアクセスしようとしましたが、下から6行目でエラー(424 オブジェクトが必要です)が出てしまい、解決できませんので、ご教示いただけないでしょうか? よろしくお願いします Sub DeleteMain() With Application.FileDialog(msoFileDialogFolderPicker) If Not .Show Then Exit Sub Call DeleteSub(folderPath:=.SelectedItems(1)) End With End Sub Sub DeleteSub(folderPath As String, Optional mycount As Long = 0) Dim fso As Object, myFolders As Object, myfile As Object Set fso = CreateObject("Scripting.FileSystemObject") Set myFolders = fso.GetFolder(folderPath).SubFolders For Each myfile In fso.GetFolder(folderPath).Files mycount = mycount + 1 ' Cells(mycount, 1) = myfile.Path Debug.Print myfile.Path Next For Each myFolders In fso.GetFolder(folder.Path).SubFolders Call DeleteSub(myFolder.Path, mycount) Next Set fso = Nothing Set myFolders = Nothing End Sub

  • DVD(Eドライブ)に新規ファイルを作成

    VBAの初心者です。DVD(Eドライブ)に新規ファイルを作成しようと思い、WEBから拝借したコード: Sub test5() 'E:\Work\フォルダにSubフォルダを作成します。 Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") FSO.CreateFolder "E:\Work\Sub" Set FSO = Nothing End Sub を実行したところ、 FSO.CreateFolder "E:\Work\book1"の行で「パスが見つかりません」というエラーが出ます。解決法を教えてください。

  • FSO.CopyFileでのエラー無視方法

    コピー元フォルダにあるxlsファイルを全てコピー先のフォルダにコピーするVBAを作っています。 既にコピー先フォルダに同名のファイルがある場合は上書きせずスキップし、 コピー先フォルダに無いファイルだけコピーしたいのですが、 Sub test() Dim FSO As Object Dim md As String Set FSO = CreateObject("Scripting.FileSystemObject") Set md = Format (Date, "MMDD") FSO.CopyFile "C:\コピー元\*.xls", "C:\コピー先\"& md ,False Set FSO = Nothing End Sub FSO.CopyFileをFalseにするとコピー先に同名のファイルがある場合に エラーで止まってしまいます。 このエラーを無視してコピーを続ける方法はありますでしょうか。 今回は確認ダイアログなど一切出さずに処理する方法が知りたいのですが、 今後の為に同名のファイルがあれば上書き確認ダイアログを出し、 処理を分岐させる方法もありましたらヒントだけでも教えて頂けると嬉しいです。 作成はExcel2010ですが、Excel2002でも動作するように作りたいです。 よろしくお願いいたします。

  • フォルダをコピー フォルダの中に入れたい FSO

    vbaです。よろしくお願いします。 Sub Sample() Dim myFSO As Object Dim MyPath As String MyPath = "C:\Users\ああああ\Desktop\" Set myFSO = CreateObject("Scripting.FileSystemObject") myFSO.CopyFolder MyPath & "コピーしたフォルダーを入れるフォルダー", MyPath & "コピーするフォルダ" Set myFSO = Nothing End Sub こんな感じで、デスクトップにある、"コピーするフォルダ"をコピーして、 デスクトップにある、"コピーしたフォルダーを入れるフォルダー"の中に入れたいのですが 上記のコードを実行しても何も起きません。 コピーしたフォルダーを入れるフォルダーの中身を見ても、空です。 ”コピーしたフォルダーを入れるフォルダー”の中に、"コピーするフォルダ" を入れる方法を教えてください。

  • FileSystemObjectでエクセル作成

    エクセル2003です。 Sub test() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") With FSO.CreateTextFile("C:\test.xls") .Close End With Set FSO = Nothing End Sub これでエクセルファイルを作成することが出来るのですが サイズが0KBであり、中身を開いて文字を入れて保存しようとすると 「テキスト(タブ区切り)と互換性のない機能が含まれている可能性があります」 と言うメッセージが表示されます。 普通のエクセルファイルとは違うファイルが作成されてしまってるのでしょうか? CSVファイルではなく普通のエクセルファイルをFileSystemObjectで作成する方法をご教授ください。

  • vbaでフォルダ属性がうまく取れません

    vbaでフォルダ属性が隠しフォルダかどうかを調べるコードを書いています。 C:\ProgramData\ は隠しフォルダなのに、なぜか16が返って来ます。 試しにvbs(wsh)だと18が返って来ます。 環境は Win10 + Excel2013(32ビット) です。 vbaで返値18を求めるにはどうすれば良いのでしょうか。 Sub test() Dim mPath Dim fso, f mPath = "C:\ProgramData\" Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(mPath) MsgBox f.Attributes End Sub

  • VBScriptで、任意のフォルダコレクションを取得するには?

    VBScriptについて質問します(マイナーですみません) 任意のフォルダコレクションを取得して、 そのフォルダ名を1つ1つ得たいんですが、 うまくいきません。 FileSystemObjectを作成して、 任意のフォルダ(MyFolder)を取得することはできました。 Set fso=CreateObject("Scripting.FileSystemObject") Set f=fso.GetFolder("C:/....../デスクトップ/MyFolder") いま、MyFolder の下に、複数のサブフォルダがあるとき、 サブフォルダのコレクションを取得して、 サブフォルダ名を1つ1つ得るには、 どうしたらいいのでしょうか? よろしくおねがいします。

  • 実行時エラー'13'型が一致しませんエラー発生

    office2010 サーバのあるフォルダ(1)にexcelファイルが登録されています。 バックアップを取るために、フォルダ末尾に-と日付情報を付加して新規フォルダ(2)を作成 (1)のフォルダ配下のファイルを全て(2)のフォルダ配下にコピー という動作をさせようとしています サーバはIPアドレスで指定(**.**.**.**で表現しています) マクロ Sub Sample_FSO_CopyFolder() '参照設定追加 Microsoft Scripting Runtime 'フォルダをコピー(TOOLシートのU1セルに =TEXT(NOW(),"yyyymmddhhmmss") ' Dim datename As String Worksheets("TOOL").Range("U1").Calculate  datename = Worksheets("TOOL").Range("U1") ' '新規フォルダ作成 Dim myFO As Object 'オブジェクト型の変数を定義’ Dim FolderName As String '作成したいフォルダパスを格納’ Set myFO = CreateObject("Scripting.FileSystemObject") 'オブジェクト型の変数にFileSystemObjectを設定’ FolderName = "\\**.**.**.**\data\SYSTEM\JIG" & "-" & datename & "" myFO.CreateFolder FolderName 'フォルダ作成’ Set myFO = Nothing 'オブジェクトの解放’ '複数のファイルをコピー Dim fso As FileSystemObject Set fso = New FileSystemObject Call fso.CopyFile("\\**.**.**.**\data\SYSTEM\JIG\*", "FolderName & " \ "", True) ' ' 全てのファイルをまとめてコピー ' 後始末 Set fso = Nothing End Sub 上記実行で型が一致しませんのポップアップエラーが発生します。 Call fso.CopyFile("\\**.**.**.**\data\SYSTEM\JIG\*", "FolderName & " \ "", True) の部分をFolderNameの変数ではなく、下記の様に直接フォルダ名で指定すると、コピー動作します。 'Call fso.CopyFile("\\**.**.**.**\data\SYSTEM\JIG\*", "\\**.**.**.**\data\SYSTEM\JIG-20190228174216\", True) ' 全てのファイルをまとめてコピー ※ デバッグモードのローカルウィンドウで値を見たとき、 FolderNameは\\**.**.**.**\data\SYSTEM\JIG-20190228174216 となっており正しいと思うのですが、なぜ変数指定でエラーになるのでしょう?

専門家に質問してみよう