ボタンや図形に手動でマクロを割り当てる方法とは別で、 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
今回は参考用なので”あ”を何度もクリックすると”い”がたくさん出来てしまう。 そういう時は「”い”が存在しなかったら」という処理を追加したりする。
スポンサーリンク