从一个单元格复制超过8202个字符时出错

时间:2014-11-23 04:37:08

标签: excel excel-vba vba

问题 - 我在一次单元格中有超过8202个字符说Range(" A1")。

现在我想使用VBA将单元格(A1)的内容复制到单元格(A2)。我使用下面的代码

Sheets("XYZ").Range("A2") = Sheets("XYZ").Range("A1")

执行守则后。它给出了#34;应用程序定义或对象定义的错误!!"

请帮助/协助您的专家评论。

观察 - 如果我缩短" A1"单元格到8202或更少然后代码工作!

我很困惑。请帮助。

4 个答案:

答案 0 :(得分:5)

将您的代码更改为

Sheets("XYZ").Range("A2") = Sheets("XYZ").Range("A1").Value

它会起作用。

不确定为什么,因为.Value是范围的默认属性。

答案 1 :(得分:2)

我能够使用以下内容复制您的错误:

Sub Test8202Copy()
    Dim wks As Worksheet
    Set wks = Worksheets("Sheet1")
    Dim x As String

    For i = 0 To 8202
        x = x + "a"
    Next i

    wks.Range("A1").Value = x
    wks.Range("A2") = wks.Range("A1")
End Sub

我能够通过在副本中添加.value来解决错误。

Sub Test8202Copy()
    Dim wks As Worksheet
    Set wks = Worksheets("Sheet1")
    Dim x As String

    For i = 0 To 8202
        x = x + "a"
    Next i

    wks.Range("A1").Value = x
    wks.Range("A2").Value = wks.Range("A1").Value
End Sub

使用不使用.Value的中间变量似乎有效:

Dim y As Variant
y = wks.Range("A1")
wks.Range("A2") = y

到目前为止,我的猜测是8202超出了未定义.Value时使用的数据类型的字符数限制。单元格限制长度为32,767(MS Excel 2010),几乎是清除的8201值的4倍。

答案 2 :(得分:1)

@Chris Neilsen 为这个问题提供了最实用,最优雅的解决方案(他的代码片段如下):

Sheets("XYZ").Range("A2") = Sheets("XYZ").Range("A1").Value

为了调查和理解Range对象的这种奇怪行为(可能是一个bug)的可能原因,我发布了几条评论,总结如下:

原始表达式之间存在概念上的差异(见下文):

Sheets("XYZ").Range("A2") = Sheets("XYZ").Range("A1")

和@ Chris Neilsen 提出的解决方案,即:原始表达式隐式地将Range对象var(本质上是指针)分配给另一个Range对象,如下面的代码片段中所示,具有显式赋值:

Set rng = Sheets("XYZ").Range("A1")
Sheets("XYZ").Range("A2") = rng

虽然建议的解决方案显式传递value属性。仍然,为string.Length> 8202的值分配Range对象失败的原因目前尚不清楚(可能是由Excel Range对象实现的一些内部细微差别引起的)。

非常感谢发布这个有趣的问题和富有成效的讨论。 的问候,

答案 3 :(得分:1)

这个限制(见下文re )包含在MSDN article中,但有趣的是它意味着vba数组已被隐藏

单独按https://stackoverflow.com/a/13665363/641067 处理超过911个字符的数组字符串,而下面的文章引用1823字符

<强>症状

  

当您运行Microsoft Visual Basic for Applications(VBA)宏以将数据从包含数据字符串的VBA数组传输到Microsoft Excel工作表中的一系列单元格时,数据可能会被截断(截断)。 / p>

注意:在Microsoft Office Excel 2003和更高版本的Excel中,在Visual Basic编辑器中运行VBA宏时,可能会收到以下错误消息: Run-time error '1004'

<强>原因

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

  • 在Excel 2007中,VBA数组的长度长度超过8,203个字符
  • 在Excel 2003和早期版本的Excel中,VBA数组的长度超过1,823个字符