1

好的,这是我的代码,我很确定错误来自一些愚蠢的东西命名方式。我刚开始学习 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
4

3 回答 3

3

您的代码中有多个错误/问题:

  1. 您的声明wsInput.Range("a12" & i)肯定不是您想要的 - 它会返回单元格 A121、A122、...、A1210000!相反,请尝试wsInput.Range("A" & (12+i))wsInput.Range("A12").Offset(i-1)。其他范围也有同样的问题。

  2. wsInput.Range("D12" & i, "E12" & i).Copy你实际上复制两个单元格(D12:E12,在修复#1之后) - 不确定你想要这个。如果你想要这个,你也可以使用以下Resize方法:wsInput.Range(D12).Offset(i-1).Resize(,2)

  3. 您不增加 OutputRowCount,因此每个单元格都将粘贴到 A4(从 #1 修复后,否则到 A41)!添加一行OutputRowCount=OutputRowCount+1

  4. 而不是复制和粘贴,您可以简单地分配.Value: wsOutputRange("A"& 4 + OutputRowCount).Resize(,2).Value = Input.Range(D12).Offset(i-1).Resize(,2) .值`

最后但并非最不重要的一点是,不要循环遍历每个单元格,而是考虑使用.SpecialCellsand Intersect,即您可以使用整个 For 循环

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)

希望有帮助!

于 2013-06-04T21:14:36.800 回答
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
于 2013-06-04T21:14:08.480 回答
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

现在它工作正常。

于 2013-09-11T06:30:31.563 回答