【发布时间】:2019-07-02 18:46:56
【问题描述】:
所以我有一个很大的 vba 字符串,我试图将其作为二进制文件写入文件。我有一个非常漂亮的功能。我有一个很长的字符串,可以说大约 80k。该字符串正确地从文件中读取,正确地传递函数,正确地打印到屏幕上。但无论我做什么,以任何形式或形式,我都可以在文件中获得超过 39k 的内容。我已将字符串拆分为较小的位,认为这是 VBA 限制。然后一次将它传递给我的函数 42 个字符。 Seek(LOF) +1 put 是我在打开 bin 之后所做的,但是......我怎么称呼它似乎并不重要。二进制,ASCI,一次写完。我只得到最后的39k。这是我用来写入文件的函数。据我所知,这是一个内存限制而不是语法错误,并且可能与我的代码形式几乎没有关系,就像我似乎没有得到的东西一样。
sub IBorrowedThis(hex_val as string)
dim output() as string
dim handle as long
output = Split(hex_val, "|")
handle = FreeFile
open "fp" for binary as #handle
For i = LBound(output) to Unbound(output)
seek #handle,LOF(handle) + 1
put #handle, , cbyte("&H" & output(i))
next i
close #handle
end sub
所以我已经对这一切进行了测试,一切正常。附加到包含的末尾。只是不适用于大文件。
【问题讨论】:
-
Dim i as Long,否则为 Variant 和 Integer。写Ubound而不是Unbound。 -
我无法使用提供的代码复制它。将
i更改为Long,修复了UBound中的错字,在单个String中生成了价值100KB 的管道分隔字节,然后将其传递给您? “IBorrowedThis”程序。这创建了一个预期大小的新文件,当再次运行时,附加没有问题。我怀疑问题出在调用代码中。 -
@Comintern 你删除了他的无礼规则,但我记得其中一条“欢迎举例,不欢迎意见。”。由于他已经“对这一切进行了分段测试”,因此他可能会在其他地方获得更好的帮助。
-
@Asger 我上面的评论不是意见。这是事实。 ;-)
-
使用
Option explicit并编译!