VBA使用对象变量

时间:2017-08-23 13:09:59

标签: object ms-word word-vba

我遇到了一些我无法理解的事情(但我知道这可能很简单)。我尝试了一些通用例程来收集典型单词对象的属性,例如表格,文本框,范围等。这就是我的想法:

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

显示消息:

  

范围而不是“表”(但直接在test子(在示例中注释)中执行MsgBox(TypeName(ThisDocument.Range.Tables(1)))显示:表。

如何在没有类型更改的情况下将未知类型的对象传递给子例程的任何想法?

1 个答案:

答案 0 :(得分:0)

关键是你将Sub作为一个函数调用(通过在参数周围添加())。这显然会返回默认会员'即范围。

通过删除参数周围的()来调用sub作为Sub,它将返回Table:

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