概要
FileAttr
関数は、VBAでファイルのアクセスモード(読み込み専用、書き込み専用など)や、オペレーティングシステムが使用しているファイルハンドル(ファイル識別子)を取得するために使用される関数です。この関数を使用することで、ファイルがどのようなモードで開かれているかを確認し、適切な操作を行うことができます。
構文
FileAttr(filenumber, returntype)
パラメータ
-
filenumber
Open
ステートメントで指定したファイル番号を入力します。これは、対象のファイルに対応する識別番号です。 -
returntype
取得する情報の種類を指定します。
-
1
:ファイルのアクセスモードを返します。 -
2
:オペレーティングシステムのファイルハンドル(ファイル識別子)を返します。
-
戻り値
returntype
の値によって戻り値は異なります。
-
アクセスモード:以下のいずれかの値を返します。
-
1
:Input(入力専用) -
2
:Output(出力専用) -
4
:Random(ランダムアクセス) -
8
:Append(追記) -
32
:Binary(バイナリモード)
-
-
ファイルハンドル:OSが管理するファイル識別子の整数値を返します。
使用例
基本的な使用例 - ファイルのアクセスモードを取得する
以下の例では、テキストファイルを読み込みモードで開き、FileAttr
関数を使用してアクセスモードを確認します。
Sub GetFileAccessMode()
Dim filePath As String
Dim fileNumber As Integer
Dim mode As Integer
' 読み込むファイルのパス
filePath = "C:\Example\sample.txt"
fileNumber = FreeFile ' 使用可能なファイル番号を取得
' ファイルを入力モードで開く
Open filePath For Input As #fileNumber
' ファイルのアクセスモードを取得
mode = FileAttr(fileNumber, 1)
Select Case mode
Case 1
MsgBox "ファイルはInput(入力専用)モードで開かれています。"
Case 2
MsgBox "ファイルはOutput(出力専用)モードで開かれています。"
Case 4
MsgBox "ファイルはRandom(ランダムアクセス)モードで開かれています。"
Case 8
MsgBox "ファイルはAppend(追記)モードで開かれています。"
Case 32
MsgBox "ファイルはBinary(バイナリ)モードで開かれています。"
Case Else
MsgBox "不明なアクセスモードです。"
End Select
' ファイルを閉じる
Close #fileNumber
End Sub
この例では、ファイルのアクセスモードを取得して表示します。Select Case
ステートメントを使用して、取得したモードに応じたメッセージを表示します。
ファイルハンドルを取得する
ファイルのオペレーティングシステムファイルハンドルを取得することで、ファイルの管理状況を確認することができます。
Sub GetFileHandle()
Dim filePath As String
Dim fileNumber As Integer
Dim handle As Integer
' ファイルのパス
filePath = "C:\Example\sample.txt"
fileNumber = FreeFile
' ファイルをバイナリモードで開く
Open filePath For Binary As #fileNumber
' ファイルハンドルを取得
handle = FileAttr(fileNumber, 2)
MsgBox "ファイルハンドルは: " & handle
' ファイルを閉じる
Close #fileNumber
End Sub
この例では、FileAttr
関数を使用して、ファイルハンドル(OSが管理する識別子)を取得して表示しています。
エラーハンドリング付きの例
ファイルが正しくオープンされていない場合や、誤ったファイル番号を指定した場合、FileAttr
関数の使用時にエラーが発生します。以下のコードは、エラーハンドリングを行いながら安全にファイルの属性を取得します。
Sub SafeGetFileAttr()
Dim filePath As String
Dim fileNumber As Integer
Dim mode As Integer
filePath = "C:\Example\sample.txt"
fileNumber = FreeFile
On Error GoTo ErrorHandler
Open filePath For Input As #fileNumber
mode = FileAttr(fileNumber, 1)
MsgBox "ファイルのアクセスモードは: " & mode
Close #fileNumber
Exit Sub
ErrorHandler:
MsgBox "ファイルの属性取得中にエラーが発生しました。ファイルが正しく開かれているか確認してください。"
If fileNumber > 0 Then Close #fileNumber
End Sub
このコードでは、On Error GoTo
文を使用して、エラー発生時に適切な処理を行い、安全にプログラムを終了させます。
まとめ
FileAttr
関数は、VBAでファイルのアクセスモードやファイルハンドルを取得するための強力なツールです。これにより、ファイルの状態を動的に確認し、適切な操作を行うことができます。特に複数のファイル操作を行う際には、ファイルの属性を適切に管理することが重要です。エラーハンドリングを行うことで、より安全なファイル操作が可能になります。