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