編集:実際の問題は、インスタンス化されたオブジェクトが設定されているかどうかをテストする方法です。私は本当に自分のコードを "修正"するつもりはない。その単なる例です。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」オブジェクトにアクセスするには、tyringのエラーをキャッチします。 'Boolean'を返す' Function'にそれをラップしてください。あなたはすべて設定されています。 –
私は関数にコードを追加しました。 – mountainclimber