如何从WORD安排异步宏

时间:2017-06-21 15:27:31

标签: vba ms-word word-vba

我正面临一个恼人的问题,我只是想从另一个Word实例安排一个异步宏,这个实例恰好是.doc文件。

意思是,在ThisDocument命名空间中,我有以下代码片段:

Public Sub Document_Open()
    Set Obj = New Word.Application
    Obj.OnTime Now + TimeValue("00:00:01"), "Module1.Test"
End Sub

由于以下原因,我已声明了Word的新对象:

  1. 我的宏可能会阻止用户的I \ O
  2. 用户可以在宏完成任务之前关闭文档
  3. 并使用简单的Module1

    声明名为MsgBox的模块
    Public Sub Test()
        MsgBox "hhh"
    End Sub
    

    毋庸置疑,没有任何反应,我无法检查OnTime函数返回的内容。

    我也尝试了以下组合:

    "!Module1.Test"
    "c:\\....\\file.doc!Module1.Test"
    

    我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

Word.Application对象表示的新创建的Word应用程序没有打开文档。因此,没有" Module1"据他所知。您想要从同一文档运行代码的事实并不重要。它是Word的另一个实例。

这样的工作:

'''''''' ThisDocument
Option Explicit

Private Sub Document_Open()
    Dim res As VbMsgBoxResult
    Dim Obj As Word.Application

    If Application.Visible Then
        res = MsgBox("Hello", vbOKCancel, "Hi!")
    Else
        Exit Sub
    End If

    If res = vbOK Then
        Set Obj = New Word.Application
        Obj.Documents.Open "C:\Users\conio\Desktop\Hello.docm", , True
        Obj.OnTime Now + TimeValue("00:00:01"), "Module1.Foo"
    End If
End Sub

'''''''' Module1
Public Sub Foo()
    If Not Application.Visible Then
        MsgBox "Foo"
        Application.Quit
    End If
End Sub

也许您想要使用不同的检查来区分交互式运行和无人值守运行。