提问人:S.Parseh 提问时间:8/27/2023 最后编辑:StayOnTargetS.Parseh 更新时间:8/28/2023 访问量:66
如何在VBA中正确使用全局对象?
How to use global object in VBA correctly?
问:
我有一个用 c# 编写的 COM DLL,用于 MS Word(使用 Interop)并将此 COM 用于 VB6 项目。
在一个模块中,我定义了一个全局变量,如下所示:
Public obj As Office.OfficeWord
在 Form1 中:
Set obj = New OfficeWord
通过创建对象,将创建一个 word 实例,我可以在任务管理器中看到该实例。 在 Form2 中,我创建一个新文档并关闭它(不是 Word.Application):
OfficeWord.CreateNewDoc
// doing some work
OfficeWord.Close
当我关闭 Form2 并尝试再次添加新文档(在 Form1 或 Form2 中)时,出现以下错误: “Word 遇到了问题”。但是,该实例处于活动状态,我可以在任务管理器中看到它。 我应该提一下,如果我只是使用 Form1,一切都很好,我可以添加一个新文档并多次关闭它,最后,也关闭实例(obj。退出),但是当我想在 Form2 中使用公共对象时,我收到上面的错误。
C# DLL 使用以下代码行来创建和关闭 Word 文档和实例:
public OfficeWord()
{
wdapp = new Word.Application();
}
public int CreateNewDoc()
{
wddoc=wdapp.Documents.Add();
}
public int Close()
{
object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
object originalFormat = Word.WdOriginalFormat.wdOriginalDocumentFormat;
object routeDocument = false;
wddoc.Close(ref saveOption, ref originalFormat, ref routeDocument);
}
public int Quit()
{
wdapp.Quit(false);
}
使用 Form1、Form2 和公共变量是必需的。 请指导我。 谢谢。
答:
0赞
BQF
8/27/2023
#1
这可能看起来有点奇怪,但它在“vb6”中工作了很多次。 使用相应对象且不再需要它后,将其设置为“无”。
在 Form1 中:
Set obj = Nothing
Set obj = New OfficeWord
评论
0赞
S.Parseh
8/28/2023
谢谢@BQF。你是对的,这是因为 vb6。
0赞
BQF
8/28/2023
VB6 编译器有“美丽心灵”。(@S.帕塞)
评论