インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

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``

f:id:chemiphys:20180314221337p:plain
実行すると,"元"の図形を1ページ目に3つ 2ページ目に3つつくります。
それぞれShp1~Shp6という名前に変更していて,Shp(i)という変数に収納しています。

なので,前回のコードをあとは絡めれば,Excelのデータからそれぞれの図にデータを流し込んでいけることになる。
1つ一生懸命きれいに作り上げればそれをひな型にどんどん増やせるよ,というコードにしているつもりです。

いろんなことを考えているのでNameArrayというのも今は使っていませんが準備しています。For Nextで回す時になにかつかえるように,と。

あとは,Documents.Add でテンプレートとして使う,という書き方をするのも気に入ってます。イイ書き方ですね。調べているときにどこかで見させてもらったものを流用しています。

Excelでも同じような書き方あるのかなぁ。。

少しずつWordVBAを自分好みに使うよう遊んでいるところです。