两栏多参数比较两大工作手册

我正在编写一个代码来比较两个不同工作簿中的两行,这两行可以位于列中的不同位置。 第一列通常在一个部分中分组(多个相同的值)。 这就是为什么在此代码中,我按第一列进行search,然后select另一个标识符列,并在两个工作簿表单匹配时一次性偏移一个

我试图激活我通过这个代码中的.Find函数find的单元格,但显然你不能这样做。 “范围类的主动方法失败”

我相信我在这段代码的正确轨道上,但是我确信仍然有问题,我试图用我有限的技能一次解决一个问题!

谢谢您的帮助 :)

Sub Compare2() Dim layer As String Dim Pno As String Dim firstAddress As String Dim i As Long Dim c As Range Option Explicit For i = 5 To 1000 Step 1 layer = Sheets("MP Parameters").Range("A" & i).Value Pno = Sheets("MP Parameters").Range("H" & i).Value With Sheets("Compare").Range("a1:a1500") Set c = .Find(layer, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address c.Activate Do Sheets("Compare").ActiveCell.Offset(rowOffset:=0, columnOffset:=7).Activate If Sheets("Compare").ActiveCell = Pno Then Sheets("Compare").ActiveCell.Offset(rowOffset:=0, columnOffset:=9).Activate If Sheets("Compare").ActiveCell.Value <> Sheets("MP Parameters").Range("P" & i).Value Then Sheets("MP Parameters").Range("P" & i).Interior.ColorIndex = 46 End If End If Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress i = i + 1 End If End With Next i End Sub 

您只能Activate一个单元格,如果它在ActiveSheet 。 由于您的代码引用然后Activates不同的工作表上的单元格,您将导致错误。

你有两个select。

要么先激活适当的表格:

 Sheet1.Activate Range("A2").Activate 

或者,不要激活工作表来进行有条件的检查。 你不必激活一个单元格来确定它的价值。 例如,如果您想检查sheet1中单元格B2的值(不pipe工作簿中哪个表格处于活动状态):

 If Sheet1.Range("B2").Value = "Yes" ... 

在你的If Not c Is NothingEnd If块中可以改变为:

 firstAddress = c.Address Do If c.Offset(0, 7).Value = Pno Then If c.Offset(0, 16).Value <> Sheets("MP Parameters").Range("P" & i).Value Then Sheets("MP Parameters").Range("P" & i).Interior.ColorIndex = 46 End If End If Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress i = i + 1 

(我不知道i = i + 1是干什么的,我一直觉得手动修改循环计数器是危险的,但是我把它留在那里,希望它能做你想做的事情。 )