HOME > 即効テクニック > Excel VBA > その他関連のテクニック > コマンドボタンのクリックイベント内でボタン名を取得するには

即効テクニック

その他関連のテクニック

コマンドボタンのクリックイベント内でボタン名を取得するには

(Excel 2000)
フォームツールバーの”ボタン”やオートシェープなどに登録したマクロ内でクリックされたボタンの名前は”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