更新日:、 作成日:
VBA ファイルの読み取り専用などの属性を取得または変更する
はじめに
Excel VBA マクロでファイルの読み取り専用などの属性を取得または変更する方法を紹介します。
Attributes プロパティを使って、指定したファイルの属性を取得または設定できます。
フォルダ内のファイル一覧から指定したファイルのみ設定できます。
FileSystemObject について
ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。
コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。
ファイルの属性を取得または変更する
ファイルの属性を取得
Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化
Dim f As File
Set f = fso.GetFile("D:\Tips.txt") ' ファイルを取得
Dim a As Long
a = f.Attributes ' 属性を取得
Debug.Print(a)
' 後始末
Set fso = Nothing
fso.GetFile 関数で指定したパスの File オブジェクトを取得します。ファイルが存在しないときはエラーが発生します。
f.Attributes プロパティから、属性を取得または変更できます。Attributes の値には次のものがあります。
定数 | 値 | 説明 |
Normal | 0 | 標準ファイル |
ReadOnly | 1 | 読み取り専用 |
Hidden | 2 | 隠しファイル |
System | 4 | システム ファイル |
Volume | 8 | ディスク ドライブ ボリューム ラベル。値の取得のみ可能 |
Directory | 16 | フォルダまたはディレクトリ。値の取得のみ可能 |
Archive | 32 | ファイルが前回のバックアップ以降に変更されているかどうか |
Alias | 1024 | リンクまたはショートカット。値の取得のみ可能 |
Compressed | 2048 | 圧縮ファイル。値の取得のみ可能 |
複数の属性が設定されているときは (読み取り専用と隠しファイルなら) 1 + 2 で 3 の値が取得されます。
どの属性が設定されているかは「ビット演算」を使用して判定できます。Normal (標準ファイル) の値は 0 なので、全てのファイルに設定されていると考えられます。
Dim a As Long
a = f.Attributes ' 属性を取得
If a And ReadOnly Then
Debug.Print("読み取り専用")
End If
If a And Hidden Then
Debug.Print("隠しファイル")
End If
ファイルに属性を設定
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim f As File
Set f = fso.GetFile("D:\Tips.txt") ' ファイルを取得
f.Attributes = Normal ' 属性を設定
' 後始末
Set fso = Nothing
f.Attributes プロパティから、属性を取得または変更できます。
複数の値を設定するときは各属性を足し算します。
f.Attributes = ReadOnly + Hidden ' 読み取り専用と隠しファイルを設定
既存の属性に新しい属性を追加するには「ビット演算」を使用してできます。
Dim a As Long
a = f.Attributes
f.Attributes = a Or ReadOnly ' 読み取り専用を追加する
f.Attributes = a Or Hidden ' 隠しファイルを追加する
Directory (フォルダ) など値の取得のみ可能な属性を設定した時は、強制的に標準ファイルになります。
フォルダ内のファイルの属性を取得または変更
Dim fso As FileSystemObject
Set fso = New FileSystemObject
Dim fl As Folder
Set fl = fso.GetFolder("D:\") ' フォルダを取得
Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
If f.Name = "Tips.txt" Then ' 属性を取得または変更したいファイル
Dim a As Integer
a = f.Attributes ' 属性を取得
Debug.Print(a)
f.Attributes = Normal ' 属性の設定
End If
Next
' 後始末
Set fso = Nothing
fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。
fl.Files プロパティから、そのフォルダの File オブジェクトの一覧を取得できます。
f.Attributes プロパティから、属性を取得または変更できます。
スポンサーリンク