vba - 以编程方式(VBA,C#)将数组字符串设置为范围时,奇怪的单元格中字符数限制

标签 vba excel excel-2007 excel-addins

我在 Excel 2007 中遇到了一个问题,它与 Microsoft 支持 here 描述的 Excel 2003 的已知问题非常相似。 (“当您以编程方式将大型数组字符串设置为 Excel 2003 中的范围时,您可能会收到“运行时错误 1004”错误消息”)。如果运行以下宏,问题会重现:

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。

附加信息:
  • 该问题不会在 Excel 2010 中重现。
  • 如果在不使用数组的情况下逐个单元格地设置值,则问题不会重现。但就我而言,它会大大减慢我的代码。
  • 最初,我在通过使用 NetOffice 库用 C# 编写的 Excel 插件使用 Excel 时注意到了这个问题。

  • 有没有人遇到过这个问题?有什么解决方法吗?微软对此案有何评论?
    我什么也没找到。

    最佳答案

    微软似乎也写了一篇关于此的知识库文章:MS KB 832136 .

    来自文章:

    原因:
    当下列条件之一为真时,可能会出现此问题:

  • 在 Excel 2007 中,VBA 数组的长度超过 8,203 个字符。

  • 解决方法:

    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
    

    关于vba - 以编程方式(VBA,C#)将数组字符串设置为范围时,奇怪的单元格中字符数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661564/

    相关文章:

    sql - 似乎无法摆脱讨厌的语法错误

    c# - 从两个列表中生成一个列表

    Excel 2007 - 公式更改为 #REF

    Excel countif 单元格中的日期大于或等于另一个单元格中的日期

    excel - 为什么不使用自定义函数获取名称的字段重新计算?

    excel - VBA Office 2007 创建 2003 Excel 工作表

    ios - 在 iOS 上的 Excel 应用程序中打开链接的 XLSM 文件

    excel - 如何获取日期范围之间的天数

    VBA 如果找不到文件

    excel - 在 VBA 类模块中,私有(private)实例变量可以显式限定为同一类中的公共(public)枚举吗?