1

Word の VBA には、ドキュメントで特定のイベントが発生したときにイベントをトリガーするさまざまなイベント ハンドラーがあることがわかりましたが、私の人生では、それらのいずれもまったく機能させることはできません。

差し込み印刷の各レコードのフィールドを更新する必要がありますが、実行できません。

現時点で私が持っているものは次のとおりです。

Private Sub Document_MailMergeRecordMerge()
    ActiveDocument.Variables("SuperV").Value = ActiveDocument.MailMerge.DataSource.DataFields("Supervisor").Value
End Sub

a) これが必要な場所と、b) 実際に実行するために何を含める必要があるか教えてもらえますか?

サブルーチンを手動で実行すると、アクティブな MailMerge レコードで期待どおりに機能します。

4

2 に答える 2

0

あなたがこれに苦労しているのは当然のことです。必要なイベント (MailMergeBeforeRecordMergeイベント) にアクセスするには、アプリケーション オブジェクトにアクセスする必要があります。

これは比較的簡単に行うことができます:

'declare global Application reference
Dim WithEvents wdApp As Application

'参照をどこかに設定します (私は Document_Open を使用しましたが、好きなものを使用できます)

Private Sub Document_Open()

    'Get a reference to the Word application to handle mail merge events.
    Set wdApp = Application
End Sub

Private Sub wdApp_MailMergeBeforeRecordMerge(ByVal doc As Document)
    Debug.Print ("MailMergeBeforeRecordMerge")

End Sub

'clean up
Private Sub Document_Close()
    wdApp = Nothing
End Sub

いくつかの良い例が、Word 2002 の古い MS ドキュメントにあります (2013 年になってもまだ語られています): Word 2002 MailMerge イベント コードのデモ

于 2014-05-28T01:04:19.587 に答える
0

Word 2016 用に更新された完全な作業例

'declare global Application reference
Dim WithEvents wdApp As Application
Private Sub Document_Open()
    Debug.Print ("Document_Open")
    'Get a reference to the Word application to handle mail merge events.
    Set wdApp = Application
End Sub

Private Sub wdapp_MailMergeBeforeRecordMerge(ByVal Doc As Document, Cancel As Boolean)
    Debug.Print ("MailMergeBeforeRecordMerge")

End Sub

Private Sub Document_Close()
    Debug.Print ("Document_Close")
    wdApp = Nothing
End Sub
于 2016-01-14T02:18:41.460 に答える