業務上、オフィスのアプリでは、エクセルをメインに仕事をこなしてきました。
なので、VBA(マクロ)を駆使するには、このエクセルが中心だったのも事実。
ですが、今回、製品保証書をエクセルデータを使って印刷するリクエストです。
従来は、保証書の用紙にドットインパクトのプリンターで、印字してきました。
三枚つづりの用紙に印刷されますが、これをワードを使って複合機で印刷する。
こんな目論見から、ワードを使って保証書のデザインを背景画像に設定します。
印字する箇所には、ワードでも"TextBox"のシェイプをあてがってデータ表示。
生産管理システムから引っ張ったデータを転用しますが、サンプルは完成です。
ワードのマクロにはてこずりましたが、”キャンバス”というシェイプも新発見。
ネットでアイデアを探しているうちに見つけたものですが、”Chart”に近いな。
エクセルではグラフを書くときに、このチャートオブジェクトをよく使います。
一方、ワードではグラフの描画が求められているのではなくて、挿絵みたいだ。
DTPで文章をタイプしていて、図画を挟み込むのに確保する領域なのだろうな。
それで、このキャンバスにシェイプの図形を紐づけして、作成するのがミソね。
図形はキャンバスの領域内しか移動できないので、図形を結合する必要もない。
便利なのかもしれませんが、自分としては活用できるアイデアが浮かびません。
というわけで、いくつかサンプルのマクロ構文を挙げておきますのでご覧あれ。
ネットで詳しく紹介している構文が非常に少なくとも、Shapeの使い方の延長線上にあると見ればよく、後はコツコツと解法のコードを作るしかないと考えるのでした。
★サンプルコード
Sub AddCnvs() ’単純にキャンバスだけ作る
Dim shpCanvas As Shape
Set shpCanvas = ActiveDocument.Shapes.AddCanvas( _
Left:=10, Top:=10, Width:=700, Height:=700)
shpCanvas.WrapFormat.Type = wdWrapInline
End Sub
Sub AddTxtbxOnCnvs() 'キャンバス作成後、テキストボックス(3)配置
Dim shp As Shape, i As Integer
For Each shp In ActiveDocument.Shapes
If shp.Type = msoCanvas And shp.CanvasItems.Count = 0 Then
For i = 0 To 2
shp.CanvasItems.AddTextbox _
Orientation:=msoTextOrientationHorizontal, _
Left:=1 + i * 15, Top:=1 + i * 15, Width:=100, Height:=50
Next i ’見やすいように位置をずらして作成
End If
Next shp
End Sub
Sub CnvsItmNmePrnt() 'キャンバス名、テキストボックス名と位置の印字
Dim shp As Shape, i As Integer
For Each shp In ActiveDocument.Shapes
If shp.Type = msoCanvas And shp.CanvasItems.Count > 0 Then
For i = 1 To shp.CanvasItems.Count
Debug.Print "Canvas : " & shp.Name
Debug.Print "Name : " & shp.CanvasItems(i).Name
Debug.Print "Top : " & shp.CanvasItems(i).Top
Debug.Print "Left : " & shp.CanvasItems(i).Left
Debug.Print "Width : " & shp.CanvasItems(i).Width
Debug.Print "Height : " & shp.CanvasItems(i).Height
Next i ’テキストボックスのID数値が10桁でびっくり
End If
Next shp
End Sub