这可能是我应该知道的,但我对此感到困惑。 我正在尝试创建一些对象,并能够全局访问和修改这些对象。
我尝试创建一个公共模块并在其中声明一些对象。 我能够从另一个子访问这些,但在构建和运行该进程并尝试修改这些对象后,我收到异常错误。
如果我在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
编辑:我现在就开始工作了。没有错误,只是文件不存在..我是个白痴:)
答案 0 :(得分:1)
你得到的问题与声明“全局”的方式无关。这是一个Dispatch接口错误,告诉你传递的类型不是interop类所期望的,也就是说,对Open的调用可能是错误的。根据{{3}},它应该通过引用传递(因此文字字符串无效)。