VBA。比较两个单独工作表中列名称的值,将不匹配列复制到第三个工作表

时间:2013-08-14 07:17:05

标签: excel vba excel-vba

所以,我已经探讨了一些回答VBA的问题,但我仍然陷入困境。我有三张“By_Oppt_ID”,“Top_Bottom”和“Non_Top_Bottom”。前两个列有大量列,每个列都有一个唯一的名称。现在,By_Oppt_ID中有一些列不在“Top_Bottom”中。因此,我想将By_Oppt_ID中的每个列名称与“Top_Bottom”中的每个列名称进行比较,如果找不到列名,请将该列名称及其下的所有行复制到第三个工作表“Non_Top_Bottom”。 所以这就是我所拥有的:

Sub Copy_Rows_If()

    Dim Range_1 As Worksheet, Range_2 As Worksheet
    Dim c As Range



    Set Range_1 = Workbooks("Complete_Last_Six_Months_Q_Results.xlsx").Sheets("Top_Bottom")
    Set Range_2 = Workbooks("Complete_Last_Six_Months_Q_Results.xlsx").Sheets("By_Oppt_ID")

    Application.ScreenUpdating = False ' Stays on the same screen even if referencing different worksheets

    For Each c In Range_2.Range("A2:LX2")
            ' Checks for values not in Range_1
        If Application.WorksheetFunction.CountIf(Range_1.Range("A1:CR1"), c.Value) = 0 Then
            ' If not, copies rows to new worksheet
            ' LR = .Cells(Row.Count, c).End(xUp).Row
                c = ActiveCell
                Sheets("By_Oppt_ID").Range("Activecell", "ActiveCell.End(xlDown)").Copy Destination:=Workbooks("Complete_Last_Six_Months_Q_Results.xlsx").Sheets("Non_Top_Bottom").Range("A1:A6745")
            Set rgPaste = rgPaste.Offset(0, 1) 'Moves to the next col, but starts at the same row position

        End If
    Next c

End Sub

我已经编译了很多方法并且不断收到一系列错误:下标超出范围/方法“Global_Range”失败。我做错了什么?

2 个答案:

答案 0 :(得分:0)

如果您希望每次都在同一工作簿中使用此代码,请尝试使用

ThisWorkbook.Sheets("Top_Bottom")

而不是

Workbooks("Complete_Last_Six_Months_Q_Results.xlsx").Sheets("Top_Bottom")

通过您的代码复制它,看看是否能解决问题。

答案 1 :(得分:0)

c = Activecell你是什么意思?你的意思是说c.activate吗?

您可能还想将下一行更改为 Sheets("By_Oppt_ID").Range(Activecell, ActiveCell.End(xlDown)).Copy Workbooks("Complete_Last_Six_Months_Q_Results.xlsx").Sheets("Non_Top_Bottom").Range("A1")