まずはWordでマクロ記録をしてみたんですが、差し込み印刷関係が記録されないので、この辺のメソッドやらプロパティを調べるのはもう止めました。だってもっと簡単な方法あるから。
- データソースと差し込み印刷設定済みWordファイルを固定ディレクトリに配置しておく
- データソースに表示データを上書き
- Wordファイルを呼び出す
処理としてはこれだけ。ファイルを生成しないので設定あるいはメンテナンスのひと手間がありますが、例えば次の担当者が使いたいと言った時の敷居が低いのもこれかなと。
まあこれだけ書けばコード書ける人には説明不要でしょうけど、一応続き以降にサンプルコードを載せておきます。
※マクロ実行ファイル(Excel)、差し込み用データソース(TXT)、差し込み実行ファイル(Word)はそれぞれ同一ディレクトリ内に配置しておきます。
データ掃き出し処理がこちら。
====
Sub Save_Address()
On Error GoTo Err_
Const f As String = "¥作業用ファイル.txt"
Dim myPath As String
Dim buf As String 'データの入れ物
Dim r As Integer, c As Integer '行/列用カウンタ
Dim EndRow As Long '最終行
myPath = ActiveWorkbook.Path '作業フォルダのディレクトリ取得
With ActiveSheet
EndRow = Cells(65536,1).End(xlUp).Row
For r = 1 To EndRow
If Cells(r,1) <> "" Then
For c = 1 To 5
buf = buf & .Cells(r,c)
If c < 5 Then buf = buf & vbTab '※1
Next
buf = buf & vbCrLf
End If
Next
End With
Open myPath & f For Output As #1 ’上書きモードで開く
Print #1, buf
End_l: Close #1
Exit Sub
Err_: MsgBox Err.Number & ":" & Err.Description
Resume End_
End Sub
====
で、このプロシージャとWordを順に呼び出すのがこちら。
==== Sub Call_DataAndLabels() On Error Goto Err2_ Dim ret As Integer '戻り値判定用 Call Save_Address
With CreateObject("Wscript.Shell")
ret = .Run("C:¥Hoge¥差し込みラベル.docx", 5, True) 'Word呼出(パラメータは"おまじない")
If ret <> 0 Then GoTo Err2_ '戻り値が0以外はエラー
End With
MsgBox "処理が完了しました", vbOKOnly
End2_: Exit Sub
Err2_: MsgBox Err.Number & ":" & Err.Desctription
GoTo End2_
End Sub
====
こんなところです。TXTファイルを使っているのは、CSVの場合データに桁区切りカンマ(',')があるとフィールド数を正しく認識できないからです。でタブ区切りにするため「vbTab」なんてものを使ってる。便利ですねえ…(遠い目) それと最後のフィールドの時は改行コードを入れています。これやらないと1行のテキストになっちゃうので。
あとはWSHで呼び出したWordが正常終了したらメッセージを表示しています。親切でしょ(要らなきゃ消してね)。
0 件のコメント:
コメントを投稿