WordVBA つづき
前回の続きです。Wordの1ページ内での制御は簡単ですが,複数のページにまたがる場合は大変面倒でした。
今のところはまだ限定的ですが,練習を繰り返して力をつけていきたいものです。
どんな文書でもいいので, "元"という名前の図形をつくって,下記のコードを試します。後で使うために Excelで "データ"というブックを開いている前提での話となります。
Excelとの連携の方法にもいろいろあるんですが,わたしの職場のように自動暗号化される環境ではWorkbooks.Open等が使えない場合がありますので,そういうときの場合のためにすでにWordとExcelで
使う文書を開いた状態で使う,という状況を想定
Sub test() Dim EXApp As Excel.Application, WB As Excel.Workbook Set EXApp = GetObject(, "Excel.Application") Set WB = EXApp.Workbooks("データ.xlsx") Dim NewDoc As Document Set NewDoc = Documents.Add(Template:=ThisDocument.FullName) Dim Shp(1 To 6) As Shape, NameArray As Variant NameArray = Array("いち", "に", "さん", "よん", "ご", "ろく") NewDoc.Shapes("元").Select: Selection.Copy NewDoc.Characters.Last.InsertBreak wdPageBreak NewDoc.Paragraphs(1).Range.Paste NewDoc.Paragraphs(2).Range.Paste Set Shp(1) = NewDoc.Paragraphs(1).Range.ShapeRange(1) Shp(1).Name = "Shp1" Dim i As Long For i = 2 To 3 Shp(1).Select: Selection.Copy NewDoc.Paragraphs(1).Range.Paste Set Shp(i) = NewDoc.Paragraphs(1).Range.ShapeRange(i) Shp(i).Name = "Shp" & i Shp(i).Left = Shp(i - 1).Left + 200 Next Set Shp(4) = NewDoc.Paragraphs(2).Range.ShapeRange(1) Shp(4).Name = "Shp4" NewDoc.Paragraphs(2).Range.Select For i = 5 To 6 Shp(4).Select: Selection.Copy NewDoc.Paragraphs(2).Range.Paste Set Shp(i) = NewDoc.Paragraphs(2).Range.ShapeRange(i - 3) Shp(i).Name = "Shp" & i Shp(i).Left = Shp(i - 1).Left + 200 Next End Sub
もっとスマートに書きたいものですが,Duplicateでやると,パラグラフ(2)での処理に失敗してしまいましたので,嫌いなコピペでの操作です。
できればいいんだまずは(;´▽`A``
実行すると,"元"の図形を1ページ目に3つ 2ページ目に3つつくります。
それぞれShp1~Shp6という名前に変更していて,Shp(i)という変数に収納しています。
なので,前回のコードをあとは絡めれば,Excelのデータからそれぞれの図にデータを流し込んでいけることになる。
1つ一生懸命きれいに作り上げればそれをひな型にどんどん増やせるよ,というコードにしているつもりです。
いろんなことを考えているのでNameArrayというのも今は使っていませんが準備しています。For Nextで回す時になにかつかえるように,と。
あとは,Documents.Add でテンプレートとして使う,という書き方をするのも気に入ってます。イイ書き方ですね。調べているときにどこかで見させてもらったものを流用しています。
Excelでも同じような書き方あるのかなぁ。。
少しずつWordVBAを自分好みに使うよう遊んでいるところです。