【Word VBA】ペイズリー柄描画マクロ▽ソースコード

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

Option Explicit
Option Base 0
'
Const PAISLEFT = -80       '描画開始位置X
Const PAISTOPP = 10      '      Y
'
Const PAISCOLS = 5          '横/描画数
Const PAISROWS = 3       '縦/描画数
'
Const PAISVPIT = 45                 '横/描画間隔
Const PAISHPIT = 60                 '縦/描画間隔
Const PAISBZMG = 0.5               '描画倍率
'
Const PAISLNWT = 1.5         '線の太さ
Const PAISLNCL = &H696969   '線、塗りつぶしの色
'-------------------------------------------------------------------------------
Dim varShaNa(0 To 4) As Variant 'グループ化のための名前格納エリア
'
'
Public Sub ペイズリー柄描画マクロ() 
    Dim Ip As Integer, Jp As Integer
    Dim intDxp As Integer, intDyp As Integer, varBezi As Variant
    Dim sngBBs1() As Single, sngBBs2() As Single, sngBBs3() As Single
    Dim sngBBs4() As Single, sngBBs5() As Single
     '
    '*ベジェ曲線データ設定(1)
    varBezi = Array(348.18, 204.57, 348.84, 205.69, 353.43, 204.37, 354.78, 205.55, 356.13, 206.72, 356.97, 210.04, 356.3, 211.62, 355.64, 213.2, 352.91, 214.86, 350.8, 215.02, 348.69, 215.19, 345.19, 214.19, 343.64, 212.61, 342.08, 211.03, 341.49, 207.99, 341.49, 205.53, 341.49, 203.08, 342.32, 200.24, 343.64, 197.88, 344.96, 195.51, 346.77, 193.24, 349.44, 191.33, 352.11, 189.42, 355.64, 187.86,  _
359.66, 186.4, 363.67, 184.94, 369.26, 184.49, 373.53, 182.57, 377.79, 180.66, 382.71, 178.37, 385.26, 174.9, 387.81, 171.44, 388.64, 165.73, 388.83, 161.76, 389.01, 157.79, 388.56, 154.43, 386.36, 151.08, 384.17, 147.73, 380.52, 143.63, 375.67, 141.67, 370.82, 139.7, 362.55, 138.64, 357.27, 139.27, 351.98, 139.9, 348.39, 141.93,  _
343.97, 145.44, 339.55, 148.95, 334.01, 155.46, 330.73, 160.33, 327.45, 165.2, 325.71, 170.13, 324.27, 174.68, 322.84, 179.22, 322.38, 182.61, 322.12, 187.59, 321.87, 192.58, 321.65, 199.64, 322.74, 204.61, 323.84, 209.57, 326.3, 214.17, 328.71, 217.39, 331.11, 220.61, 333.32, 222.51, 337.18, 223.95, 341.05, 225.38, 347.73, 227.05,  _
351.9, 226.01, 356.07, 224.98, 360.07, 220.6, 362.21, 217.73, 364.34, 214.86, 364.58, 211.33, 364.71, 208.78, 364.85, 206.23, 364.15, 204.16, 363.02, 202.42, 361.89, 200.68, 359.55, 198.76, 357.92, 198.32, 356.28, 197.88, 352.43, 197.79, 350.81, 198.83, 349.19,  _
199.88, 347.52, 203.45, 348.18, 204.57)
    Call ペイズリー柄描画マクロ_設定(varBezi, sngBBs1)
    '
    '*ベジェ曲線データ設定(2)
    varBezi = Array(334.81, 211.24, 334.09, 210.2, 330.22, 202.87, 329.7, 197.73, 329.18, 192.59, 330.27, 185.96, 331.72, 180.4, 333.16, 174.84, 334.78, 169.39, 338.36, 164.39, 341.94, 159.39, 347.87, 153.12, 353.21, 150.41, 358.55, 147.7, 366.06, 146.91, 370.41, 148.12, 374.75, 149.33, 377.8, 154.42, 379.27, 157.66, 380.74, 160.9,  _
380.75, 164.88, 379.22, 167.57, 377.68, 170.26, 373.58, 172.19, 370.07, 173.81, 366.57, 175.43, 362.03, 175.85, 358.18, 177.3, 354.34, 178.76, 350.12, 180.58, 347.01, 182.53, 343.91, 184.47, 341.53, 186.86, 339.54, 188.96, 337.56, 191.06, 335.96, 192.74, 335.08,  _
195.12, 334.2, 197.51, 334.08, 201.31, 334.03, 204#, 333.99, 206.68, 335.54, 212.29, 334.81, 211.24)
    Call ペイズリー柄描画マクロ_設定(varBezi, sngBBs2)
    '
    '*ベジェ曲線データ設定(3)
    varBezi = Array(362.12, 231.33, 361.68, 230.53, 356.28, 235.51, 352.25, 236.16, 348.22, 236.82, 342.74, 236.63, 337.95, 235.26, 333.16, 233.89, 327.28, 229.77, 323.51, 227.95, 319.73, 226.13, 317.87, 224.29, 315.29, 224.33, 312.72, 224.37, 309.7, 226.18, 308.05, 228.19, 306.4, 230.21, 305.15, 233.63, 305.39, 236.41, 305.63, 239.18, _ 307#, 242.45, 309.5, 244.86, 311.99, 247.28, 315.78, 249.97, 320.37, 250.9, 324.96, 251.83, 331.28, 252.07, 337.03, 250.42, 342.79, 248.77, 350.72, 244.18, 354.9, 241#, 359.09, 237.82, 362.57, 232.14, 362.12, 231.33)
    Call ペイズリー柄描画マクロ_設定(varBezi, sngBBs3)
    '
    '*ベジェ曲線データ設定(4)
    varBezi = Array(342.04, 242.07, 342.74, 241.05, 336.67, 241.13, 333.76, 239.94, 330.84, 238.74, 327.17, 236.46, 324.56, 234.89, 321.96, 233.32, 320.27, 231.17, 318.15, 230.51, 316.03, 229.84, 312.93, 229.45, 311.86, 230.92, 310.78, 232.38, 310.57, 236.91, 311.7,  _
239.29, 312.83, 241.67, 315.65, 244.08, 318.63, 245.2, 321.61, 246.33, 325.69, 246.57, 329.59, 246.05, 333.49, 245.53, 341.35, 243.09, 342.04, 242.07)
    Call ペイズリー柄描画マクロ_設定(varBezi, sngBBs4)
    '
    '*ベジェ曲線データ設定(5)
    varBezi = Array(341.02, 178.6, 342.2, 178.66, 347.64, 173.64, 350.93, 172#, 354.21, 170.36, 357.48, 169.73, 360.73, 168.74, 363.99, 167.75, 368.52, 167.47, 370.46, 166.05, 372.4, 164.64, 372.84, 161.77, 372.37, 160.23, 371.89, 158.69, 369.55, 157.46, 367.62, 156.79, 365.7, 156.13, 363.26, 155.84, 360.83, 156.23, 358.41, 156.61,  _
355.25, 157.78, 353.08, 159.12, 350.92, 160.45, 349.52, 162#, 347.85, 164.24, 346.18, 166.48, 344.98, 169.28, 343.84, 171.67, 342.7, 174.07, 339.84, 178.55, 341.02, 178.6)
    Call ペイズリー柄描画マクロ_設定(varBezi, sngBBs5)
    '
    '
    '*ペイズリー柄描画
    For Jp = 0 To PAISROWS - 1
        intDyp = PAISTOPP + PAISHPIT * Jp
        For Ip = 0 To PAISCOLS - 1
            intDxp = PAISLEFT + PAISVPIT * Ip
            '*ベジエ曲線データ表示
            Call ペイズリー柄描画マクロ_表示(sngBBs1, intDxp, intDyp, 0)
            Call ペイズリー柄描画マクロ_表示(sngBBs2, intDxp, intDyp, 1)
            Call ペイズリー柄描画マクロ_表示(sngBBs3, intDxp, intDyp, 2)
            Call ペイズリー柄描画マクロ_表示(sngBBs4, intDxp, intDyp, 3)
            Call ペイズリー柄描画マクロ_表示(sngBBs5, intDxp, intDyp, 4)
            'グループ化と、回転(無し or 180度)
            ActiveDocument.Shapes.Range(varShaNa).Group.Rotation = _
                     IIf(((Jp + Ip) Mod 2) = 0, 0, 180)
        Next Ip
    Next Jp
    '
    Selection.Collapse Direction:=wdCollapseStart '選択解除
End Sub
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Public Sub ペイズリー柄描画マクロ_設定(pvarBezi As Variant, psngBBas() As Single)
'
    Dim Ip As Integer
    '*ベジェ曲線、単精度実数配列に設定
    ReDim psngBBas(UBound(pvarBezi, 1) \ 2, 1)
    For Ip = LBound(psngBBas, 1) To UBound(psngBBas, 1)
        psngBBas(Ip, 0) = CSng(pvarBezi(Ip * 2 + 0)) * PAISBZMG
        psngBBas(Ip, 1) = CSng(pvarBezi(Ip * 2 + 1)) * PAISBZMG
    Next Ip
End Sub
'*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Public Sub ペイズリー柄描画マクロ_表示(psngBBas() As Single, _
           pintDxp As Integer, pintDyp As Integer, pintId As Integer)
'
    Dim Ip As Integer, sngBDat() As Single
    '
    '*ベジエ曲線データ位置設定
    ReDim sngBDat(UBound(psngBBas, 1), 1)
    For Ip = LBound(psngBBas, 1) To UBound(psngBBas, 1)
         sngBDat(Ip, 0) = psngBBas(Ip, 0) + pintDxp
         sngBDat(Ip, 1) = psngBBas(Ip, 1) + pintDyp
    Next Ip
    '
    '*ベジエ曲線データ表示
    With ActiveDocument.Shapes.AddCurve(sngBDat)
         '輪郭のみと塗りつぶしがある
         Select Case pintId
                Case 0, 1, 2: .Line.ForeColor.RGB = PAISLNCL
                              .Fill.Visible = msoFalse
                              .Line.Visible = msoTrue
                Case 3, 4: .Fill.ForeColor.RGB = PAISLNCL
                              .Fill.Visible = msoTrue
                              .Line.Visible = msoFalse
         End Select
         .Line.Weight = PAISLNWT '線の太さ
         varShaNa(pintId) = .Name 'グループ化の名前保存
    End With
End Sub

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