1

Excel vbaで関数を書いています

 Function WriteByteArray(vData As Variant, sFileName As String, Optional bAppendToFile As Boolean = False) As Boolean
    Dim iFileNum As Integer, lWritePos As Long

    Debug.Print " --> Entering WriteByteArray function with " & sFileName & " file to write."
    On Error GoTo ErrFailed
    If bAppendToFile = False Then
        If Len(Dir$(sFileName)) > 0 And Len(sFileName) > 0 Then
            'Delete the existing file
            VBA.Kill sFileName
        End If
    End If

    iFileNum = FreeFile
    Debug.Print "iFileNum = " & iFileNum
    'Open sFileName For Binary Access Write As #iFileNum
    Open sFileName For Binary Lock Read Write As #iFileNum

    If bAppendToFile = False Then
        'Write to first byte
        lWritePos = 1
    Else
        'Write to last byte + 1
        lWritePos = LOF(iFileNum) + 1
    End If

    Dim buffer() As Byte
    buffer = vData
    Put #iFileNum, lWritePos, buffer

    WriteByteArray = True
    Exit Function
ErrFailed:
        Debug.Print "################################"
        Debug.Print "Error handling of WriteByteArray"
        Debug.Print "################################"
        FileWriteBinary = False
        Close iFileNum
        Debug.Print Err.Description & "(" & Err.Number & ")"
    End Function

VBA.Kill and Open でアクセス許可が拒否されました。

4

1 に答える 1

3

関数が戻ったときにファイルを閉じるのを忘れています。現在、エラーが発生した場合にのみ閉じています。

ファイル ハンドルはコードの実行間で保持されるため、コードを再実行すると、既に開いていて明示的にロックされているファイルを操作しようとすると、エラーが発生します。

于 2013-06-10T11:22:41.960 に答える