application.Documents.Add (filePath) возвращает ноль, когда код VBA мешает - PullRequest
2 голосов
/ 08 июля 2019

Наш продукт использует VSTO (C #) для создания нового документа из шаблона:

Document document =_application.Documents.Add(filePath);

Переменная 'document' будет содержать ссылку на объект документа.Теперь у нас есть клиент, у которого установлен шаблон в папке автозагрузки Word, который содержит код VBA, который создает документ, использует этот документ и удаляет его.

'' Module contents
Dim oAppClass As New ThisApplication

Public Sub AutoExec()
    Set oAppClass.oApp = Word.Application
End Sub


'' Class module contents
Public WithEvents oApp As Word.Application

Private Sub oApp_NewDocument(ByVal Doc As Document)
    Dim oDoc As Document
    Set oDoc = Documents.Add
    ' do something with the document
    oDoc.Close
End Sub

Когда этот код vba установлен, код C #(вверху вопроса) верните ноль вместо только что созданного документа.Таким образом, документ фактически создается в Word, а коллекция application.Documents содержит дополнительный документ, но переменная 'document' имеет значение null.

Я ищу правильное решение для получения ссылки на вновь созданныйдокумент.

Я могу получить список открытых в данный момент документов перед добавлением нового документа, затем получить список, сравнить их и найти новый документ.Но если код VBA создает новый документ, не закрывая его, будет 2 новых документа.Чем я до сих пор не знаю, что это за документ, который я создал из кода C #.

Так есть ли способ определить, какой документ я создал из кода C # в этой ситуации?

1 Ответ

1 голос
/ 08 июля 2019

"есть ли способ определить, какой документ я создал из кода C # в этой ситуации?"

Да.Запросите свойство документа AttachedTemplate.Если код VBA в шаблоне запуска такой, каким он отображается в вашем вопросе для любого создаваемого документа, .AttachedTemplate.Name вернет Normal.dotm, тогда как ваш документ будет присоединен к шаблону, который вы передаете как filePath.

Сравнивая .AttachedTemplate.FullName с filePath, вы должны получить совпадение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...