首页 > 解决方案 > 每次迭代增加范围

问题描述

我正在为我的工作自动化 Excel 工作表,但我遇到了一个问题。

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

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

我试图将范围更改为一个单元格(i,2),但它只复制 B3 而不是其余的(A3:D3)。

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

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, 2).Value = 0 Then

        Else
        wsCopy.range(Cell(i,2), Cell(i,4)).Copy
        'wsCopy.Cells(i, 2). Copy ##this copies just one cell

        iDestLastRow = wsDest.Cells(wsDest.Rows.Count, "B").End(xlUp).Offset(1).Row
        wsDest.range("A" & iDestLastRow).PasteSpecial xlPasteValues
        End If

    Next i

Error messages:

运行时错误“1004”:

对象“_Worksheet”的方法“范围”失败

和调试亮点wsCopy.range(Cell(i,2), Cell(i,4)).Copy,else之后的语句

标签: excelvba

解决方案


尝试使用此代码:

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

只需确保iCopyLastRow并且iDestLastRow是您期望的值。

我希望这有帮助。


推荐阅读