2012-10-30 24 views
1

我正在檢查workbook1-sheet1-A中的值是否在workbook2-sheet2-E中匹配。如果有匹配workbook1-sheet1-Y收到'x'檢查不同工作簿中的兩個範圍(運行時錯誤424)

這是我到目前爲止的代碼,並給出了if循環中的Run time error 424 - Object required錯誤。

Sub Check() 
' 
Application.ScreenUpdating = False 

endRow = Range("A" & Rows.Count).End(xlUp).Row 

wkbSLA = ("F:\Workbook2") 

For i = 2 To endRow 
    If Cells(i, 1).Value = wkbSLA.Sheets("Sheet2").Range("E2:E575").Value Then 
     Range("Y" & i) = "x" 
    End If 
Next i 

' 
End Sub 
+0

我編輯了您的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

拋出什麼異常?另外,wkbSLA已經打開了嗎? – Trisped

+0

@JohnSaunders,我的歉意。 – CustomX

回答

0

爲確保您的代碼能夠做到您所期望的一切,請確保您使用變量限定對象。

此外,您不能在多單元格範圍內使用.Value屬性。這可能是你的錯誤發生的地方。更好的方法是使用.Find方法。

如果你寫這樣的代碼,它應該適合你...雖然你可能需要稍微調整它來滿足你的需求。

Option Explicit 

Sub Check() 

Application.ScreenUpdating = False 

Dim wkb1 as Workbook, wkb2 as workbook 
Set wkb1 = Workbooks("workbook1") 
Set wkb2 = Workbooks("F:\Workbook2") 
' -> do you need Workbooks.Open("F:\Workbook2") here? 
' Seems you may if the workbook you want to access is closed 

Dim wks1 as Worksheet, wks2 as Worksheet 
Set wks1 = wkb1.Sheets(1) 'may need to change this reference for your needs 
Set wks2 = wkb2.Sheets("Sheet2") 

With wks1 

    Dim endRow as Long 
    endRow = .Range("A" & Rows.Count).End(xlUp).Row 

    Dim i as Long 
    For i = 2 To endRow 

     Dim rng as Range 
     Set rng = wks2.Range("E2:E575").Find .Cells(i,1).Value lookat:=xlWhole 

     If Not rng Is Nothing Then .Range("Y" & i) = "x" 

    Next i 

End With 

End Sub 
+0

這是否有可能在'IF'中丟失了某些東西?你是否需要打開工作簿才能搜索內容? – CustomX

+0

@ t.thielemans - >我不知道該工作簿是否打開。我在代碼中留下了該評論。這是OP的區別。 AFAIK,必須打開工作簿才能搜索,至少在VBA中。我錯了嗎? –

+0

我不知道,這就是爲什麼我問你;)但是我收到一個錯誤'if wks2.Range(「E2:E575」)。Find cells(i,1).Value lookat:= xlWhole Then .Range (「Y」&i)=「x」',好像有什麼東西丟失了 – CustomX