2016-08-02 48 views
0

我正在編寫一個代碼來比較兩個不同工作簿中的兩行,這兩個工作簿可以位於列中的不同位置。第一列通常在一個部分中分組(多個相同的值)。這就是爲什麼在此代碼中,我按第一列進行搜索,然後選擇其他標識符列並一次偏移一個,而兩個工作簿圖紙都相互匹配比較兩個主要工作簿由兩列和許多參數

我試圖激活通過.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 
+1

作爲第一步:更改'c.Add ress.ActivateCell'到'c.Activate' –

+0

謝謝!這是我總是錯過的小東西 –

+0

它仍然拋出錯誤「範圍類的活動方法失敗」 –

回答

2

您只能Activate如果它是在ActiveSheet細胞。由於您的代碼在不同的工作表上引用Activates單元格,因此會導致錯誤。

您有兩種選擇。

要麼激活適當的紙張第一:

Sheet1.Activate 
Range("A2").Activate 

或者不激活片做一個條件檢查。您不必激活單元格來確定它的價值。舉個例子,如果你想檢查哪些價值是在Sheet1的單元格B2(不論其表處於活動狀態在工作簿):

If Sheet1.Range("B2").Value = "Yes" ... 
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是爲了做我一直認爲它是危險的手動修改循環計數器,但我離開那裏,希望它是做你想要什麼。它要做的。)