3

MailMergeをWord2010で使用しようとしています。

次のようなTAB区切りファイルdatabase.datがあります。

ID       Name       Street
1        John       FooBar 1
2        Smith      FooBar 2

このファイルは、Wordで次のVBAコードとともに使用されます。

ActiveDocument.MailMerge.OpenDataSource Name:="C:/database.dat", _
    ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    AddToRecentFiles:=False, Revert:=False, Format:=wdOpenFormatAuto

ファイルのフィールドをテキストで使用できるようになりました。したがって、すべてが正常に機能します。

問題:

VBAのデータをさらに詳しく説明する必要があるため、MergeField値を次のようにフェッチします。

Function getInfoField(mergefield As String)
    On Error GoTo MergeFieldNotFound:
    getInfoField = ActiveDocument.MailMerge.DataSource.DataFields(mergefield).Value
    GoTo EndFunc
MergeFieldNotFound:
    getInfoField = ""
EndFunc:
End Function

ただし、マージフィールド値の長さが255文字を超えると、切り捨てられます。だから私が挿入すると

MsgBox Len(ActiveDocument.MailMerge.DataSource.DataFields(mergefield).Value)

たとえば500文字の文字列に対して255を出力します。

ただし、単語ドキュメントに直接表示されるのは、マージフィールドの500文字すべてです。

質問:

VBAのマージフィールドから255文字を超える文字を取得するにはどうすればよいですか?

4

1 に答える 1

2

私はそれを試していませんが、以下がうまくいくかもしれません:

  1. 全文を保持するドキュメント変数を作成します。MERGEFIELDフィールドの代わりに、このフィールドのMailMergeMainドキュメントでDOCVARIABLEフィールドを使用します。

  2. MailMergeBeforeRecordMergeイベントでは、

    a。結果を簡単に抽出できる場所(ドキュメントの先頭など)にMERGEFIELDフィールドを一時的に挿入します。

    b。必要に応じて、フィールドを更新します(Doc.Fields(1).Updateなど)

    c。テキストを取得します(Doc.Fields(1).Result.Text

    d。挿入したフィールドを削除します

    e。必要に応じてテキストを操作する

    f。結果をドキュメント変数に入れます

    g。必要に応じて、DOCVARIABLEフィールドを更新します。

警告-詳細を思い出せませんが、Wordの一部のバージョンは、特にテーブル内にある場合、DOCVARIABLEフィールドの一部の文字でうまく機能しません。

そうしないと、ファイルへの別の接続を開く必要があると思います(たとえば、ADOとJet / ACEプロバイダー+テキストファイルIISAMを使用してこれを行うことができる場合があります)。これにより、テキストの抽出が容易になる場合がありますが、 MailMergeで現在選択されているように、ADOを介して正しいレコードを取得できるようにするメカニズム(一意のキーなど)が必要になります。

于 2012-12-21T18:11:37.360 に答える