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