2017-08-23 12 views
0

私は理解できないものに取り組んできましたが、それはかなり簡単かもしれません。VBAはオブジェクト変数を使用してサブルーチンにword.tableを渡します

Sub GetWobjectAttributes(ByRef WObject As Object) 

    If TypeOf WObject Is Word.Table Then 
      'grab table attributes 
     ElseIf TypeOf WObject Is Word.Range Then 
      'grab range attributes 
     ... 

     End If 
    End Sub 

残念ながら、一般的なオブジェクト型を使用してオブジェクトを渡すと、渡されたの種類を変更するようだ:私は、などの範囲、表、テキストボックスなどのオブジェクトここでアイデアを行く典型的な単語の属性を収集するために、いくつかの汎用ルーチンを試してみてくださいオブジェクト。例えば、サブテストを実行する:

Sub test() 


GetWobjectAttributes (ThisDocument.Tables(1)) 

'MsgBox (TypeName(ThisDocument.Range.Tables(1))) 

End Sub 


Public Sub GetWobjectAttributes(ByRef WObject As Variant) 

    MsgBox (TypeName(WObject)) 

End Sub 

表示メッセージ:

範囲の代わりに "表"(ただし、実行メッセージボックス(型名(ThisDocument.Range.Tables(1)))を直接テストサブにおける(すべてのアイデアは、型変更せずにサブルーチンに未知の型のオブジェクトを渡す方法

表を

答えて

0

ポイントは、あなたがCAということです。表示例では)コメント? Subを関数として追加する(パラメータの周りに()を追加する)。これは明らかに「デフォルトのメンバー」つまり範囲を返します。

は、パラメータの周りに()を除去することにより、サブのようなサブを呼び出すと、それは両方のリターン表は以下となります。

Sub test() 

    GetWobjectAttributes ThisDocument.Tables(1) 

    MsgBox (TypeName(ThisDocument.Range.Tables(1))) 

End Sub 


Public Sub GetWobjectAttributes(ByRef WObject As Variant) 

    MsgBox (TypeName(WObject)) 

End Sub 
+0

おかげで、今では明らかです。私はいくつかの脳が衰退していた:/ソリューションは完璧に動作します。 – jareckii

関連する問題