Создание экземпляров объектов глобально - PullRequest
0 голосов
/ 19 ноября 2009

это, наверное, то, что я должен знать, но я озадачен этим. Я пытаюсь создать некоторые объекты и могу получить к ним доступ и изменить их глобально.

Я попытался создать публичный модуль и объявить несколько объектов в этом. Я могу получить доступ к ним из другой подпрограммы, но я получаю ошибку исключения, когда после сборки и запуска процесса и попытки изменить этот объект.

То же самое происходит, если я объявляю объект в Public Class Form1. Например, как это:

Public Class Form1
Public appWord = New Microsoft.Office.Interop.Word.Application
Public wordDoc as Microsoft.Office.Interop.Word.Document

Теперь, в моей кнопке, у меня есть это:

wordDoc = appWord.Documents.Open("c:\temp\test.dot")
appWord.Quit()
appword = Nothing

После того, как я собрал проект и нажал кнопку, я получаю эту ошибку:

Type mismatch. (Exception from HRESULT: 0x80020005(DISP_E_TYPEMISMATCH))

Я пытаюсь запустить Winword.exe, затем загрузить в него шаблон и прочитать некоторые макросы из шаблона. Затем я хочу иметь возможность заменить макрокод из моего приложения и затем сохранить изменения в макросе. И у меня есть подпрограмма Public, которая читает макрос и помещает текст в текстовое поле. А потом у меня есть отдельный Public Sub, который выполняет замену. Однако я пытаюсь найти умный способ создания этих объектов один раз, поэтому мне не нужно делать это снова и снова.

Редактировать: Этого не произойдет, если я объявлю объект в той же подпункте, что и кнопка, например:

Private sub Button1_Click
Dim appWord = New Microsoft.Office.Interop.Word.Application
Dim wordDoc as Microsoft.Office.Interop.Word.Document

wordDoc = appWord.Documents.Open("C:\temp\test.dot")
appWord.Quit()
End sub

Редактировать: Я получил это работает сейчас. Не было ошибки, просто документ не существовал ... Я идиот :)

1 Ответ

1 голос
/ 19 ноября 2009

Проблема, которую вы получаете, не имеет ничего общего с тем, как вы объявляете свои «глобалы». Это ошибка интерфейса Dispatch, сообщающая, что тип, который вы передаете, не соответствует ожидаемому классу взаимодействия, то есть вызов Open, вероятно, неправильный. Согласно эта ссылка должна передаваться по ссылке (поэтому литеральная строка недопустима).

...