GetAttr関数

 VBAで利用できる関数です。
 指定したファイル(フルパスで指定)の属性を表す数値を返します。

使用例

例1

コード
 作成後、属性を変更していないファイルを指定した場合です。

Sub Func_GetAttr()

    MsgBox GetAttr("E:\テストフォルダ\test.txt")

End Sub

※¥がバックスラッシュとして表示されているかもしれません(以下同様)。

出力
 この場合ファイルにアーカイブ属性があるため戻り値は「32」となります。
 ファイルプロパティでアーカイブ属性を外すと戻り値は「0」になりますが、ファイルに変更を加えるとアーカイブ属性が再度付与されますので「32」に戻ります。
f:id:accs2014:20190131165337p:plain:left:w200

例2

コード
 作成後、読み取り専用属性を追加したファイルを指定した場合です。

Sub Func_GetAttr()

    MsgBox GetAttr("E:\テストフォルダ\test2.txt")

End Sub

出力
 ファイルに読み取り専用属性(1)とアーカイブ属性(32)があるため、戻り値は「33」となります。
f:id:accs2014:20190131165333p:plain:left:w200

例3

コード
 戻り値と定数のビット演算(And)により各属性の有無を判定します。
 作成後、読み取り専用属性を追加したファイルを指定しています。

Sub Func_GetAttr()

    MsgBox (GetAttr("E:\テストフォルダ\test2.txt") And vbReadOnly) & "," & _
           (GetAttr("E:\テストフォルダ\test2.txt") And vbHidden) & "," & _
           (GetAttr("E:\テストフォルダ\test2.txt") And vbSystem) & "," & _
           (GetAttr("E:\テストフォルダ\test2.txt") And vbDirectory) & "," & _
           (GetAttr("E:\テストフォルダ\test2.txt") And vbArchive)

End Sub

出力
 読み取り専用(vbReadOnLy)に対応する値(1)とアーカイブ属性に対応する値(32)が返され、他の属性に関しては0が返されます。
 なお「通常(vbNormal)」を意味する戻り値は0ですので「~ And vbNormal」としても常に0が返ってきます。よってこの例では省略しています。「~ And vbNormal」がの結果が0だからといって他の属性に該当しないということではありません。
f:id:accs2014:20190131165328p:plain:left:w200

例4

コード
 ブートドライブを指定した場合です。

Sub Func_GetAttr()

    MsgBox GetAttr("C:")

End Sub

出力
f:id:accs2014:20190131165322p:plain:left:w200

例5

コード
 その他のドライブを指定した場合です。

Sub Func_GetAttr()

    MsgBox GetAttr("E:")

End Sub

出力

f:id:accs2014:20190131165318p:plain:left:w200

例6

コード
 フォルダを指定した場合です。

Sub Func_GetAttr()

    MsgBox GetAttr("E:\テストフォルダ")

End Sub

出力
f:id:accs2014:20190131165355p:plain:left:w200

書式

GetAttr(フルパス)

備考

 戻り値の意味は次のとおりです。

戻り値意味
0通常(定数vbNormalに対応)
1読み取り専用(定数vbReadOnlyに対応)
2隠しファイルおよびフォルダ(定数vbHiddenに対応)
4システムファイル(定数vbSystemに対応)
16フォルダ(定数vbDirectoryに対応)
32アーカイブ属性(定数vbArchiveに対応)
バックアップの対象になるかならないかを表すフラグです。
64エイリアス(定数vbAliasに対応)
macintoshでのみ取り得る値なので通常戻ってくることはありません。
 複数の属性に該当する場合、それらの合計が戻ります。
 戻り値が特定の属性を含んでいるのかどうかについては、上記例3のようにAnd演算子と定数を使って判定することができます。ただし「~ And vbNormal」の結果は常に0になります(この結果が0であるからといって、GetAttr関数の戻り値が0であるとはいえません)。