合并两个工作表执行错误

时间:2018-04-27 14:49:50

标签: excel vba excel-vba

我使用以下代码合并两个工作表(Sheet 5Sheet 3)。更准确地说,只要在处理代码时打开Sheet 5,我就会将数据从Sheet 3添加到Sheet 3。但是,当我切换到另一个工作表并运行代码时,代码不再正常工作。

  1. 当我第一次运行代码时,它可以顺利运行
  2. 当我反复运行代码时,不会发生任何事情,因为我的宏只会在Sheet 5中插入Sheet 3中已经不在Sheet 3的数据,因为此数据已经存在在第一次运行中插入没有任何应该发生。当我留在Sheet 3时就是这种情况。但是,如果我切换到另一张表并在第二次,第三次,第四次运行代码,则每次都会部分执行宏。
  3. 让我进一步解释一下:

    对于我的测试,我使用三行数据。当我第一次执行按钮时,Sheet 5中的所有三行都会添加到Sheet 3。当我按下按钮时,第二,第三,第四次将三行添加到Sheet 3

    • 首先添加的行:为空

    • 第二&第三个添加的行:包含Sheet 3

    • 中第二行和第三行的数据

    有谁知道这里出了什么问题?

        Sub Consolidation()
    
        Dim lastrow As Long
        Dim NFR As Long
    
    
        lastrow = Tabelle5.Range("A" & Rows.Count).End(xlUp).Row
        NFR = Tabelle3.Range("A" & Rows.Count).End(xlUp).Offset(-3).Row
        Set myrange = Tabelle5.UsedRange
    
    
        For i = 4 To lastrow
    
        On Error Resume Next
    
        If Tabelle3.Cells(5 + i, 1) <> "" And Not IsError(Application.Match(Tabelle3.Cells(5 + i, 1), Tabelle5.Range("A:A"), False)) Then
    
    
            Tabelle3.Cells(5 + i, 2) = Application.WorksheetFunction.VLookup(Tabelle3.Cells(5 + i, 1), myrange, 2, False)
    
        End If
    
    
        If IsError(Application.Match(Tabelle5.Cells(i, 1), Tabelle3.Range("A9:A" & Range("A1048576").End(xlUp).Offset(8).Row), False)) Then
    
    
            Tabelle3.Cells(NFR + i, 1) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 1, False)
    
    
            Tabelle3.Cells(NFR + i, 2) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 2, False)
    
    
          End If
    
        Next i
    
        Set Rng = Tabelle3.Range("A9:A" & Range("A1048576").End(xlUp).Offset(8).Row)
        On Error Resume Next
        Rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    
    
    
        End Sub
    

1 个答案:

答案 0 :(得分:0)

像这样(未经测试):

Sub Consolidation()

    Dim lastrow As Long
    Dim NFR As Long, r, v

    lastrow = Tabelle5.Range("A" & Rows.Count).End(xlUp).Row
    NFR = Tabelle3.Range("A" & Rows.Count).End(xlUp).Offset(-3).Row
    Set myrange = Tabelle5.UsedRange


    For i = 4 To lastrow

        v = Tabelle3.Cells(5 + i, 1)
        If v <> "" And Not IsError(Application.Match(v, Tabelle5.Range("A:A"), False)) Then

            r = Application.VLookup(v, myrange, 2, False)
            Tabelle3.Cells(5 + i, 2) = IIf(IsError(r), "No match", r)

        End If

        v = Tabelle5.Cells(i, 1)
        If IsError(Application.Match(v, Tabelle3.Range("A9:A" & _
               Tabelle3.Range("A1048576").End(xlUp).Offset(8).Row), False)) Then

            r = Application.VLookup(v, myrange, 1, False)
            Tabelle3.Cells(NFR + i, 1) = IIf(IsError(r), "No match", r)

            r = Application.VLookup(v, myrange, 2, False)
            Tabelle3.Cells(NFR + i, 2) = IIf(IsError(r), "No match", r)
        End If

    Next i

    Set Rng = Tabelle3.Range("A9:A" & Range("A1048576").End(xlUp).Offset(8).Row)

    On Error Resume Next
    Rng.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

End Sub