【VBA】シェイプにマクロを設定

ボタンや図形に手動でマクロを割り当てる方法とは別で、 VBAでシェイプにマクロを設定する方法になります。

▼参考例

VBAでシェイプを作成

シェイプを作成して、線の太さや色、背景色などの設定をする。 必要であれば影付きや3D書式など他にも設定項目は多数ある。

▼最初のシェイプを作成する

Sub シェイプ作成()
    
    '最初のシェイプを作成(テキスト,左位置,上位置)
    Call シェイプ作成とマクロ設定("あ", 50, 50) 'テキストと位置を渡す
​
End Sub

▼シェイプ.OnAction = “プロシージャ名” でシェイプにマクロを設定出来る

Sub シェイプ作成とマクロ設定(moji As String, l As Double, t As Double)
​
    '四角シェイプ作成
    With ActiveSheet.Shapes.AddShape(Type:=msoShapeRectangle, _
                                    Left:=l, Top:=t, Width:=100, Height:=100)
        'シェイプ設定
        .Name = "四角" & moji 'シェイプの名前
        .Fill.ForeColor.RGB = rgbDeepSkyBlue '塗りつぶし色
        .Line.ForeColor.RGB = rgbBlack '線の色
        .Line.Weight = 1 '線の太さ
        'テキスト設定
        With .TextFrame
            .Characters.Text = moji 'テキスト
            .Characters.Font.Color = rgbBlack 'テキスト色
            .Characters.Font.Size = 64 'フォントサイズ
            .Characters.Font.Bold = True '太字
            .HorizontalAlignment = xlHAlignCenter '左右中央揃え
            .VerticalAlignment = xlVAlignCenter '上下中央揃え
            .MarginLeft = 0     '左余白
            .MarginRight = 0    '右余白
            .MarginTop = 0      '上余白
            .MarginBottom = 0   '下余白
        End With
        .OnAction = "次のシェイプ" 'シェイプにマクロ設定
    End With
​
End Sub

クリックした時の処理を分岐

▼処理を分岐しておいて、クリックしたシェイプによって異なる処理をさせる

Sub 次のシェイプ()
        
    'クリックしたシェイプ
    Dim shp As Shape
    Set shp = ActiveSheet.Shapes(Application.Caller)
    
    '次に作成するシェイプ位置
    Dim l As Double: l = shp.Left + shp.Width + 5
    Dim t As Double: t = shp.Top
​
    'クリックしたシェイプの名前で処理を分岐
    Select Case Application.Caller
        Case "四角あ": Call シェイプ作成とマクロ設定("い", l, t)
        Case "四角い": Call シェイプ作成とマクロ設定("う", l, t)
        Case "四角う": Call シェイプ作成とマクロ設定("え", l, t)
        Case "四角え": Call シェイプ作成とマクロ設定("お", l, t)
        Case "四角お": Call 削除
    End Select
    
End Sub

▼最後のシェイプで削除

Sub 削除()
​
    '全てのシェイプを削除
    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
        shp.Delete
    Next shp
​
End Sub

今回は参考用なので”あ”を何度もクリックすると”い”がたくさん出来てしまう。 そういう時は「”い”が存在しなかったら」という処理を追加したりする。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA