【VBA】FileSystemObjectでファイル・フォルダ操作

参照設定

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の末尾に「\」を含めるかどうかで出力先が異なる。

 

 

 

 

コメントを残す