1

誰かがドキュメントを開くたびに実行したい VBA アドインがあります。既存のドキュメントを開いたり (AutoOpen)、[ファイル] > [新規] メニューから新しいドキュメントを作成したり (AutoNew) は正常に機能しますが、Word を初めて開いたときに、これらのイベントのどちらも発生しません。フックできると思われる唯一のイベントは AutoExec イベントですが、ドキュメントがまだ存在しないため、ActiveWindow が null であるため、これは適切ではありません。

誰でも助けることができますか?

Sub AutoNew
    MsgBox "New"
End Sub

Sub AutoOpen
    MsgBox "Open"
End Sub

Sub AutoExec
    MsgBox "Exec"
End Sub
4

1 に答える 1

1

DocumentOpen と NewDocument から始めます。ProtectedView ドキ​​ュメントをサポートする必要がある場合は、さらに複雑になります。Word は別のイベントをトリガーします。そのイベントをチェックしようとすると (そして発生しない場合)、エラーが発生することがわかりました。私はあまり運がなく、結局、私が費やした時間の価値がありませんでした. ドキュメントが開かれたとき、または新しいドキュメントが作成されたときに (アドインが読み込まれていると仮定して) スタイル ペインを開き、まだ展開されていない場合は下書きビューでスタイル マージンを展開するコードの例を以下に投稿しました。

私のUIモジュールでは:

Dim X As New clsAppEvent 'This is in the declarations

Public Sub OnRibbonLoad(objRibbon As IRibbonUI)
    Do While Documents.Count = 0
      DoEvents
    Loop ' I find this useful as sometimes it seems my ribbon loads before the document. 
    Call Register_Event_Handler
    ' Other stuff
End Sub

Private Sub Register_Event_Handler()
    Set X.App = Word.Application
End Sub

次に、クラス モジュールで clsAppEvent を呼び出します。

Option Explicit

Public WithEvents App As Word.Application

Private Sub App_DocumentOpen(ByVal Doc As Document)
    App.TaskPanes(wdTaskPaneFormatting).visible = True
End Sub

Private Sub App_NewDocument(ByVal Doc As Document)
    App.TaskPanes(wdTaskPaneFormatting).visible = True
End Sub

Private Sub App_WindowActivate(ByVal Doc As Document, ByVal Wn As Window)
    If Wn.StyleAreaWidth <= 0 Then
      Wn.StyleAreaWidth = 60
    End If
End Sub

上記の警告以外に、私が経験した 1 つの問題は、ユーザーが通常のテンプレートにも自動コードを持っている場合です。1回しか出てないので調べてません。

これについて学んだサイト (および Register_Event_Handler が派生したサイト) を見つけられたらいいのにと思います。見つかったら、コメントを追加します。

于 2013-02-26T17:32:49.347 に答える