内存分配奇怪,带有某些特殊符号

时间:2017-06-16 02:32:39

标签: excel vba excel-vba memory-management

在Excel中创建VBA程序的过程中,我遇到了一个似乎没有记录在任何地方的限制(我到目前为止已经发现)。

单元格内容限制记录为0-32767个字符,但对于字符" @"," - "," +"和" ="我不能写一个VBA脚本来将这些字符添加到超过8192个字符的单元格中,这奇怪地足够了32768的1/4。

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

Function Insert()

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

End Function

该程序连接" @"到单元格(包括)8192然后停止运行错误7 Out of Memory"错误。它似乎不是一个单元格限制,因为我可以在程序停止后手动输入更多符号到单元格。

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

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

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

是否有任何人对可能发生这种情况的原因有任何见解,以及潜在的解决方法?

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

1 个答案:

答案 0 :(得分:0)

这四个字符作为公式的开头有效,但Excel specifications and limits表示:

  

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

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

解决方法是使用Range("J13") = "'" & String(8193, "@")强制将单元格视为文本,其中只包含8193个"@"个字符。

注意:我正试图弄清楚为什么 @符号可用于启动公式(并且在进入后只需更改为=它)。我知道我已经看到它被用于某个地方,所以我用谷歌搜索它并找到一个页面提醒我,这就是我们在Lotus123中开始使用公式的方式。因此它已被合并到Excel中,以允许前Lotus123用户继续以他们通常的方式工作。 (这与/调出菜单的原因相同。)