ExcelVBAでWordの制御③特定文字列の置き換え。
WordをExcelから制御するために開いてオブジェクト変数に放り込む。手始めに表を制御してみる。
chemiphys.hateblo.jp
強力な味方テキストボックスを制御してみる。Powerpointと全く同じっぽい
chemiphys.hateblo.jp
WordVBAを使ってはいますが,元データをExcelで作ってて,差し込み先をWordにしたいというシリーズです。
さて,表とテキストボックスがいじれたので,けっこういろいろいけますが,やはりそれだけでは自由度はまだ低い。
Rangeオブジェクトのことを調べました。
Characters
Words
Sentences
Paragraphs
と,いろいろありますが,目的の場所をどう表そうか悩みます。何番目かわからないし,ずれたらどうするの,という話。
やっぱりWordは検索,置換で勝負するしかないよな,とそちらを探す。
Rangeオブジェクトの説明を見てたら,文中にFindオブジェクトというのがあります。どう見てもこれがわたしの求めるものっぽい。
https://msdn.microsoft.com/ja-jp/library/office/ff839118.aspx
Contentってのがまだよくわからないけど,ドキュメントの子で,文章部分を指す言葉なのかな??
まぁやってみよう。
'すでにtargetdocumentにWordのDocumentオブジェクトが入っている前提でのコードです。 'Wordのイミディエイトウィンドウでいきなり試すなら 'activedocument.Content.Find.Execute ~みたいな書き出しになります。 targetdocument.Content.Find.Execute findtext:="◇◇◇◇",ReplaceWith:="書き変わるかな!?"
書き変わってますね!
差し込み先フィールドにあたるところに,一意にそのフレーズを指定できるようなものを設定しておく。
例えば 【差し込み先1】 とか【差し込み先2】とかしておけばいい。
そして,さっきのFindを使えば楽勝で目的の文字列に変えれますね。
表はセル単位で指定できて,かきなおせる。
テキストボックスは名前で指定してその中身をかきなおせる。
文中の文字列については,差し込み先の部分に仕掛けを用意しておけば,普通にやれる。
どうもWordを呼び起こす時に時間がちょっとかかるみたいですが,オブジェクトを一度起こしてやれば,おなじテンプレートでやるのなら,
必要な分を置き換えて印刷 必要な分を置き換えて印刷とか,きっと名前を変えて保存を繰り返すことも可能だと思われる。
さすがに明示的に閉じてやったりしないとバックグラウンドに隠れたWordが山のようにいる状態がありうることが想像されますので,そこはちょっと気を付けたいと思います。
なにはともあれ,もう差し込み印刷の機能を実現できると考えて差し支えない気がする。
ほんと,VBAの環境はよくできているなぁ。こんな簡単に実現できそうだとは。。
早速明日,試せるな。wordの差し込み印刷は便利は便利だけど,フィールドを配置したりウィザードとちょこちょこ会話したり面倒なので,VBAで事足りるならそれに越したことはナイデス。