我的目标是创建由表定义的各种全局模板的数组。我的宏读取表。如果名称指定了可用模板,则我的数组应包含该对象。如果找不到模板,则数组应包含无法处理的名称。 ThisDocument是docm类型的。默认将其分配给Sfs(0)。这是我的代码的摘录。
Private Sub TestSetSfs()
Dim Sfs() As Variant
SetSfs Sfs
Debug.Print Sfs(0).Name
Debug.Print VarType(Sfs(0)) ' returns vbString
End Sub
Function SetSfs(Sfs() As Variant) As Long
Dim Tbl As Table
ReDim Sfs(20) ' max 20 references
Set Sfs(0) = ThisDocument
Debug.Print Sfs(0).Bookmarks.Count ' works as expected
Debug.Print VarType(Sfs(0)) ' returns vbString
Debug.Print GetTextTbl(Tbl, Sfs(0), "SomeName")
End Function
Function GetTextTbl(Tbl As Table, Doc As Document, Tn As String) As Boolean
GetTextTbl = True
End Function
我的问题是Set Sfs(0)= ThisDocument行。在测试过程的下一行中,Sfs(0)可以作为对象正常工作,并允许Bookmarks.Count。它还在“本地”窗口中显示为一个对象。但是,函数GetTextTbl将其拒绝为“ ByRef参数类型不匹配”,当在函数调用中用ThisDocument替换时,它不会执行此操作。这促使我查看其VarType,该VarType返回VbString而不是vbObject。
[让我补充说,我已经有这个想法可以在Excel(带有插件)中使用,但是我需要在Word中具有等效的概念,如果可以将对象分配给Sfs()变体,则我认为全局模板将满足我的要求。知道怎么做吗?
Variant
(而不是Document
对象),或者在所有地方坚持使用Object
,因为它们似乎都提供了本示例中需要的功能。因此将其更改为此(以使用变体方法):
Function GetTextTbl(Tbl As Table, Doc As Variant, Tn As String) As Boolean
或将它们都更改为此(以使用对象方法):
Dim Sfs() As Object
Function SetSfs(Sfs() As Object) As Long
在所有情况下都将其用作Object
对我来说最有意义,因为这样您就可以将GetTextTbl
函数的原始声明用作:
Function GetTextTbl(Tbl As Table, Doc As Document, Tn As String) As Boolean
然后您的智能感知将在该功能内起作用。只要确保您没有将除Word Document以外的对象传递给它,否则会出现错误。