GetAttr 関数はファイルまたはフォルダの属性を整数 (Integer型) で返します。この戻り値とファイル属性を表す定数を And でビット演算を行うと属性の有無がわかります。
GetAttr関数の使用方法
構文
GetAttr(PathName) 【戻り値】 整数型 (Integer)
引数名 | 省略 | 説明 |
---|---|---|
PathName | × | ファイル名を表す文字列式を指定します。 フォルダ名およびドライブ名も含めて指定できます。 |
定数 | 値 | 説明 |
---|---|---|
vbNormal | 0 | 標準ファイル(既定値) |
vbReadOnly | 1 | 読み取り専用ファイル |
vbHidden | 2 | 隠しファイル |
vbSystem | 4 | システム ファイル※Windowsのみ |
vbVolume | 8 | ボリューム ラベル※Windowsのみ |
vbDirectory | 16 | フォルダ |
vbArchive | 32 | アーカイブ ※Windowsのみ |
vbAlias | 64 | エイリアス ファイル※Macintoshのみ |
GetAttr関数の使用例
前ページのサンプル『Dir関数によりファイル・サブフォルダの一覧を取得する 』に手を加えて、ファイルとフォルダを区別できるようにしました。GetAttr の戻り値とフォルダの属性である vbDirectory を And でビット演算し、ゼロでなければフォルダになります。
Sub sample_ef072_01()
Dim myFile As String
Dim strRtn As String
myFile = "C:¥Users¥Public¥vba¥"
'初回検索
strRtn = Dir(myFile, vbReadOnly + vbHidden + vbDirectory)
Do Until strRtn = ""
Select Case strRtn
Case ".", ".."
'カレントフォルダと親フォルダの場合は出力しない。
Case Else
If (GetAttr(myFile & strRtn) And vbDirectory) > 0 Then
strRtn = strRtn & " [フォルダ]"
Else
strRtn = strRtn & " [ファイル]"
End If
Debug.Print "Dir関数戻り値:" & strRtn
End Select
'2回目以降は引数を省略してDir関数を使用
strRtn = Dir
Loop
End Sub
Dir関数 Do…Loop Select Case による複数の条件分岐
テスト用フォルダ『C:¥Users¥Public¥vba』は下図のようになっています。
