プロパティ取得関数
プロパティ名の文字列を引数として与えて、オブジェクトのプロパティを取得します。
プロパティが存在しない場合はエラーを出さずに指定した変数を戻り値として返します。
Option Explicit ' テスト用コード Call Test Function Test Dim ObjIE, FullName, Doc ' IEオブジェクトを生成 Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.navigate "about:blank" ObjIE.visible = true Do While(ObjIE.Busy) WScript.Sleep 100 Loop ' IEオブジェクトのFullNameプロパティ、Documentプロパティを取得 FullName = GetPropertyVal(ObjIE, "FullName", "error") Set Doc = GetPropertyObj(ObjIE, "Document", Err) MsgBox "ObjIE.FullName:" & FullName & vbCrLf & _ "TypeName(ObjIE.Document):" & TypeName(Doc) ' IEオブジェクトのFullName2プロパティ、Document2プロパティを取得 FullName = GetPropertyVal(ObjIE, "FullName2", "error") Set Doc = GetPropertyObj(ObjIE, "Document2", Err) MsgBox "ObjIE.FullName2:" & FullName & vbCrLf & _ "TypeName(ObjIE.Document2):" & TypeName(Doc) End Function '########################################################### ' オブジェクトのプロパティ値を取得 ' 関数 ' GetPropertyVal(Obj As Object, PropName As String, ErrVal As Variant) ' ' 引数 ' Obj:プロパティを取得するオブジェクト ' PropName:取得するプロパティ名 ' ErrVal:取得できない場合に返す値 ' ' 戻り値 ' オブジェクトのプロパティ値を返す。 ' オブジェクトが指定されたプロパティ名を持っていない場合はErrValを返す。 ' ' 制限事項 ' 直前のエラーがクリアされる Function GetPropertyVal(Obj, PropName, ErrVal) Err.Clear On Error Resume Next GetPropertyVal = Eval("Obj." & PropName) If (Err.Number <> 0) Then GetPropertyVal = ErrVal Err.Clear End If End Function '########################################################### '########################################################### ' オブジェクトのプロパティオブジェクトを取得 ' 関数 ' GetPropertyObj(Obj As Object, PropName As String, ErrVal As Object) ' ' 引数 ' Obj:プロパティを取得するオブジェクト ' PropName:取得するプロパティ名 ' ErrVal:取得できない場合に返す値 ' ' 戻り値 ' オブジェクトのプロパティオブジェクトを返す。 ' オブジェクトが指定されたプロパティ名を持っていない場合はErrValを返す。 ' ' 制限事項 ' 直前のエラーがクリアされる Function GetPropertyObj(Obj, PropName, ErrVal) Err.Clear On Error Resume Next set GetPropertyObj = Eval("Obj." & PropName) If (Err.Number <> 0) Then set GetPropertyObj = ErrVal Err.Clear End If End Function '###########################################################
TypeNameを使って、戻り値の型を判定すれば関数を1つにまとめられそうだけど、
2回のプロパティ呼び出しが必要になるのでやめた。
戻る