2014-03-29 55 views
0

我是一位在Excel環境下學習VBA的3周新手(在我30年前在Pascal上完最後一門編程課程之後)。我不明白爲什麼有時執行一些代碼引用表單需要激活表單。我的具體問題,通過一些玩具代碼:需要Excel VBA表單激活嗎?

Public Sub Test() 
Dim Rng As Range 
Set Rng = Worksheets("Sheet2").Range(Cells(1, 1), Cells(5, 1)).Find(What:="Prize",LookIn:=xlValues) 
If Rng Is Nothing Then 
    MsgBox "Nothing there" 
Else 
    MsgBox "Found the prize" 
End If 
End Sub 

如果我把測試(),而Sheet1中是有效的(通過在Sheet1用戶窗體說)我得到一個「定義或對象定義的錯誤應用」。如果Sheet2處於活動狀態,代碼將正常運行。

爲什麼Sheet2必須處於活動狀態才能執行此代碼?我可以通過激活Sub2內的Sheet2然後再次激活Sheet 1來解決這個問題,但這看起來很笨拙。有沒有更好的辦法?

感謝您的幫助!我在我的實際代碼中遇到了類似這樣的其他激活問題。

+1

'細胞()'沒有工作預選賽總是指ActiveSheet。你需要使用'Worksheets(「Sheet2」)。Cells(...)' –

回答

1

由於您沒有爲單元格指定工作表,因此該對象將引用活動工作表。但是您的範圍明確定義爲引用Sheet 2。由於存在衝突,因此會出現錯誤。

使用語法,你可以這樣做:

With Worksheets("Sheet2") 
    Set Rng = range(.Cells(1,1),.Cells(5,1)).Find(... 
end with 
+0

謝謝!我誤解了Cells()所做的。 – user3474688