我在Excel 2007中遇到了一个问题,它与Microsoft支持here描述的Excel 2003的已知问题非常相似(“当您以编程方式时,可能会收到”运行时错误1004“错误消息将大型数组字符串设置为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规范和限制”here中提到)是32767。
其他信息:
有没有人遇到过这个问题?它有什么变通方法吗?微软对此案有何评论? 我没找到任何东西。
答案 0 :(得分:3)
似乎微软也写了一篇关于此的知识库文章:MS KB 832136。
来自文章:
<强>原因:强> 当满足下列条件之一为真时,可能会发生此问题:
解决方法:强>
Microsoft建议您不要一次将整个数组放入工作表中,而应该从数组中一次填充一个工作表。他们在文章中提供了以下示例代码,作为如何执行此操作的建议:
Sub PopulateRangeWithArray()
Dim x
ReDim x(1 To 2, 1 To 2)
x(1, 1) = String(2000, "a"): x(1, 2) = String(5000, "b")
x(2, 1) = String(17000, "c"): x(2, 2) = String(33000, "d")
MsgBox Len(x(1, 1)) & "," & Len(x(1, 2)) _
& "," & Len(x(2, 1)) & "," & Len(x(2, 2))
Range("a1").Value = x(1, 1)
Range("b1").Value = x(1, 2)
Range("a2").Value = x(2, 1)
Range("b2").Value = x(2, 2)
End Sub
答案 1 :(得分:1)
相同的限制适用于Excel 2010和Excel 2013.在Excel 2016中几乎没有限制,但只存储了前32767个字符而没有产生任何错误,其余的被丢弃。声明为String的数组就是这种情况。当将数组声明为Variant时,限制下降到8192,实际&#34;公式大小限制&#34;。