如何将 Excel DocumentProperty 对象变量(位于 ByRef 函数中)设置为 WordbuiltinDocumentProperties 集合项?

Mik*_*ike 5 excel vba ms-word

我和这个问题的用户有类似的问题。

现在,我无法在下面的 Excel VBA 中将类型为“DocumentProperty”的函数变量 proDocName 设置为 wdDoc.BuiltinDocumentProperties.Item(1) 。它会抛出类型不匹配错误。

Excel VBA 子例程应首先打开 Word 实例,然后打开 Word 文档文件。

然后,我将 ByRef 文件(我在代码中称之为 wdDoc)传递给函数,然后尝试获取文档属性的值和名称,我想使用该函数将其写入 Excel 工作表。

我已经在 Word VBA 中测试了以下代码,它工作正常:

Sub test()
Dim wdApp As Word.Application
Dim wdDocPro As DocumentProperty

Set wdApp = GetObject(, "Word.Application")
Set wdDoc = wdApp.ActiveDocument
Set wdDocPro = wdDoc.BuiltInDocumentProperties.Item(1) ' I get a type mismatch on this line

For Each wdDocPro In wdDoc.BuiltInDocumentProperties
MsgBox (wdDocPro.Name & " , " & wdDocPro.Value)

Next wdDocPro

End Sub
Run Code Online (Sandbox Code Playgroud)

该测试使我能够看到“wdDoc”的文档属性,因此我知道这一定是 1.) DocumentProperty 的 Excel 与 Word 对象模型或 2.) 该函数以某种方式失去对 Word.DocumentbuiltinDocumentProperties 的访问的问题收藏

当我到达将 wdDocPro 设置为builtinDocumentProperties 项的行时,excel vba 中的这段代码出现问题。

Public Sub GetCurrentFolderConstants()
Dim DocVariables() As String
Dim wdApp as Word.Application
Dim wdDoc as Word.Document

Set wdApp = GetObject(, "Word.Application")
Set wdDoc = wdApp.ActiveDocument

DocVariables = DocVarGrabbing(wdDoc)
'Do stuff

wdDoc.Close True
'Do stuff with DocVariables
wdApp.Quit SaveChanges:=False
End Sub



'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function DocVarGrabbing(ByRef wdDoc As Word.Document) As String()

Dim wdDocPro As DocumentProperty 'Problem variable

'Set wdApp = GetObject(, "Word.Application")
'Set wdDoc = wdApp.ActiveDocument
'MsgBox wdDoc.Name

If wdDoc.BuiltinDocumentProperties.Count > 0 Then
    Set wdDocPro = wdDoc.BuiltinDocumentProperties.Item(1)'I get a type mismatch at this line
    For Each wdDocPro In ActiveDocument.BuiltinDocumentProperties
    'Do stuff with Document properties Names and Values and assign to DocVarArray (not needed for debugging)
    Next wdDocPro
End If

DocVarGrabbing = DocVarArray
Set wdDocPro = Nothing

End Function
Run Code Online (Sandbox Code Playgroud)

Mat*_*don 3

原则上,本主题中的类型DocumentProperty应该是类型Office.DocumentProperty- 并且DocumentProperties将是一个Office.DocumentProperties对象实例(VSTO 文档似乎同意),并且对象浏览器仅在类型库中找到具有该名称的单个类Office- 所以这不是关于 Excel 与 Word:两者都没有定义任何DocumentPropertiesDocumentProperty类。

这是一个问题。接下来的事情是,TypeOf当您处于进程外时(例如,从 Excel 工作簿的 VBA 项目中检查 Word 文档,或者从 Word 文档的 VBA 中检查 Excel 工作簿的属性),类型检查显然(令人惊讶的是,实际上)失败项目):

Public Function GetWordDocProps(ByVal doc As Word.Document) As Variant
    Dim properties As Variant 'Office.DocumentProperties
    Set properties = doc.BuiltinDocumentProperties

    Dim prop As Variant 'Office.DocumentProperty
    Set prop = properties.Item(1)

    If Not TypeOf properties Is Office.DocumentProperties Then Debug.Print TypeName(properties) 'prints "DocumentProperties"
    If Not TypeOf prop Is Office.DocumentProperty Then Debug.Print TypeName(prop) 'prints "DocumentProperty"

    '...        
End Function
Run Code Online (Sandbox Code Playgroud)

当您忽略类型并将所有内容视为 时Variant,所有内容都“正常工作”..但是是后期绑定的,因此请注意拼写错误,如果您尝试调用不存在的成员,则会出现错误 438。