[[20190710153437]] 『指定したレコードのみExcelからWordへ差込をするV』(VBA初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定したレコードのみExcelからWordへ差込をするVBA』(VBA初心者)

指定したレコードのみExcelからWordへ差込をするVBAを作成したいと思っています。

自分なりに調べてみたのですが、「全データ」をレコード毎に保存or印刷するヒントなどは見つかったのですが、「指定したレコードのみ」というのはどうしたらよいのでしょうか。

どのようにしたらよいか、ご教示ください。

条件
(1)Excel(A.xlsx)と差込先のWord(B.docx)は同フォルダに保管

(2)Excelに差込をするレコードを指定するセルを設け、そのセルに記入したレコード番号のデータの差込を実行する

(3)差込されたWordは元のファイル名に「_(アンダーバー)」と「レコード番号」をつけて「B_レコード番号}.docx」として同フォルダもしくはデスクトップに保存

どうぞよろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 差込って、ワード文書をエクセルのデータを使って印刷する機能じゃ・・・。
 だから、主はワードであって、エクセルではないと思うけど??
(BJ) 2019/07/10(水) 18:17

以前似たようなことをしたことがありますが、うろ覚えですし、手元にWordがないので試せませんが、ExcelVBAでWordを操作して希望される動作は可能(ただし、WordVBAを多少勉強しないといけない)だったかとおもいます。

ただ、差し込み印刷をする元データはWordが制御できるように、Excelも含めて、他アプリで開いていない状態にしなきゃいけないという制限があったとおもいます。

なので、私の場合
【事前準備】

 (A)Excelで元データを別名保存して複製をつくり、Wordが使う用のファイルを作っておく
 (B)Wordで(A)のファイルを使って差し込み印刷の設定を行う

【マクロ】

 (1)必要に応じ(A)を更新する。(開きっぱなしにしないこと)
 (2)(B)のドキュメントを開く
     このとき、(A)が読み込まれる過程で確認メッセージがでてきて、
     手作業で確認しないとOLE〜待機します的なメッセージが出てきたような。。
 (3)Excel側で対象のレコード番号を調べて、Wordで当該レコードの差し込みを実行
 (4)ドキュメントを「名前を付けて保存」する
 (5)(3)〜(4)を繰り返し
 (6)ドキュメントを閉じる。

みたいな感じにしたような気がします。

また、BJさんがおっしゃるように、差し込み印刷(レコード番号の指定)、ドキュメントの保存はWord側の機能なので、Wordのマクロの記録を使って調べたように記憶しています。

そして、ExcelVBA側でWordを参照設定しておくと、WordVBAをそのまま移植しても(辻褄が合えば)使えますから、そのようにしたような・・・・

自分がやったのが4〜5年前なので、もう忘れちゃいましたが、なんかのヒントになれば・・・

(もこな2) 2019/07/11(木) 02:37


>そのセルに記入したレコード番号のデータの差込を実行する

1回の実行で1レコードということなら、差し込み印刷を使わないで

代わりにWord文書にブックマークを挿入しておき
こんな感じのマクロにするのが簡単だと思います。

1)Word文書を開く
2)Match関数で、対象レコードが、エクセルシートの何行目にあるかを検索
3)その行の各フィールドを、Word文書内のブックマーク位置に挿入を繰り返す
4)Word文書を名前を付けて保存

(マナ) 2019/07/11(木) 21:07


WORDのIFフィールドで条件を指定して差込じゃだめですかね
http://office-qa.com/Word/wd474.htm
(りりり) 2019/07/12(金) 16:14

たたき台です。
 Option Explicit

 Sub test()
    Dim wd As Object
    Dim doc As Object
    Dim fn As String
    Dim r As Range
    Const wdFormatXMLDocument As Long = 12
    Const 文書名 = "B"

    fn = ThisWorkbook.Path & "\" & 文書名 & ".docx"

    Set wd = CreateObject("word.application")
    wd.Visible = True

    Set r = ActiveCell.EntireRow

    Set doc = wd.Documents.Add(fn)
    doc.bookmarks("BM1").Range.Text = r.Cells(2).Value
    doc.bookmarks("BM2").Range.Text = r.Cells(3).Value

    fn = ThisWorkbook.Path & "\" & 文書名 & "_" & r.Cells(1).Value & ".docx"
    doc.saveas2 fn, wdFormatXMLDocument
    doc.Close
    wd.Quit

    Set doc = Nothing
    Set wd = Nothing

 End Sub

(マナ) 2019/07/13(土) 11:03


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.