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

Excel2000



戻る


Excel Word Access VBA! モーグ