今回は「FileSystemObject」オブジェクトを使用してファイルを削除する方法をご説明します。
「FileSystemObject」オブジェクトとは、ドライブ、フォルダ、ファイルを操作する事ができるオブジェクトです。
「FileSystemObject」オブジェクトの使い方も併せてご説明します。
他のファイル/フォルダの操作は次の記事をご覧ください。
- FileSystemObjectでファイルをコピー
- FileSystemObjectでフォルダをコピー
- FileSystemObjectでファイルを移動
- FileSystemObjectでフォルダを移動
- FileSystemObjectでファイルを削除
- FileSystemObjectでフォルダを作成
1.FileSystemObjectの使い方
「FileSystemObject」オブジェクトは、ドライブ、フォルダ、ファイルなどを操作する事ができるオブジェクトです。
FileSystemObjectを使用するには「CreateObject」メソッドを使用して次のように記載します。
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FileSystemObjectのメソッド一覧
メソッド | 操作内容 |
BuildPath | パスの末尾に、指定したフォルダ名を追加したパスを返します |
CopyFile | ファイルをコピーします |
CopyFolder | フォルダをコピーします |
CreateFolder | 新しいフォルダを作成します |
CreateTextFile | 新しいテキストファイルを作成します |
DeleteFile | ファイルを削除します |
DeleteFolder | フォルダを削除します |
DriveExists | ドライブが存在するかどうか調べます |
FileExists | ファイルが存在するかどうか調べます |
FolderExists | フォルダが存在するかどうか調べます |
GetAbsolutePathName | 省略したパスから完全なパス名を返します |
GetBaseName | 拡張子を除いたファイルのベース名を返します |
GetDrive | 指定したDriveオブジェクトを返します |
GetDriveName | 指定したドライブの名前を返します |
GetExtensionName | ファイルの拡張子を返します |
GetFile | 指定したFileオブジェクトを返します |
GetFileName | 指定したファイルの名前を返します |
GetFolder | 指定したFolderオブジェクトを返します |
GetParentFolderName | 指定したフォルダの親フォルダを返します |
GetSpecialFolder | システムが使用する特別なフォルダのパスを返します |
GetTempName | 一時的なファイル名を生成します |
MoveFile | ファイルを移動します |
MoveFolder | フォルダを移動します |
OpenTextFile | 指定したTextStreamオブジェクトを返します |
2.フォルダの削除
書式は「FileSystemObject.DeleteFolder folderspec[, force] 」と書きます。
【folderspec】
削除するフォルダパスを指定します。
ワイルドカードを使用する事ができます。
folderspecは省略する事ができません。
指定したフォルダが存在しない場合、エラーが発生します。
また、フォルダ内のファイルやサブフォルダも削除するため、開いているファイルや読み取り専用等、フォルダ内に削除できないファイルが存在した場合にも、エラーが発生します。
【force】
forceは読み取り専用ファイルの削除をTrue/Falseで指定します。
Trueを指定すると読み取り専用ファイルも削除可能です。
省略するとFalseを指定したことになり、読み取り専用ファイルは削除できません。
Falseを指定して読み取り専用ファイルが存在するとエラーとなります。
3.エラーを回避する
フォルダを削除する際はエラーが2種類あります。
1つが指定したフォルダが存在しない場合で、2つ目が読み取り専用のファイルや、ファイルが開いている場合に削除できないために起こるエラーです。
両方のエラーを回避するためには、次の方法を使用します。
フォルダの存在を確認する
フォルダの存在を確認して、存在する場合のみ削除します。
エラーを回避するためには「Dir(フォルダパス, vbDirectory) = “”」でフォルダの存在を確認します。
もしくは「FolderExists」を使用します。
読み取り専用ファイルや開いているファイルを回避する
読み取り専用ファイルや、開いているファイルを削除しようとして発生するエラーを回避するためには、「On Error GoTo」でエラー発生時に、スキップしてエラーを回避します。
4.サンプルコード
「If Dir(myFolder, vbDirectory) = “” Then」を「If FSO.FolderExists(myFolder) Then」と書き換えてもフォルダーの確認ができます。
指定したフォルダを削除する
Sub Sample1()
Dim FSO As Object
Dim myFolder As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = "C:\Sample\TEST1" '削除するフォルダパス
If Dir(myFolder, vbDirectory) = "" Then 'フォルダの存在チェック
MsgBox "フォルダが存在しません。"
Exit Sub
Else
'削除できないファイルのエラーを回避する
On Error GoTo ErrLabel
FSO.DeleteFolder myFolder 'フォルダ削除
End If
Set FSO = Nothing
Exit Sub
ErrLabel:
If Err.Number = 70 Then
MsgBox "削除できないファイルがあります。"
End If
End Sub
上記サンプルコードはフォルダが存在しない場合、MsgBoxで「フォルダが存在しません」と表示されます。
また、フォルダが存在して、削除する際に削除できないファイルが存在してエラーとなった場合に、「ErrLabel:」にスキップしてエラーを表示します。
複数のフォルダを削除する
削除するフォルダパスに「*」を使用して、フォルダを複数削除します。
Sub Sample2()
Dim FSO As Object
Dim myFolder As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = "C:\Sample\TEST*" '削除するフォルダパス
If Dir(myFolder, vbDirectory) = "" Then 'フォルダの存在チェック
MsgBox "フォルダが存在しません。"
Exit Sub
Else
'削除できないファイルのエラーを回避する
On Error GoTo ErrLabel
FSO.DeleteFolder myFolder 'フォルダ削除
End If
Exit Sub
Set FSO = Nothing
ErrLabel:
If Err.Number = 70 Then
MsgBox "削除できないファイルがあります。"
End If
End Sub