1

所以,我已经探索了一些已回答的 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”失败。我究竟做错了什么?

4

2 回答 2

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")

于 2013-08-14T15:12:06.140 回答
0

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

ThisWorkbook.Sheets("Top_Bottom")

代替

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

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

于 2013-08-14T13:20:04.643 回答