Excel 增加每次迭代的范围

Excel 增加每次迭代的范围,excel,vba,Excel,Vba,我正在为我的工作自动化Excel表格,我陷入了一个问题 我试图复制一个特定的范围(A3:D3)并将其粘贴到另一个工作簿的结束行。我尝试使用if语句来过滤单元格B3中数字为0的范围 请帮忙。我是一个完全的新手,我才刚刚开始。如果有很多问题,我很抱歉 我尝试将范围更改为单元格(I,2),但它只复制B3,而不复制其余的单元格(A3:D3) 编辑:忘记在单元格中添加 Edit2:我只需要复制四个单元格(A3:D3),并在下一次迭代中增加它,以便复制的单元格为(A4:D4) 运行时错误“1004”: 对象

我正在为我的工作自动化Excel表格,我陷入了一个问题

我试图复制一个特定的范围(A3:D3)并将其粘贴到另一个工作簿的结束行。我尝试使用if语句来过滤单元格B3中数字为0的范围

请帮忙。我是一个完全的新手,我才刚刚开始。如果有很多问题,我很抱歉

我尝试将范围更改为单元格(I,2),但它只复制B3,而不复制其余的单元格(A3:D3)

编辑:忘记在单元格中添加 Edit2:我只需要复制四个单元格(A3:D3),并在下一次迭代中增加它,以便复制的单元格为(A4:D4)

运行时错误“1004”:

对象“\u工作表”的方法“范围”失败

调试将突出显示wsCopy.range(单元格(i,2),单元格(i,4)).Copy,else之后的语句

尝试使用以下代码:

Sub CopyData()
    Dim wsCopy As Worksheet, wsDest As Worksheet
    Dim iCopyLastRow As Long, iDestLastRow As Long

    Set wsCopy = Workbooks("file1.xlsx").Worksheets("trend")
    Set wsDest = Workbooks("file2.xlsx").Worksheets("raw data")

    iCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row

    For i = 3 To iCopyLastRow
        If wsCopy.Cells(i, 1).Value <> 0 Then
            'A = 1, D = 4
            wsCopy.Range(wsCopy.Cells(i, 1), wsCopy.Cells(i, 4)).Copy

            iDestLastRow = wsDest.Cells(wsDest.Rows.Count, "B").End(xlUp).Offset(1).Row

            wsDest.Range("A" & iDestLastRow).PasteSpecial xlPasteValues
        End If
    Next i
End Sub
Sub-CopyData()
将wsCopy设置为工作表,将wsDest设置为工作表
暗淡的图像与长的图像相同,理想的图像与长的图像相同
设置wsCopy=工作簿(“file1.xlsx”)。工作表(“趋势”)
设置wsDest=工作簿(“file2.xlsx”)。工作表(“原始数据”)
iCopyLastRow=wsCopy.Cells(wsCopy.Rows.Count,“A”).End(xlUp).Row
对于i=3至iCopyLastRow
如果wsCopy.Cells(i,1).Value为0,则
“A=1,D=4
范围(wsCopy.Cells(i,1),wsCopy.Cells(i,4)).Copy
iDestLastRow=wsDest.Cells(wsDest.Rows.Count,“B”)。End(xlUp)。Offset(1)。行
wsDest.Range(“A”&iDestLastRow).paste特殊XLPaste值
如果结束
接下来我
端接头
只需确保
iCopyLastRow
iDestLastRow
是您期望的值


我希望这有帮助。

尝试下面的代码,它可以在循环中使用:

Sub CopyAndAppend()
    Dim destSheet As Worksheet, srcSheet As Worksheet, lastRow As Long
    Set destSheet = Worksheets("Sheet2")
    Set srcSheet = Worksheets("Sheet1")
    ' determine last row in Sheet2
    lastRow = destSheet.Cells(destSheet.Rows.Count, 1).End(xlUp).Row

    Dim i As Long
    i = 3
    ' copy range A3:D3 and paste it right after last row in Sheet2
    srcSheet.Range(srcSheet.Cells(i, 1), srcSheet.Cells(i, 4)).Copy destSheet.Cells(lastRow + 1, 1)
    ' increment row index
    i = i + 1
    ' do something else
End Sub

可能重复的更改:
wsCopy.range(单元格(i,2),单元格(i,4)).Copy
For:
wsCopy.range(wsCopy.Cells(i,2),wsCopy.Cells(i,4)).Copy
您在
单元格中遗漏了一个
s
,而且您甚至需要在那里对范围进行完全验证。嘿,达米安,谢谢!我忘了在我的帖子中添加s。使用正确的语法,我仍然会得到相同的错误。嗨,路易斯,谢谢你的回复!我忘了在我的帖子中添加s,但它仍然会给我同样的错误。是的,就是这样。谢谢谢谢你,迈克!我一会儿就试试这个。代码看起来更整洁!我会让你知道它是否有效。但我想弄明白为什么我的代码不起作用。也可能我只是需要离开这里。我一会儿就回来
Sub CopyAndAppend()
    Dim destSheet As Worksheet, srcSheet As Worksheet, lastRow As Long
    Set destSheet = Worksheets("Sheet2")
    Set srcSheet = Worksheets("Sheet1")
    ' determine last row in Sheet2
    lastRow = destSheet.Cells(destSheet.Rows.Count, 1).End(xlUp).Row

    Dim i As Long
    i = 3
    ' copy range A3:D3 and paste it right after last row in Sheet2
    srcSheet.Range(srcSheet.Cells(i, 1), srcSheet.Cells(i, 4)).Copy destSheet.Cells(lastRow + 1, 1)
    ' increment row index
    i = i + 1
    ' do something else
End Sub