GetAttr
GetAttr関数はファイルやフォルダの属性を調べる際に利用します。
構文
Function GetAttr(PathName As String) As VbFileAttribute
PathName | 属性を調べたいファイルやフォルダのパスを指定します。ファイル名だけを指定した場合はカレントフォルダにあるファイルが対象になります。 |
VbFileAttribute | 取得する属性はVbFileAttribute列挙型で返されます。複数の属性が設定されている場合は各属性の値が加算されて返却されます。 |
VbFileAttribute列挙型
定数 | 値 | 内容 |
---|---|---|
vbNormal | 0 | 通常ファイル |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システムファイル |
vbVolume | 8 | ボリュームファイル(使いません) |
vbDirectory | 16 | フォルダ |
vbArchive | 32 | アーカイブ |
vbAlias | 64 | エイリアス(Macのみ。Windowsのショートカット) |
属性の組み合わせ
GetAttr関数の結果は数値で返却されます。
その際に複数の属性が組み合わさっていることがあります。vbReadOnly(1 読み取り専用ファイル)+ vbHidden(2隠しファイル) などです。
以下でその組み合わせのパターンの一覧を紹介しています。
「VBAのGetAttrやSetAttrの定数の組み合わせ一覧」
サンプルコード
指定ファイルに設定されている属性をイミディエイトウィンドウに出力するコードです。
1 2 3 4 5 6 7 8 9 10 11 |
Sub GetAttrTest() Dim sFilePath Dim ret As VbFileAttribute sFilePath = "C:\test\a.xlsx" '// ファイルの属性を取得 ret = GetAttr(sFilePath) Debug.Print ret End Sub |
ある属性が設定されているか確認するには
GetAttr関数で取得した値にある属性が含まれているかどうかを確認したい場合があります。
例えば、GetAttr関数で22が返された場合に読み取り専用のvbReadOnly(1)が設定されているかどうか、などです。
これを調べるにはAnd演算子を利用します。
指定ファイルの属性に読み取り専用が設定されているかを確認するには、以下のコードの11行目のようにAnd演算子を使ってGetAttr関数の結果と調べたい属性をつなげます。
このときAnd演算子で結んだ部分を括弧で囲うことを忘れないようにしてください。
括弧を忘れるとIf文のAnd条件の動作になり、想定した動きになりません。
1. 1つの属性が含まれているか確認する場合のコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub GetAttrTest2() Dim sFilePath Dim ret As VbFileAttribute sFilePath = "C:\test\a.xlsx" '// ファイルの属性を取得 ret = GetAttr(sFilePath) '// 読み取り専用が設定されている場合 If (ret And vbReadOnly) = vbReadOnly Then Debug.Print "OK" Else Debug.Print "NG" End If End Sub |
2. 複数の属性が含まれているか確認する場合のコード
調べたい属性を+で結びます。比較の右辺も同様にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub GetAttrTest3() Dim sFilePath Dim ret As VbFileAttribute sFilePath = "C:\test\a.xlsx" '// ファイルの属性を取得 ret = GetAttr(sFilePath) '// 読み取り専用と隠しファイルが設定されている場合 If (ret And (vbReadOnly + vbHidden)) = (vbReadOnly + vbHidden) Then Debug.Print "OK" Else Debug.Print "NG" End If End Sub |