所以,我已经探讨了一些回答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”失败。我做错了什么?
答案 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")