У меня была похожая проблема как у пользователя в этот вопрос .
Прямо сейчас я не могу получить свою переменную функции proDocName, которая имеет тип «DocumentProperty», для установки в wdDoc.BuiltinDocumentProperties.Item (1) в моем Excel VBA ниже. Выдает ошибку несоответствия типов.
Подпрограмма Excel VBA должна сначала открыть экземпляр слова, а затем открыть файл документа 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
Этот тест позволил мне увидеть свойства документа "wdDoc", поэтому я знаю, что это должно быть проблемой либо с 1) объектной моделью Excel и Word для DocumentProperty, либо 2) функцией каким-то образом теряется доступ к Word .Document BuiltinDocumentProperties collection
У этого кода в Excel vba возникают проблемы, когда я добираюсь до строки, в которой я установил wdDocPro для элемента BuiltinDocumentProperties.
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