編輯:我真正的問題是如何測試是否設置了實例化的對象。我並不是真的想要「糾正」我的代碼。它只是一個例子。VBA:測試工作簿是否爲
我有一個返回工作簿的功能:
編輯:添加代碼
Sub GetWb() as Workbook
Application.DisplayAlerts = False
Application.EnableEvents = False
On Error Resume Next
Set wM = Application.Workbooks.Open("Z:\somepath.xlsm", ReadOnly:=True)
Application.EnableEvents = True
Application.DisplayAlerts = True
On Error GoTo 0
end sub
在另一個子我要檢查,如果該對象是由功能正確設置。我通常不喜歡這樣使用對象一般爲:
dim w as Workbook
set w = GetWb
if w is nothing then
debug.print "no workbook"
else
debug.print "workbook"
end if
然而,is nothing
測試不工作,因爲對象實例化,但沒有設置所以它是什麼,不是什麼。
我已經使出這個醜陋的解決方案,工作正常:
dim w as Workbook
set w = GetWb
on error goto someerrorhandling
if w.name = "" then
end if
on error goto 0
'other code here
someerrorhandling:
msgbox "no workbook"
換句話說,我檢查對象的屬性,迫使一個錯誤,還是不行。必須有更好/更清潔的方式。
我檢查這個環節說我這樣做的方式是最好的方法: VBA: Conditional - Is Nothing
你能發表實際的代碼嗎? 'Sub GetWb()as Workbook'至少是一個語法錯誤,而''在這裏設置合適的工作簿的代碼'可能是問題所在。 – Comintern
我認爲你的解決方案很接近 - 可能有更好的方法來編寫它,但這個想法是一樣的 - 在訪問「Workbook」對象時發現錯誤。只需將其包裝到一個返回「布爾」的「Function」中 - 並且您已經完成設置。 –
我添加了代碼的功能。 – mountainclimber