2025年4月26日土曜日

活用できるのかどうかわからないまま、いずれ使うかもしれないと思ってコードを書いた ー msoCanvas(VBAマクロ)

      
業務上、オフィスのアプリでは、エクセルをメインに仕事をこなしてきました。
なので、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



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿