我在Excel 2007中遇到了一个问题,这与Microsoft支持here("You may receive a "运行时错误1004 " error message when you programmatically set a large array string to a range in Excel 2003")描述的Excel 2003的已知问题非常相似 . 如果运行以下宏,问题将重现:
Sub newMacro()
Dim longStr As String
longStr = String(8204, "a")
Dim values(3)
For i = 0 To 2
values(i) = longStr
Next i
Range("A1:C1").Value = values
End Sub
在将数组值分配给范围时,Excel会给出“运行时错误'1004'”错误消息 . 但是当字符串长度为8203个字符时,一切正常 .
这种情况对我来说确实很奇怪,因为Ecxel 2007(在"Excel specifications and limits" here中提到)的"Total number of characters that a cell can contain"限制是32767 .
附加信息:
-
问题无法在Excel 2010中重现 .
-
如果在不使用数组的情况下逐个单元设置值,则问题不会重现 . 但就我而言,它会大大减慢我的代码速度 .
-
最初我通过使用NetOffice库用C#编写的Excel加载项使用Excel时发现了问题 .
有人遇到过这个问题吗?它有什么变通方法吗?微软对此案有何评论?我没找到任何东西 .
2 回答
相同的限制适用于Excel 2010和Excel 2013.在Excel 2016中几乎没有限制,但只存储了前32767个字符而没有产生任何错误,其余的被丢弃 . 声明为String的数组就是这种情况 . 将数组声明为Variant时,限制下降到8192,即实际的“公式大小限制” .
似乎微软也写了一篇关于此的知识库文章:MS KB 832136 .
来自文章:
Cause: 满足下列条件之一时,可能会发生此问题:
Workaround:
Microsoft建议您不要一次将整个数组放入工作表中,而应该从数组中一次填充一个工作表 . 他们在文章中提供了以下示例代码,作为如何执行此操作的建议: