こんにちは。
VBAを使うことが、頻繁ではないですが、ちょくちょくあり、
その都度「コードってこれで良かったっけ?」「どう書くんだっけ?」
となることが、しばしば、、、あります。
その時その時で調べて、確認して、コードを書いてとしていたので、
自分が使いやすいように、コードをコピペで使えるようにまとめます。
内容
オートシェイプをボタンとして使うことがしばしばあり、
クリック時のオートシェイプの情報を取得するコードをまとめておきます。
また、取得した情報をもとに条件分岐させ処理を行うコードもまとめておきます。
コード
オートシェイプをクリックした際に、以下を実施するコードです。
① オートシェイプの色コードを取得し、MsgBoxで表示する。
② オートシェイプに書き込まれたテキストを、MsgBoxで表示する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 'Date: 2020/3/7 'Contents: オートシェイプをクリックした際、色と記入文字をMsgBoxで表示 'Argument: 無し 'RValue: 無し 'Author: 'Update: ▲1:yy/mm/dd XXX ' 'remaarks: 'remaarks: '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ' Sub subShapeClick() 'クリックしたオートシェイプの色を取得<br> Set MyShapeObject = ActiveSheet.Shapes(Application.Caller) intColorCode = MyShapeObject.Fill.ForeColor.RGB MsgBox intColorCode 'クリックしたオートシェイプの文字を取得 Set Myobj = ActiveSheet.Shapes(Application.Caller) strBoxNo = Myobj.TextEffect.Text MsgBox strBoxNo End Sub |
尚、準備したエクセル上の画面はこのようにしました。
色と書かれた列に記載しているオートシェイプをクリックすると、subShapeClick が呼ばれるように、
設定をしておきます。
コードを実行
コードを実行してみます。実行するには、オートシェイプをクリックするだけです。
マクロを登録したオートシェイプにマウスを持っていくと、
マウスのポインタが、指差しマークになります。
この状態で、マウスをクリックすると、
となりMsgBoxで色のコードが表示されます。続けて、
オートシェイプに記述したテキストがMsgBoxで表示されます。
コード2
オートシェイプをクリックすると、オートシェイプの情報を取得できたので、
取得した情報をもとに条件分岐させるコードを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
'■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 'Date: 2020/3/7 'Contents: オートシェイプをクリックした際、色で処理分岐 'Argument: 無し 'RValue: 無し 'Author: 'Update: ▲1:yy/mm/dd XXX ' 'remaarks: 'remaarks: '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ' Sub subShapeClick2() 'クリックしたオートシェイプの色を取得 Set MyShapeObject = ActiveSheet.Shapes(Application.Caller) intColorCode = MyShapeObject.Fill.ForeColor.RGB 'MsgBox intColorCode 'クリックしたオートシェイプの文字を取得 Set Myobj = ActiveSheet.Shapes(Application.Caller) strBoxNo = Myobj.TextEffect.Text 'MsgBox strBoxNo 'クリックしたオートシェイプの色で処理の条件分岐 If intColorCode = 16247774 Then MsgBox "AAAを押した時の処理" ElseIf intColorCode = 16711680 Then MsgBox "青を押した時の処理" ElseIf intColorCode = 255 Then MsgBox "赤色は色をかえるよ。" MyShapeObject.Fill.ForeColor.RGB = 16247774 End If End Sub |
コード2を実行
例えば、赤色のオートシェイプをクリックして実行すると、
コードに記載された通り、MsgBoxでメッセージが表示されます。その後、
赤色だったEEEのオートシェイプの色が変わりました。
いろいろ使えそうでしたので、まとめておきました。