好的,这是我的代码,我很确定错误来自于某些东西被命名的傻事。我刚刚开始学习VBA,所以完全没有这个,并且无法发现什么是错的。任何意见都将不胜感激。
Sub test()
Dim wsInput As Worksheet: Set wsInput = ActiveSheet
Dim wsOutput As Worksheet: Set wsOutput = Workbooks.Open("C:\output.xls").Sheets(1)
Dim OutputRowCount As Integer: OutputRowCount = 1
For i = 1 To 10000
If wsInput.Range("a12" & i) <> "" Then
wsInput.Range("D12" & i, "E12" & i).Copy
wsOutput.Range("A4" & OutputRowCount).PasteSpecial Paste:=xlPasteValues
End If
Next
End Sub
答案 0 :(得分:3)
您的代码中存在多个错误/问题:
你的陈述wsInput.Range("a12" & i)
肯定不是你想要的 - 它会返回单元格A121,A122,...,A1210000!相反,请尝试wsInput.Range("A" & (12+i))
或wsInput.Range("A12").Offset(i-1)
。与其他范围相同的问题。
在wsInput.Range("D12" & i, "E12" & i).Copy
你实际上复制了两个单元格(D12:E12,在修复#1之后) - 不确定你想要这个。如果您需要此功能,也可以使用Resize
方法:wsInput.Range(D12).Offset(i-1).Resize(,2)
您不会增加OutputRowCount,因此每个单元格都会粘贴到A4(从#1修复后,否则返回到A41)!添加一行OutputRowCount=OutputRowCount+1
。
您可以简单地指定.Value
:wsOutputRange(“A”&amp; 4 + OutputRowCount).Resize(,2).Value = Input.Range(D12),而不是复制和粘贴。偏移量(I-1).Resize(2).Value`
最后但并非最不重要的是,请考虑使用.SpecialCells
和Intersect
,而不是循环遍历每个单元格,即您可以使用
Application.Union( _
wsInput.Range("A4").Resize(10000).SpecialCells(xlCellTypeFormulas),
wsInput.Range("A4").Resize(10000).SpecialCells(xlCellTypeValues)) _
.Offset(,3).Resize(,2).Copy
wsOutput.Range("A4").PasteSpecial(xlPasteValues)
希望有所帮助!
答案 1 :(得分:1)
您在Excel 32位中可以拥有的最大行数是1048576,但是您在此处尝试访问的最后一行是1210000.以下代码可以工作(我所做的全部更改为10000到9999),但是彼得说,这可能不是你真正想做的事,除非你有一些奇怪的商业原因或其他原因:
Sub test()
Dim wsInput As Worksheet: Set wsInput = ActiveSheet
Dim wsOutput As Worksheet: Set wsOutput = Workbooks.Open("C:\output.xls").Sheets(1)
Dim OutputRowCount As Integer: OutputRowCount = 1
For i = 1 To 9999
If wsInput.Range("a12" & i) <> "" Then
wsInput.Range("D12" & i, "E12" & i).Copy
wsOutput.Range("A4" & OutputRowCount).PasteSpecial Paste:=xlPasteValues
End If
Next
End Sub
答案 2 :(得分:0)
错误:对象'_Worksheet'的方法'粘贴'失败 - 1004
解决方案:在将形状从一个工作表复制到另一个工作表之前,需要记住Excel中的问题。 1.激活工作表(从您复制的位置)。 2.从工作表中选择形状。 3.从工作表中复制形状。 4.粘贴到目标表单的形状
示例:以前我的代码如下所示:
Sheet1.Shapes(0).Copy
Targetsheet.Paste
我修改了以下内容:
Sheet1.Activite
Sheet1.Shapes(0).Select
Sheet1.Shapes(0).Copy
Targetsheet.Paste
现在工作正常。