Как понять приведенное исключение при автоматизации Word из кода VB в Visual Studio?

#vb.net #automation #visual-studio-2019

#vb.net #автоматизация #visual-studio-2019

Вопрос:

Я разрабатываю приложение form в немецкой Visual Studio 2019, которое должно автоматизировать Word с помощью VB. В моем проекте VB я добавил ссылку на Microsoft.Офис.Interop.Word.dll и может скомпилировать приложение. Для отладки приложения в VS я использую код:

     Dim oWord As Microsoft.Office.Interop.Word.Application
    oWord = CreateObject("Word.Application")
    oWord.Visible = True
  

Этот тривиальный код должен создавать экземпляр и показывать Word. Однако вместо этого я получаю исключение, что Microsoft.Офис.Interop.Word.ApplicationClass не может быть приведен в Microsoft.Офис.Interop.Word._Application

 System.InvalidCastException: Das COM-Objekt des Typs "Microsoft.Office.Interop.Word.ApplicationClass" kann nicht in den Schnittstellentyp "Microsoft.Office.Interop.Word._Application" umgewandelt werden. Dieser Vorgang konnte nicht durchgeführt werden, da der QueryInterface-Aufruf an die COM-Komponente für die Schnittstelle mit der IID "{00020970-0000-0000-C000-000000000046}" aufgrund des folgenden Fehlers nicht durchgeführt werden konnte: Fehler beim Laden der Typbibliothek/DLL. (Ausnahme von HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY))
  

Насколько я понял, причина не совсем ясна. Некоторые предполагают, что причиной является установка нескольких версий Word, что приводит к несовместимости версий и исключению. Чтобы устранить проблему, они предлагают удалить двойные элементы {00020970-0000-0000-C000-000000000046} в реестре Windows. Я пробовал, но проблема остается.

Как мне решить проблему или у кого-нибудь есть аналогичный пример проекта автоматизации в VB (VB # или VC ) Я могу поэкспериментировать с?

Комментарии:

1. Нет, это тоже не работает.

2. Ваш комментарий к ответу Мэри подразумевает, что у вас есть другой проект, который работает, но эта проблема специфична для этого проекта. Попробуйте следующее. 1) Создайте резервную копию вашего проекта. 2) Удалите папки Bin и Obj через проводник. 3) В VS удалите все ссылки Office, а затем снова добавьте ссылку на Word для вкладки References-> COM, выбрав «Библиотека объектов Microsoft Word XX.Y» (XX. Y будет зависеть от установленной версии). 4) Перестройте проект.

Ответ №1:

В верхней части файла…

 Imports Microsoft.Office.Interop
  

Затем создайте объект с ключевым словом New, которое вызывает конструктор.

 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim oWord As New Word.Application
    oWord.Visible = True
End Sub
  

Комментарии:

1. Спасибо, @Mary, но это тоже не работает и выдает то же исключение. У меня уже есть рабочий VB-проект для тестирования моей среды, и этот проект не работает в моей среде .

Ответ №2:

Причиной этого исключения была Windows с поврежденным реестром.