Excel VBA将数据从一个工作表中的表移动到另一工作表中的表

时间:2018-09-17 19:16:39

标签: excel excel-vba

我有一个带有两个选项卡的Excel工作簿。第一个标签标题为“ StagingArea”(工作表上的表名称为_StagingArea),其中包含按模块分组的数据。我想做的是将数据从“ StagingArea”工作表(_StagingArea)中的表动态移动到“ Module1”工作表(_Module1)中的表。因此,如果在“ StagingArea”中为模块“ Module1”添加了新行,则需要将该行移至“ Module1”表。到目前为止,我有以下代码:

Private Sub Workbook_Open()
Dim i, LastRow

LastRow = Sheets("Staging Area").Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow
If Sheets("Staging Area").Cells(i, "A").Value = "Module1" Then
Sheets("Staging Area").Cells(i, "A").EntireRow.Copy Destination:=Sheets("Module1").Range("_Module1").End(xlUp).Offset(1)
End If
Next i
End Sub

我遇到的问题是它正在遍历“ Module1”的行,但仅将最后一行插入到“ Module1”表中的表中。

然后,我还需要删除“ StagingArea”表中已复制/移动到“ Module1”表中的行。感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:1)

移动操作通过“复制”然后“删除”来实现。 VBA中没有内置的移动功能来实现此目的。因此,我对您的代码做了一些修改。希望有帮助。

Private Sub Workbook_Open()
    Dim i as Long, LastRow as Long
    Dim rng as Range

    LastRow = Sheets("Staging Area").Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To LastRow
        If Sheets("Staging Area").Cells(i, "A").Value = "Module1" Then
            Sheets("Staging Area").Cells(i, "A").EntireRow.Copy Destination:=Sheets("Module1").Range("_Module1").End(xlDown).Offset(1, 0)
            If rng Is Nothing Then
                Set rng = Sheets("Staging Area").Cells(i, "A")
            Else
                Set rng = Union(rng, Sheets("Staging Area").Cells(i, "A"))
            End If
        End If
    Next i
    If Not rng Is Nothing Then
        rng.EntireRow.Delete
    End If
End Sub