VBA:为啥打开随机语句失败?
Posted
技术标签:
【中文标题】VBA:为啥打开随机语句失败?【英文标题】:VBA: Why Open For Random statement fails?VBA:为什么打开随机语句失败? 【发布时间】:2021-12-10 09:42:39 【问题描述】:我有一个简单的函数,可以随机访问一个文件并在指定位置读取 4 个字节。
我用来选择记录的代码是:
Open "C:\MyFile.bin" For Random Access Read As #file_nr Len = 4
rec_position = 23 '(this is an example)
Get #file_nr, rec_position, buff
Close #file_nr
变量“buff”的声明方式如下:
Dim buff(0 To 3) As Byte 'fixed size array declaration
and it works fine.
但是...如果我想概括的不是固定的 4 字节记录长度,而是“rec_len”字节的记录长度,我以这种方式声明“buff”变量:
Dim rec_len As Long 'length of the record, in bytes
Dim buff() As Byte 'dynamic declaration of array to store one record
...(omissis)...
ReDim buff(0 To rec_len - 1)
现在程序坚持“get”指令并给我这个错误: 运行时错误 7“内存不足”。
但是我有足够的可用内存,代码很短,我使用了一个很小的 rec_len (rec_len=4),我重新启动了我的电脑,只留下了必要的东西,但错误仍然存在!
为什么当我尝试动态定义变量“buff”时会失败,但是当它被定义为固定大小时(即 Dim buff(0 to 3) as Byte)它工作得很好?
【问题讨论】:
您的...(omissis)...
代码是否将Long
值赋予rec_len
变量?我的意思是,在ReDim
代码行之前...
您真的要读取记录还是只读取字节块?
致 FaneDuru:是的,我的 ...(omissis)... 代码确实为 rec_len 变量提供了 Long 值,它有什么问题吗?否则我不能给它一个价值。
To Fun Thomas:我错过了不同之处,我需要读取 hte 二进制文件的 rec_len 连续字节,对于我的应用程序而言,它构成了一条记录、字节块或您给它的任何名称。当然,读取的第一个字节必须是 rec_len 的倍数。
【参考方案1】:
下面的代码是否解释了Redim
的使用方式?它是否也返回错误?
Sub testReadBynReDimArray()
Dim rec_position As Long, buff() As Byte, rec_len As Long
rec_len = 5 'choose here what value you need. Even if it will be grater than the whole string, the array will be loaded with 0 bytes for the exceeding elements
ReDim buff(0 To rec_len)
rec_position = 23 '(this is an example)
Open "C:\MyFile.bin" For Binary Access Read As #1
Get #1, rec_position, buff
Close #1
Debug.Print buff(0), buff(1), buff(2), buff(3), buff(4)
End Sub
【讨论】:
以上是关于VBA:为啥打开随机语句失败?的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS opsworks 部署应用程序。为啥随机部署失败?