因此,我正在使用Access 2010中的VBA函数创建Word.Application对象并将其返回。稍后我希望能够关闭这个对象,但是如果它不是我的程序启动的Word.Application对象则不能。
Public myGlobalWordApp as Object
Public newWordAppInstCreated as Boolean
Function GetWordAppInstance(Optional isVisible As Boolean = False) As Object
newWordAppInstCreated = False
On Error Resume Next
Set myGlobalWordApp = GetObject(, "Word.Application")
If myGlobalWordApp = Nothing Then
myGlobalWordApp = CreateObject("Word.Application")
myGlobalWordApp.Visible = isVisible
newWordAppInstCreated = True
End If
Set GetWordAppInstance = myGlobalWordApp
End Function
我想创建一个关闭myGlobalWordApp应用程序对象的CloseWordAppInstance()Sub,但是如果我的VBA代码是打开它的话。有时我会看到另一个我正在查看的Word文档,并且我不希望该窗口被关闭。
我查看了Word 2010应用程序文档,我看到有一个.Parent方法可以调用。我想我可以使用它来查看我是否可以确定我的Access文档/模块/应用程序是否创建了Word.Application对象,但我不知道如何引用"当前对象"或者知道如何进行比较。对此步骤的任何帮助将不胜感激。
我唯一的" impropper"这样做的方法是检查我试图制作的布尔标志,但如果我制作第二个对象则不会有效。
或者,如果有人知道更好的方法来完成这个过程会很棒!
答案 0 :(得分:0)
您需要确保在创建单词实例后,保留其引用。然后,您可以使用相同的引用来关闭单词实例。
Private myGlobalWordApp As Object
Public Function GetWordAppInstance(Optional isVisible As Boolean = False) As Object
On Error GoTo ErrH
If myGlobalWordApp Is Nothing Then
'' create a new word instance if one doesn't exist
Set myGlobalWordApp = CreateObject("Word.Application")
myGlobalWordApp.Visible = isVisible
Set GetWordAppInstance = myGlobalWordApp
Else
'' otherwise return the instance we have
Set GetWordAppInstance = myGlobalWordApp
End If
Exit Function
ErrH:
MsgBox "Error creating word instance!", vbExclamation
End Function
Public Sub CloseWordInstance()
If Not myGlobalWordApp Is Nothing Then
'' close our word instance
myGlobalWordApp.Quit False
Set myGlobalWordApp = Nothing
End If
End Sub
您永远不需要直接使用myGlobalWordApp
变量。您可以调用GetWordAppInstance
来获取单词实例,然后调用CloseWordInstance
来安全地关闭它。这样可以确保您不会覆盖myGlobalWordApp
变量并丢失对单词实例的引用。
Public Sub Test()
Dim myWordInst As Object, wdDoc As Object
Set myWordInst = GetWordAppInstance(True)
Set wdDoc = myWordInst.Documents.Add
' do something with this doc here
CloseWordInstance
End Sub