[ VBA ] 読み取り専用ファイルのあるフォルダを削除 ( Scripting.FileSystemObject )

Pocket

VBA ではフォルダを削除する場合には、まずはフォルダ内にあるファイルやサブフォルダから削除する必要があります。ここでは、サブフォルダ等も含めてフォルダを削除するサンプルを掲載しています。

スポンサーリンク

ポイント

読み取り専用ファイルがある場合には、まずはその属性を解除する必要があります。詳細はコメントを参照ください。

フォルダ削除サンプルスクリプト
' ---------------------------------------------------------------
' フォルダを削除する
' サブフォルダやファイル(隠しファイル、読み取り専用ファイル)も削除
' ---------------------------------------------------------------
Private Sub myDeleteFolder(ByVal dirPath)
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダが存在しない場合は何もしない
    If fso.FolderExists(dirPath) = False Then
        Exit Sub
    End If
    
    ' フォルダ内のファイルの一覧を取得し削除する
    For Each f In fso.GetFolder(dirPath).Files
    
        ' 読み取り専用ファイルであれば、その属性を解除
        If (fso.GetFile(f).Attributes And 1) Then
            fso.GetFile(f).Attributes = 0
        End If
        
        ' ファイルを削除する
        fso.DeleteFile (f)
        
    Next
        
    ' サブフォルダの一覧を取得する
    For Each sd In fso.GetFolder(dirPath).SubFolders
    
        ' サブフォルダ内のファイルの削除(再帰呼び出し)
        Call myDeleteFolder(sd)
        
    Next
    
    ' 自フォルダーを削除する
    fso.deleteFolder (dirPath)
    
    Set fso = Nothing
    
End Sub

' 呼出し例
    Dim dir As String
    dir = "E:\aaa"
    
    myDeleteFolder (dir)

サブフォルダや読み取り専用ファイルや隠しファイルを含めたファイルを削除してから対象のフォルダを削除しています。コメントにもあるように読み取り専用ファイルの属性の削除を行わずに、読み取り専用ファイルを削除しようとすると、エラーダイアログが出力されます。

読み取り専用ファイルの削除でエラー

読み取り専用ファイルの削除でエラー

ファイルの属性一覧

ファイルの属性を下表にまとめましたので、ご確認ください。

内容
0標準ファイル
1読み取り専用ファイル
2隠しファイル
4システムファイル
8ディスクドライブボリュームラベル(取得のみ可能)
16フォルダまたはディレクトリ(取得のみ可能)
32アーカイブファイル
64リンクまたはショートカット(取得のみ可能)
128圧縮ファイル(取得のみ可能)
参考

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *