2017-06-21 1 views
1

私は、Wordの別のインスタンス(同じ.docファイル)から非同期マクロをスケジュールするだけの厄介な問題に直面しています。WORDから非同期マクロをスケジュールする方法

意味、私は次のコードスニペットを持って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. マクロがタスクを完了する前にユーザーがドキュメントを閉じることがあります。

とは、何も起こらなかった、シンプルMsgBox言うまでもなく

Public Sub Test() 
    MsgBox "hhh" 
End Sub 

Module1という名前のモジュールを宣言し、私は何OnTime機能のリターンをチェックすることができませんでしだ。

は、私も次の組み合わせ試してみた:

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

を私はここで何をしないのですか?

答えて

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 

たぶん、あなたは、インタラクティブ実行して無人走行を区別するために別のチェックを使用したいと思います。

関連する問題