【Word VBA】花菱模様描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
'
Public Sub 花菱模様描画マクロ()
    Const FLDILEFT = 80          '描画開始位置X
    Const FLDITOPP = 90         '      Y
    '
    Const FLDICOLS = 5          '横/描画数
    Const FLDIROWS = 3        '縦/描画数
    '
    Const FLDILGRD = 24       '花のサイズ
    Const FLDISMRD = 6        '花びらのサイズ
    Const FLDICNRD = 6        'めしべのサイズ
    Const FLDICNLN = 9        '十字の線の長さ
    '
    Const FLDIVPIT = (FLDILGRD + FLDISMRD) * 2     '横-間隔
    Const FLDIHPIT = FLDIVPIT                          '縦-間隔
    Const FLDILNWE = 1.5   '線の太さ
    '---------------------------------------------------------------------------
    Dim Ip As Integer, Jp As Integer
    Dim Kp As Integer, Lp As Integer
    Dim intDxp As Integer, intDyp As Integer
    Dim intExp(2) As Integer, intEyp(2) As Integer
    Dim intRln As Integer, lngCol(1) As Long
    '
    intRln = FLDILGRD / 2 - FLDISMRD / Sqr(2)
    lngCol(0) = RGB(220, 20, 60) '塗りつぶし色
    lngCol(1) = vbWhite '線色
    '
    For Jp = 0 To FLDIROWS - 1
        intDyp = FLDITOPP + FLDIHPIT * Jp + FLDIHPIT / 2
        For Ip = 0 To FLDICOLS - 1
            intDxp = FLDILEFT + FLDIVPIT * Ip + FLDIVPIT / 2
            'ひし形(塗りつぶし)描画
            With ActiveDocument.Shapes.AddShape( _
                 msoShapeDiamond, _
                 intDxp - FLDILGRD, intDyp - FLDILGRD, _
                 FLDILGRD * 2, FLDILGRD * 2)
                .Fill.Visible = msoTrue
                .Fill.ForeColor.RGB = lngCol(0)
                .Line.Visible = msoFalse
            End With
            '*花びら部分描画
            For Kp = 1 To 4
                intExp(0) = intDxp _
                + FLDILGRD * Choose(Kp, 0, 1, 0, -1)
                intEyp(0) = intDyp _
                + FLDILGRD * Choose(Kp, -1, 0, 1, 0)
                intExp(1) = intExp(0) _
                + intRln * Choose(Kp, -1, -1, 1, 1)
                intEyp(1) = intEyp(0) _
                + intRln * Choose(Kp, 1, -1, -1, 1)
                intExp(2) = intExp(0) _
                + intRln * Choose(Kp, 1, -1, -1, 1)
                intEyp(2) = intEyp(0) _
                + intRln * Choose(Kp, 1, 1, -1, -1)
                For Lp = 0 To 2
                    '*円形描画
                    With ActiveDocument.Shapes.AddShape( _
                         msoShapeOval, _
                        intExp(Lp) - FLDISMRD, _
                        intEyp(Lp) - FLDISMRD, _
                        FLDISMRD * 2, FLDISMRD * 2)
                       .Fill.Visible = msoTrue
                       .Fill.ForeColor.RGB = lngCol(0)
                       .Line.Visible = msoFalse
                    End With
                Next Lp
               ''*対角線描画
                With ActiveDocument.Shapes.AddConnector( _
                     msoConnectorStraight, _
                     intDxp, intDyp, _
                     intDxp + (FLDILGRD / 2) * _
                     Choose(Kp, -1, 1, 1, -1), _
                     intDyp + (FLDILGRD / 2) * _
                     Choose(Kp, -1, -1, 1, 1)).Line
                    .Visible = msoTrue
                    .ForeColor.RGB = lngCol(1)
                    .Weight = FLDILNWE
                End With
                '*中心十字線描画
                With ActiveDocument.Shapes.AddConnector( _
                     msoConnectorStraight, _
                     intDxp, intDyp, _
                     intDxp + FLDICNLN * _
                     Choose(Kp, -1, 0, 1, 0), _
                     intDyp + FLDICNLN * _
                     Choose(Kp, 0, -1, 0, 1)).Line
                    .Visible = msoTrue
                    .ForeColor.RGB = lngCol(1)
                    .Weight = FLDILNWE
                End With
            Next Kp
            '*中心部分円形描画
            With ActiveDocument.Shapes.AddShape( _
                 msoShapeOval, _
                 intDxp - FLDICNRD, intDyp - FLDICNRD, _
                 FLDICNRD * 2, FLDICNRD * 2)
                .Fill.Visible = msoTrue
                .Fill.ForeColor.RGB = lngCol(0)
                .Line.Visible = msoTrue
                .Line.ForeColor.RGB = lngCol(1)
               .Line.Weight = FLDILNWE
           End With
        Next Ip
    Next Jp
End Sub

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