参照設定
FileSystemObjectを利用するためには「Microsoft Scripting Runtime」
存在チェック
Dim fso As New FileSystemObject
Dim path As String
path = ThisWorkbook.path & "\" & "Root"
If (fso.FolderExists(path)) Then
MsgBox ("フォルダ「Root」があります。")
End If
path = ThisWorkbook.path & "\" & "Root\Sub1\Text1.txt"
If (fso.FileExists(path)) Then
MsgBox ("ファイル「Text1.txt」があります。")
End If
Dim fso As New FileSystemObject
Dim path As String
path = ThisWorkbook.path & "\" & "Root"
If (fso.FolderExists(path)) Then
MsgBox ("フォルダ「Root」があります。")
End If
path = ThisWorkbook.path & "\" & "Root\Sub1\Text1.txt"
If (fso.FileExists(path)) Then
MsgBox ("ファイル「Text1.txt」があります。")
End If
コピー
Dim fso As New FileSystemObject
Dim src As String
Dim dst As String
'
' フォルダ
'
src = ThisWorkbook.path & "\" & "Root"
' ディレクトリ ⇒ リネームあり
dst = ThisWorkbook.path & "\" & "Copied"
Call fso.CopyFolder(src, dst)
' ディレクトリ + 「\」 ⇒ リネームなし
dst = ThisWorkbook.path & "\" & "Copied\"
Call fso.CopyFolder(src, dst)
'
' ファイル
'
src = ThisWorkbook.path & "\" & "Root\Sub1\Text1.txt"
' ファイル名 ⇒ リネームあり
dst = ThisWorkbook.path & "\" & "Copied\Copied.txt"
Call fso.CopyFile(src, dst)
' ディレクトリ + 「\」 ⇒ リネームなし
dst = ThisWorkbook.path & "\" & "Copied\"
Call fso.CopyFile(src, dst)
移動
Call fso.MoveFolder(src, dst)
Call fso.MoveFile(src, dst)
・移動元のフォルダが残らない点を除いて「コピー」と同じ。
リネーム
' ファイル名を変更する。
' ファイルをコピーする。
Public Sub RenameFile()
Dim fso As New FileSystemObject
Dim src As String
Dim newName As String
src = ThisWorkbook.path & "\" & "Root\Sub1\Text1.txt"
newName = "RenamedText1.txt"
fso.GetFile(src).Name = newName
Set fso = Nothing
End Sub
メモ
・ファイルとフォルダそれぞれ対になるようにメソッドが用意されている。
・ファイルとフォルダは区別して扱われないため、ファイルのパスをフォルダ系のメソッドに渡しても存在しないとエラーになる。
・destの末尾に「\」を含めるかどうかで出力先が異なる。