概要

GetAttr関数は、VBA(Visual Basic for Applications)で指定したファイルやフォルダの属性を取得するための関数です。ファイルが読み取り専用か、隠しファイルか、あるいはシステムファイルかなどの情報を取得できるため、ファイル操作を行う際に非常に役立ちます。

構文

GetAttr(パス)

パラメータ

  • パス

    属性を取得したいファイルまたはフォルダのパスを文字列で指定します。

戻り値

GetAttr関数は整数値を返し、この値はファイルやフォルダの属性を表します。属性の判定には以下の定数を使用します。

  • vbNormal: 通常のファイル(値 = 0)

  • vbReadOnly: 読み取り専用ファイル(値 = 1)

  • vbHidden: 隠しファイル(値 = 2)

  • vbSystem: システムファイル(値 = 4)

  • vbDirectory: フォルダ(値 = 16)

  • vbArchive: アーカイブファイル(値 = 32)

  • vbAlias: リンク/エイリアス(値 = 64)

使用例

基本的な使用例

指定したファイルの属性を取得し、読み取り専用かどうかを確認する例です。

Sub CheckFileAttributes()
    Dim filePath As String
    Dim attributes As Integer

    ' チェックするファイルのパスを指定
    filePath = "C:\Temp\example.txt"

    ' ファイルの属性を取得
    attributes = GetAttr(filePath)

    ' 読み取り専用かどうかを判定
    If (attributes And vbReadOnly) <> 0 Then
        MsgBox "このファイルは読み取り専用です。"
    Else
        MsgBox "このファイルは読み取り専用ではありません。"
    End If
End Sub

フォルダの属性を確認

フォルダがディレクトリかどうかを確認する例です。

Sub CheckDirectoryAttributes()
    Dim folderPath As String
    Dim attributes As Integer

    ' チェックするフォルダのパスを指定
    folderPath = "C:\Temp"

    ' フォルダの属性を取得
    attributes = GetAttr(folderPath)

    ' フォルダかどうかを判定
    If (attributes And vbDirectory) <> 0 Then
        MsgBox folderPath & " はフォルダです。"
    Else
        MsgBox folderPath & " はフォルダではありません。"
    End If
End Sub

複数の属性を持つファイルの確認

複数の属性(例えば、読み取り専用かつ隠しファイル)を持つファイルを確認する例です。

Sub CheckMultipleAttributes()
    Dim filePath As String
    Dim attributes As Integer

    ' チェックするファイルのパスを指定
    filePath = "C:\Temp\hidden_file.txt"

    ' ファイルの属性を取得
    attributes = GetAttr(filePath)

    ' 複数の属性を判定
    If (attributes And vbReadOnly) <> 0 And (attributes And vbHidden) <> 0 Then
        MsgBox "このファイルは読み取り専用かつ隠しファイルです。"
    Else
        MsgBox "このファイルは読み取り専用または隠しファイルではありません。"
    End If
End Sub

注意点

  • 存在しないファイルやフォルダの指定はエラーを引き起こす

    存在しないパスを指定すると、File not foundエラーが発生します。事前にファイルやフォルダの存在確認が必要です。

  • 属性の判定にはビット演算を使用

    属性の確認にはビット演算(And演算子)を使用します。複数の属性を持つ場合でも、ビット演算で個別の属性を確認可能です。

  • ネットワークドライブの指定に注意

    ネットワークドライブ上のファイル属性を取得する際には、マップされたドライブや適切な権限が必要です。

実用例

ファイルの操作を属性によって制御

ファイルが読み取り専用でない場合のみ削除を行う例です。

Sub DeleteIfNotReadOnly()
    Dim filePath As String
    filePath = "C:\Temp\deletable_file.txt"

    ' 読み取り専用でない場合のみ削除
    If (GetAttr(filePath) And vbReadOnly) = 0 Then
        Kill filePath
        MsgBox "ファイルが削除されました。"
    Else
        MsgBox "このファイルは読み取り専用のため削除できません。"
    End If
End Sub

ファイル属性の確認とログ記録

指定したフォルダ内のファイル属性を確認し、ログに記録する例です。

Sub LogFileAttributes()
    Dim filePath As String
    Dim attributes As Integer
    Dim logMessage As String

    ' チェックするファイルのパス
    filePath = "C:\Temp\logfile.txt"

    ' ファイルの属性を取得
    attributes = GetAttr(filePath)
    
    ' 属性情報をログメッセージに追加
    logMessage = "ファイル: " & filePath & vbCrLf

    If (attributes And vbReadOnly) <> 0 Then logMessage = logMessage & "読み取り専用" & vbCrLf
    If (attributes And vbHidden) <> 0 Then logMessage = logMessage & "隠しファイル" & vbCrLf
    If (attributes And vbSystem) <> 0 Then logMessage = logMessage & "システムファイル" & vbCrLf

    ' メッセージボックスでログを表示
    MsgBox logMessage
End Sub

まとめ

GetAttr関数は、ファイルやフォルダの属性を取得し、それに応じた処理を行う際に非常に役立つ機能です。読み取り専用や隠しファイルなどの属性を確認することで、ファイル操作時のエラーを防止し、安全な処理を実現できます。使用時には、存在確認や属性のビット演算に注意しながら活用しましょう。