【问题标题】:Close only Word.Application Objects that were created by my program仅关闭我的程序创建的 Word.Application 对象
【发布时间】:2015-08-18 02:42:18
【问题描述】:

所以我正在使用 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

我想创建一个 CloseWordAppInstance() Sub 来关闭 myGlobalWordApp 应用程序对象,但前提是我的 VBA 代码是打开它的代码。有时我会打开另一个我正在查看的 Word 文档,但我不想关闭那个窗口。

我查看了 Word 2010 应用程序文档,发现有一个可以调用的 .Parent 方法。我想我可以使用它来查看是否可以确定我的 Access Document/Module/Application 是否创建了 Word.Application 对象,但我不知道如何引用“当前对象”或知道如何进行比较。对此步骤的任何帮助将不胜感激。

我唯一“不恰当”的做法是检查我尝试制作的布尔标志,但如果我制作第二个对象,这将不起作用。

或者,如果有人知道执行此过程的更好方法,那就太好了!

【问题讨论】:

  • 我喜欢你的解决方案,但你的意思是:but that wont work if I make a second object?在你的代码中有两个错误:1.使用myGlobalWordApp is Nothing而不是myGlobalWordApp = Nothing和2.在一行之前添加set以拥有Set myGlobalWordApp = CreateObject("Word.Application")
  • 如果您想创建多个实例,请使用全局集合来存储对您打开的实例的引用。

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


【解决方案1】:

您需要确保在创建单词实例后保留其引用。然后,您可以使用相同的引用来关闭单词 instance。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多