- ベストアンサー
AccessからWordの差し込み印刷文書を印刷するVBAについて教えてください
- Access初心者のため、AccessからWordの差し込み印刷文書を印刷するVBAについて教えてください。
- 使用バージョンは、Access・Wordともに2007です。
- Accessのクエリー/テーブルをWord文書に差し込み、Accessから起動してその差し込み文書を印刷したいが、うまくいかない状況です。プロシジャを作成し、予めWordを起動してから実行すると正常に印刷されますが、Wordを起動せずに実行すると、メッセージが表示されずに不具合が発生します。プロシジャの正しい使用方法についてアドバイスをお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
変数名がダブっていました。 下記*行変更下さい。 Private Sub InsertDoc(MyDataName As String) 'MyDataNameは、元データのテーブル又はクエリー名 * Dim myWrd As Object 'オリジナル文書をセット Dim myTMP As Object 'テンプレート文書用 Dim MyName As String 'テンプレート文書名 Dim myLooP As Long Dim LineNum As Integer '差込印刷のオリジナル文書 Const myFileP As String = "C:\差込印刷.doc" 'テンプレートを保存するフォルダパス(+\) Const myPath As String = "C:\" LineNum = DCount("*", MyDataName) 'テーブル又はクエリーのレコード数を取得 *
その他の回答 (2)
- psgrade
- ベストアンサー率86% (19/22)
私も同じことを行おうとして、質問を考えていました。 imogasiさんの回答は、大変参考となりました。ありがとうございました。 リンク先のコードから下記のような形にしてみました。 差し込み実行後、作成されたワード文書を印刷するとともに、ワードファイルとして保存します。印刷は確認していませんが、ファイルは問題なく作成できました。 このような回答の仕方がルール違反でしたら、お詫びします。 Private Sub InsertDoc(MyName As String) 'MyNameは、元データのテーブル又はクエリー名 Dim myWrd As Object 'オリジナル文書をセット Dim myTMP As Object 'テンプレート文書用 Dim MyName As String 'テンプレート文書名 Dim myLooP As Long Dim LineNum As Integer '差込印刷のオリジナル文書 Const myFileP As String = "C:\差込印刷.doc" 'テンプレートを保存するフォルダパス(+\) Const myPath As String = "C:\" LineNum = DCount("*", MyName) 'テーブル又はクエリーのレコード数を取得 If LineNum = 0 Then MsgBox "レコードがありません!", vbExclamation + vbOKOnly, "確認" Exit Sub End If 'ワードオブジェクトの取得 Set myWrd = GetObject(myFileP) Set myTMP = GetObject(Class:="Word.Application") '差込 For myLooP = 1 To LineNum 'レコード数だけループする With myWrd With .MailMerge .Destination = 0 .SuppressBlankLines = True With .DataSource .FirstRecord = myLooP .LastRecord = myLooP End With .Execute Pause:=False End With '文書の印刷、保存 MyName = myPath & "差込済み文書" & Format(Date, "yymmdd") & "_" & myLooP & ".doc" myTMP.Application.ActiveDocument.PrintOut myTMP.Application.ActiveDocument.SaveAs FileName:=MyName, FileFormat:=wdFormatDocument myTMP.Application.ActiveDocument.Close End With Next myWrd.Close Set myTMP = Nothing Set myWrd = Nothing MsgBox LineNum & "個のファイル" & myPath & "差込済み文書" & Format(Date, "yymmdd") & "_1 - " & _ LineNum & ".doc が作成されました。" End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
初心者と称して、こんなことをやろうとするのは無謀。 ワードの世界にプログラムで入るなら、ワードのVBAの知識が必要。この情報はWEBでも少ない(解説書では皆無?)、し、経験者も少ないと思う。 難しいことをやりたいなら、自分で苦労して勉強する(期間も当然かかる)のが筋。出来なければ、あきらめること。 ーー ワードの差込印刷のコードはどうなるか それをアクセスの世界からWord.Applicationの世界に入ったらどう修正が必要か の情報を探すこと。 ーー 根本的に アクセスの世界で アクセスデータークエリで選択・順序ーレポート印刷 ではいけないのか ーー 質問は (1)アクセス起動ーワードに変化部分データー地はワード文書ー機能はワードのMailmerge か (2)アクセス起動ーアクセスに変化部分データー地はワード文書ー機能はMailmerge か (2)らしいね。 だったら (3)前記 アクセスの世界で アクセスデータークエリで選択・順序ーレポート印刷 の方が勉強が易しいと思う。 他ソフトと連携など先の先に勉強することだと思う。 こんな複雑なことをやる必要があるのは、質問者はソフト業界の社員かな。それなら先輩にそういう経験者がいるのではと思うのでその方に聞いたら。そういうパターンの質問ならここに質問することでは無い。個人なら他ソフトにまたがるような仕組みを複雑にしない選択を出来るだろうから、すること。 === WEBでは、参考になりそうなのは http://www.accessclub.jp/bbs5/0017/vba4974.html ぐらいかな。 Googleで「ワード 差込印刷 VBA」で照会しましたか。 エクセルとの関連が多いようだが、丁寧に当たってみては。
お礼
アドバイスありがとうございます。 無謀ですか・・・。初心者ゆえのことです。 私はソフト業界の社員ではありません。諸事情により業務でいきなりAccessをする事になりました。 運用上の背景もありWordとの連携印刷を考えました。ネットで調べたらWordを印刷するサンプルが掲載されていたので、使ってみましたが知り合いに誰も聞く人がいないのでここで質問した次第です。 仰せの通り、別の方法も模索しつつ苦労してみます。
お礼
ありがとうございます。 たいへん参考になりました。試行錯誤しましたがおかげさまで、うまくいきました。 お礼がおそくなりもうしわけございませんでした。