2017-06-16 84 views
0

在Excel中创建VBA程序的过程中,我遇到了一个似乎没有记录在任何地方(迄今为止我已经找到)的限制。使用某些特殊符号的内存分配奇怪

单元格内容限制记录在0-32767个字符,但对于字符“@”,“ - ”,“+”和“=”我无法编写VBA脚本来将这些字符添加到8192以外的单元格字符,这是足够奇怪的四分之一32768.

在调试过程中,我创建了一个单独的脚本,以尝试此操作,以避免我的程序提出有关内存分配的任何其他问题。

Function Insert() 

    For i = 1 To 8199 
     Range("J13") = Range("J13") & "@" 
    Next 

End Function 

程序符连接“@”至细胞达(且包括)8192,然后用停止“运行时错误7内存不足”错误。它似乎不是一个单元格的限制,因为一旦程序停止,我可以手动输入更多符号给单元格。

我也尝试手动输入约1000个符号之前,我启动程序,但它仍然在暂停8192

使用一个全尺寸标准的美国格式键盘的任何特殊字符标准时,不会出现此问题(除了我列出的4个之外)。

我认为这可能是由于字符编码和这些字符对应的内存要求,但我找不到任何信息,表明这四个符号的内存要求与我键盘上的任何其他标准符号不同。

有没有人有任何洞察,为什么这可能会发生,并有潜在的解决方法?

是的,奇怪的是我有时需要一个单元格填充超过8192个这些类型的字符。

回答

0

这四个字符作为一个公式的开始有效,但Excel specifications and limits状态:

的公式内容的长度 - 8,192个字符

所以Range("J13") = String(8193, "@")会失败(因为它被解释为一个公式),但Range("J13") = "x" & String(8193, "@")将工作(因为它不会被解释为公式)。


一种解决方法是使用Range("J13") = "'" & String(8193, "@")这将迫使细胞将被视为文本,与它只是8193 "@"字符。


注:我抓我的头试图找出为什么@符号可以用来启动一个公式(和刚刚被进入之后更改为=)。我知道我已经看到它在某个地方被使用,所以我搜索了它并发现了一个让我想起那是我们如何在Lotus123中开始一个公式的页面。所以它已经被合并到Excel中,以允许ex-Lotus123用户继续以通常的方式工作。 (这与为什么/调出菜单的原因相同。)