仅关闭由我的程序创建的Word.Application对象

时间:2015-08-17 17:22:42

标签: vba ms-access access-vba parent-child word-vba

因此,我正在使用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"这样做的方法是检查我试图制作的布尔标志,但如果我制作第二个对象则不会有效。

或者,如果有人知道更好的方法来完成这个过程会很棒!

1 个答案:

答案 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