将变量数组转储到范围-VBA excel错误1004

将变量数组转储到范围-VBA excel错误1004,vba,excel,excel-2003,excel-2010,Vba,Excel,Excel 2003,Excel 2010,我使用for Excel通过以下方式将数据保存到数组中: Dim allPosts As Variant allPosts = Range("A2:J5000") 之后,我将更改allPosts数组中的数据,然后通过以下方式将其粘贴回: Range("A2:J5000").Value = allPosts 我得到了一个错误: 运行时错误1004应用程序定义或对象定义 当我将该单元格中的字符串更改为更短时,复制将在特定单元格停止,问题就解决了 谢谢您可以使用第二个数组来存储过长的单元格长度,并

我使用for Excel通过以下方式将数据保存到数组中:

Dim allPosts As Variant
allPosts = Range("A2:J5000")
之后,我将更改
allPosts
数组中的数据,然后通过以下方式将其粘贴回:

Range("A2:J5000").Value = allPosts
我得到了一个错误:

运行时错误1004应用程序定义或对象定义

当我将该单元格中的字符串更改为更短时,复制将在特定单元格停止,问题就解决了


谢谢

您可以使用第二个数组来存储过长的单元格长度,并单独迭代这些长度

From无法处理回写长度超过911个字符的数组字符串(在我的测试中工作正常)

代码如下:

  • 设置读取范围内的主要变量数组
  • 设置与第一个数组大小相同的第二个空白变量
  • 测试数组的每个部分的单元格长度是否超过911个字符,然后
    • 操纵第一个数组中较短的值,或
    • 从第一个数组中删除该值,然后将其写入第二个数组
  • 第一个阵列将在一次射击中转储回靶场
  • 第二个数组逐单元迭代以转储其他字符串
  • 代码

        Sub KudosRickyPonting()
        Dim allPosts As Variant
        Dim allPosts2 As Variant
        Dim vStrs As Variant
        Dim lngRow As Long
        Dim lngCol As Long
        allPosts = Range("A2:J5000").Value2
        ReDim allPosts2(1 To UBound(allPosts, 1), 1 To UBound(allPosts, 2))
    
        For lngRow = 1 To UBound(allPosts, 1)
            For lngCol = 1 To UBound(allPosts, 2)
                If Len(allPosts(lngRow, lngCol)) < 912 Then
                    allPosts(lngRow, lngCol) = "Updated:" & allPosts(lngRow, lngCol)
                Else
                    allPosts2(lngRow, lngCol) = "NEW PART " & allPosts(lngRow, lngCol)
                    'erase long value from first array
                    allPosts(lngRow, lngCol) = vbNullString
                End If
            Next
        Next
        Range("A2:J5000").Value = allPosts
    
        For lngRow = 1 To UBound(allPosts2, 1)
            For lngCol = 1 To UBound(allPosts2, 2)
                If Len(allPosts2(lngRow, lngCol)) > 0 Then Range("A2").Offset(lngRow - 1, lngCol - 1).Value2 = allPosts2(lngRow, lngCol)
            Next
        Next
        End Sub
    
    Sub-kudostrickyponting()
    将所有帖子作为变体
    Dim allPosts2作为变体
    作为变体的Dim VSTR
    长得一样长
    变暗lngCol为长
    allPosts=范围(“A2:J5000”)。值2
    重拨所有POSTS2(1至UBound(所有POSTS,1),1至UBound(所有POSTS,2))
    对于LNROW=1到UBound(所有支柱,1)
    对于lngCol=1至UBound(所有立柱,2)
    如果Len(allPosts(lngRow,lngCol))<912,则
    所有帖子(lngRow,lngCol)=“更新:&所有帖子(lngRow,lngCol)
    其他的
    allPosts2(lngRow,lngCol)=“新零件”和allPosts(lngRow,lngCol)
    '从第一个数组中删除长值
    allPosts(lngRow,lngCol)=vbNullString
    如果结束
    下一个
    下一个
    范围(“A2:J5000”)。值=所有立柱
    对于LNROW=1到UBound(所有POSTS2,1)
    对于lngCol=1至UBound(所有POSTS2,2)
    如果Len(allPosts2(lngRow,lngCol))>0,则范围(“A2”).偏移量(lngRow-1,lngCol-1)。值2=allPosts2(lngRow,lngCol)
    下一个
    下一个
    端接头
    
    提交您所拥有的一切。我不知道其他的,但我手头没有水晶球。我在allPosts数组上执行的更改很复杂,因此内置的宏录制器没有很好的帮助,请使用录制器查看粘贴功能的工作原理;根据您的需要调整粘贴功能,只有当它到达非常长的字符串单元格时才会崩溃。谢谢您是否尝试过在数组上循环并将其粘贴到目标单元格,一次粘贴一个<代码>http://msdn.microsoft.com/en-us/library/office/aa221353(v=office.11).aspx谢谢!!!有没有办法将长度超过911的字符串切碎?通过这种方式,我将在所有帖子上正常运行,当一个长字符串出现时,我将把它切掉,最后我将按:Range(“A2:J5000”)。Value=allPostsAgree和Doug。。。非常好:)为Kudosrichyponting准备的