即効テクニック |
フォームツールバーの”ボタン”やオートシェープなどに登録したマクロ内でクリックされたボタンの名前は”Application.Caller”で取得できますが、”コントロールツールボックス”のコマンドボタンの場合、クリックイベントなどのイベントプロシージャ内で自ボタン名を取得することはエクセル基本機能ではできません。 以下のサンプルではX,Y座標からShapeやRangeオブジェクトを取得するRangeFromPointメソッドを使用してボタンを取得します。また、X,Y座標の取得にはAPI関数GetCursorPosを用いています。 ※RangeFromPointメソッドはエクセル95,97では使用できません。
Private Type POINTAPI x As Long y As Long End Type Private Declare Function GetCursorPos Lib "user32" _ (lpPoint As POINTAPI) As Long Private Sub CommandButton1_Click() Dim C As POINTAPI Dim obj As OLEObject Call GetCursorPos(C) Set obj = ActiveWindow.RangeFromPoint(C.x, C.y) MsgBox obj.Name & "のキャプションを変更します" ’OLEObjectのObjectプロパティー経由でキャプション変更 ActiveSheet.OLEObjects(obj.Name).Object.Caption = "変更後のキャプション" End Sub