【Word VBA】唐草文様描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
Public Sub 唐草文様描画マクロ()
    Const ARACANLF = 80    'キャンバス位置X
    Const ARACANTP = 100  '                     Y
    Const ARACANWD = 280  'キャンバス幅
    Const ARACANHT = 200  'キャンバス高さ
    '
    Const ARABZMAG = 0.15     'ベジェ曲線倍率
    '
    Const ARABZLFT = 20  'ベジェ曲線描画開始位置X
    Const ARABZTOP = 25  '           Y
    '
    Const ARABZWID = 30      'ベジェ曲線描画幅
    Const ARABZHEI = 25       'ベジェ曲線描画高さ
    '
    Const ARABROWS = 7  'ベジェ曲線描画行
    Const ARABCOLS = 9  'ベジェ曲線描画桁
    Const ARABZWEI = 3  'ベジェ曲線描画太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim sngBas(6, 1) As Single, sngDat(6, 1) As Single
    Dim varBez As Variant
    Dim shpCan As Shape
    '
    '*ベジェ曲線元データ
    varBez = Array(-2, -3, 65, 62, 106, -70, 1, -86, -97, -79,  _
                         -123, 45, -2, 88)
    '*ベジェ曲線元データSET
    For Kp = LBound(sngBas, 1) To UBound(sngBas, 1)
        sngBas(Kp, 0) = CSng(varBez(Kp * 2 + 0)) * ARABZMAG
        sngBas(Kp, 1) = CSng(varBez(Kp * 2 + 1)) * ARABZMAG
    Next Kp
    '*キャンバス設定
    Set shpCan = _
    ActiveDocument.Shapes.AddCanvas( _
                   ARACANLF, ARACANTP, ARACANWD, ARACANHT)
    shpCan.Fill.Visible = msoTrue
    shpCan.Fill.ForeColor = RGB(0, 128, 0)
    '*ベジェ曲線描画
    For Jp = 0 To ARABROWS - 1
        intDyp = ARABZTOP + ARABZHEI * Jp
        For Ip = 0 To ARABCOLS - 1
            intDxp = ARABZLFT + ARABZWID * Ip
            For Kp = LBound(sngBas, 1) To UBound(sngBas, 1)
                sngDat(Kp, 0) = sngBas(Kp, 0) + intDxp
                sngDat(Kp, 1) = sngBas(Kp, 1) + intDyp
            Next Kp
            With shpCan.CanvasItems.AddCurve(sngDat)
                 .Line.ForeColor.RGB = vbWhite
                 .Line.Weight = ARABZWEI
             End With
       Next Ip
    Next Jp
     '*キャンバス解放
    Set shpCan = Nothing
End Sub


《蛇足》
複数のベジェ曲線のパターンを使えば、もう少し本来の唐草文様になるだろうが、夏なので(?)、涼しげになるようシンプルに作成してみた。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す