概要

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でファイルのアクセスモードやファイルハンドルを取得するための強力なツールです。これにより、ファイルの状態を動的に確認し、適切な操作を行うことができます。特に複数のファイル操作を行う際には、ファイルの属性を適切に管理することが重要です。エラーハンドリングを行うことで、より安全なファイル操作が可能になります。