2

Word ドキュメントが差し込み印刷テンプレートである Excel > Word 差し込み印刷を作成しました。

現時点では、Excel ファイル (データ ソース) の場所をハード コードする必要があります。

ファイルが互いに同じフォルダーにある限り、ネットワーク上でファイルを移動できるようにしたいので、データ ソースがまだ Excel ファイルであることを認識します。

私は現在、うまくいくと思っていたこのコードを持っています。任意の時点で Word 文書が開かれると、ファイルの現在のディレクトリを参照し、ファイル名 PM MailMerge.xlsm を検索して、データ ソースを再作成します。

それが作成されると、メッセージ ボックスに新しい差し込みデータ ソースが表示されます。

これは機能しますが、両方のファイルを他のフォルダーに移動すると失敗し、データソースが見つかりませんと表示されます。

コード:

Private Sub Document_Open()

Dim strBook As String
Dim strBookName As String
Dim strDataSource As String

strBookName = "\PM MailMerge.xlsm"
strBook = ActiveDocument.Path & strBookName
strDataSource = ActiveDocument.MailMerge.DataSource.Name

ActiveDocument.MailMerge.OpenDataSource Name:= _
strBook, _
ConfirmConversions:=False, _
ReadOnly:=False, _
LinkToSource:=True, _
AddToRecentFiles:=False, _
PasswordDocument:="", _
PasswordTemplate:="", _
WritePasswordDocument:="", _
WritePasswordTemplate:="", _
Revert:=False, _
Format:=wdOpenFormatAuto, _
Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=strBook;Mode=Read;Extended                       Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry       Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:D", _
SQLStatement:="SELECT * FROM `Merge$`", _
SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess

MsgBox "Current Datasource -   " + strDataSource

End Sub
4

2 に答える 2

3

Document_Open を実行する前に、Word が既存のデータ ソースに接続しようとするため、失敗します。ただし、正確には何が起こり、何が表示されるかは、少なくとも次の要素に依存します。

  1. ドキュメントに保存されているデータ ソース情報がまだ有効かどうか (つまり、元の .xlsm がまだ残っているか、正しいシート名がそこに残っているかなど)
  2. Word 文書を手動で開いているか、OLE オートメーションを介して開いているか
  3. ここで説明されている SQLSecurityCheck レジストリ設定がデフォルト状態 (つまり、存在しないか 1 に設定) であるか、0 に設定されているか
  4. OLE オートメーションの場合、Word Applicaiotn オブジェクトの DisplayAlerts プロパティが wdAlertsAll または wdAlertsNone に設定されているかどうか

大ざっぱに言えば...

Word が検索しようとするデータ ソースがまだ存在する場合、1 つを除いてすべての場合に、ユーザーがセキュリティ プロンプトに対して [はい] と応答する限り、Word は接続を確立します。例外として、SQLSecurityCheck が指定されていないか 1 に設定されている場合 (つまり、既定値)、ドキュメントが OLE オートメーションを介して開かれ、DisplayAlerts が wdAlertsNone に設定されている場合、ダイアログは表示されず、データ ソースは開かれません。

Word が検索しようとしているデータ ソースが存在しない場合 (たとえば、移動されている場合)、1 つを除いてすべての場合に、エラー ダイアログが表示されます。そのダイアログへの応答が有効なデータ ソースを識別することである場合、ドキュメントには新しいデータ ソースが含まれます。ここでも例外は、SQLSecurityCheck が既定値で、文書が OLE 経由で開かれ、DisplayAlerts が wdAlertsNone に設定されている場合です。その場合、ダイアログは表示されず、データ ソースは開かれません。

開発者にとっての問題は、SQLSecurityCheck 値が 0 に変更された場合 (通常、ユーザーが常にセキュリティ チェックの質問に答える必要がないようにするため)、データ ソースが存在しないときにユーザー ダイアログがポップアップするのを回避できないことです。

ただし、ユーザーがデータ ソースに接続するときに Word が表示するダイアログ ボックスを表示して応答できる限り、(a) データ ソースが添付されたドキュメントが開かれるか、(b) のいずれかになります。データ ソースが添付されていない開いているドキュメント (または、おそらく、ユーザーが Word プロセスなどを終了しようとするなど、他の混乱)。これら 2 つのいずれかが発生した場合は、Document_Open コードを実行する必要があり、Word は必要なデータ ソースに接続する必要があります。(ただし、Word が既に別の方法で接続されているときに、テキスト ファイルなどの既存のデータ ソースに接続しようとすると、エラーが発生する場合があります。)

ちなみに、

  • Excel ワークブックへの OLE DB 接続の場合、OpenDataSOURCE 呼び出しで Name と SQLStatement 以外のすべてのパラメーターを省略できるはずです。
  • AFAICS 現時点では、Word が Document_Open の実行時までに既存のデータ ソースを削除していない場合、コードは常に既存のデータ ソースの名前を報告します。新しい名前を表示するには、割り当てを OpenDataSource 呼び出しの下の strDataSource に移動する必要があります。しかし、おそらく私はそこにポイントを逃した!
于 2013-11-06T01:40:14.443 に答える