我正在编写一个代码来比较两个不同工作簿中的两行,这两个工作簿可以位于列中的不同位置。第一列通常在一个部分中分组(相同值的多个)。这就是为什么在此代码中我按第一列搜索,然后选择其他标识符列并一次偏移一个,而两个工作簿表彼此匹配
我正在尝试通过此代码中的.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
答案 0 :(得分:2)
如果Activate
上有一个小区,则您只能ActiveSheet
。由于您的代码在不同的工作表上引用了Activates
单元格,因此会导致错误。
您有两种选择。
首先激活合适的纸张:
Sheet1.Activate
Range("A2").Activate
或者,不要激活工作表进行条件检查。您不必激活单元格来确定它的价值。例如,如果要检查sheet1中的值,单元格B2(无论工作簿中哪个工作表处于活动状态):
If Sheet1.Range("B2").Value = "Yes" ...
答案 1 :(得分:1)
If Not c Is Nothing
... End 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
的目的是什么。我总是发现手动修改循环计数器很危险。但我把它留在那里希望它正在做你想要它做什么。)