1

私はexcelvbaを使用してバイナリファイルを読み取り、バイトをバイト配列に取得しています。ただし、13行目で添え字が範囲外の例外を取得しています

Sub GetBinaryData()
Dim aryBytes() As Byte
Dim bytInput As Byte
Dim intFileNumber
Dim intFilePos

intFileNumber = FreeFile

Open "Binary.bin" For Binary As #intFileNumber
intFilePos = 1
While Not EOF(intFileNumber)
Get #intFileNumber, intFilePos, bytInput
aryBytes(intFilePos) = bytInput
ReDim aryBytes(UBound(aryBytes) + 1)
intFilePos = intFilePos + 1
Wend
Close #intFileNumber

End Sub
4

1 に答える 1

1

ループの最初のトリップで、存在しないaryBytes(intFilePos)要素1にアクセスしようとするため失敗します(動的であると宣言され、先行するものはありません)aryBytesReDim

また、EOFはバイナリアクセスで期待したとおりに動作しません。代わりにLOFを試してください

これをバイトごとに行う方法があります。

Open "Binary.bin" For Binary Access Read As #intFileNumber
  '//only need to dimension once
  ReDim aryBytes(LOF(intFileNumber) - 1)
  '//easier to count from zero
  intFilePos = 0
  While intFilePos < LOF(intFileNumber) '//limit to Length-Of-File
    Get #intFileNumber, intFilePos + 1, bytInput
      aryBytes(intFilePos) = bytInput
      intFilePos = intFilePos + 1
    Wend
Close #intFileNumber

1回の読み取りでそれを行うこともできます。

Open "Binary.bin" For Binary Access Read As #intFileNumber
  ReDim aryBytes(LOF(intFileNumber) - 1)
  Get #intFileNumber, , aryBytes
Close #intFileNumber
于 2013-02-06T12:05:53.387 に答える