【Word VBA】紗綾形文様描画マクロ▽ソースコード

記事
IT・テクノロジー
HC220614A.png

Option Explicit
Option Base 0
Public Sub 紗綾形文様描画マクロ()
    Const SAYALEFT = 100            '描画開始位置 X
    Const SAYATOPP = 80             '  Y
    Const SAYAPOLY = 0.1            'ポリライン描画倍率
    '
    Const SAYACOLS = 5              '描画数-横
    Const SAYAROWS = 4             '描画数-縦
    '
    Const SAYALNWE = 2             '描画線の太さ
    '
    Const POLTOPID = 22            'ポリラインデータID
    Const POLLEFID = 7              '(連結描画用)
    Const POLLUPID = 25
    Const POLRUPID = 18
    Const POLLDPID = 4
    Const POLRDPID = 11
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer, Kp As Integer
    Dim varPoly As Variant
    Dim sngPBas() As Single, sngPDat() As Single
    Dim sngXps As Single, sngYps As Single
    Dim sngXpw(SAYAROWS) As Single, sngYpw(SAYAROWS) As Single
    Dim lngCol As Long
    '
   '*ポリラインベースデータ
    varPoly = Array(-6, -37, -132, 88, -176, 43, -145, 12, -189, -32, _
    -220, -1, -264, -45, -296, -13, 13, 296, 45, 264, 1, 220, 32, 189, _
    -12, 145, -43, 176, -88, 132, 132, -88, 176, -43, 145, -12, 189, _
     32,220, 1, 264, 45, 296, 13, -13, -296, -45, -264, -1, -220, -32, _
    -189,12, -145, 43, -176, 88, -132, -6, -37)
    'ポリラインベースデータ設定
    ReDim sngPBas((UBound(varPoly, 1) - 1) \ 2, 1)
    ReDim sngPDat((UBound(varPoly, 1) - 1) \ 2, 1)
    For Kp = LBound(varPoly, 1) To UBound(varPoly, 1) Step 2
        sngPBas(Kp \ 2, 0) = CSng(varPoly(Kp + 0) * SAYAPOLY)
        sngPBas(Kp \ 2, 1) = CSng(varPoly(Kp + 1) * SAYAPOLY)
    Next Kp
'
    lngCol = RGB(30, 144, 255) '←描画色
    '*描画開始位置
    sngXps = SAYALEFT - sngPBas(POLLEFID, 0)  _
                                 + sngPBas(POLLUPID, 0)
    sngYps = SAYATOPP - sngPBas(POLTOPID, 1)  _
                                 + sngPBas(POLLUPID, 1)
    '*左一列描画
    For Ip = 0 To SAYAROWS - 1
        For Kp = LBound(sngPBas, 1) To UBound(sngPBas, 1)
            sngPDat(Kp, 0) = sngPBas(Kp, 0) _
                                   + (sngXps - sngPBas(POLLUPID, 0))
            sngPDat(Kp, 1) = sngPBas(Kp, 1)  _
                                   + (sngYps - sngPBas(POLLUPID, 1))
        Next Kp
        GoSub DRAW_POLYLINE
        sngXps = sngPDat(POLRDPID, 0)
        sngYps = sngPDat(POLRDPID, 1)
        '*左端描画位置記憶
        sngXpw(Ip) = sngPDat(POLRUPID, 0)
        sngYpw(Ip) = sngPDat(POLRUPID, 1)
    Next Ip
    '*左一列を起点に全体描画
    For Jp = 0 To SAYAROWS - 1
        sngXps = sngXpw(Jp): sngYps = sngYpw(Jp)
        For Ip = 0 To SAYACOLS - 2
            For Kp = LBound(sngPBas, 1) To UBound(sngPBas, 1)
                sngPDat(Kp, 0) = sngPBas(Kp, 0)  _
                                      + (sngXps - sngPBas(POLLDPID, 0))
                sngPDat(Kp, 1) = sngPBas(Kp, 1)  _
                                      + (sngYps - sngPBas(POLLDPID, 1))
            Next Kp
            GoSub DRAW_POLYLINE
           sngXps = sngPDat(POLRUPID, 0)
           sngYps = sngPDat(POLRUPID, 1)
        Next Ip
    Next Jp
    Exit Sub
   '==========================================
DRAW_POLYLINE: '*ポリライン描画処理
   With ActiveDocument.Shapes.AddPolyline(sngPDat)
        .Fill.Visible = msoFalse
        .Line.Visible = msoTrue
        .Line.ForeColor = lngCol '←線色
        .Line.Weight = SAYALNWE '←線の太さ
   End With
   Return
End Sub

蛇足 
 ポリラインデータを作成・編集するため、VB.NET2019 でプログラムを作って、そのデータを使用しています。

HC220614B.png


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら