从Excel VBA控件内部自引用

时间:2013-11-29 21:54:16

标签: excel vba excel-vba

我正在尝试从按钮的单击事件中获取按钮控件的属性值,而不使用按钮的名称(因为我想对Excel工作表上的每个按钮使用相同的代码)。

经过大量研究后,我看到许多参考资料尝试以下内容:

Me.ActiveControl.name

Me.Shapes(Application.Caller).Name

但是,从Excel中执行时,这两个都会抛出错误。请注意,我正在使用Excel 2010。

提前感谢您的帮助。 利

2 个答案:

答案 0 :(得分:3)

您想要的是什么,但为此您需要创建Class

这样做。

插入一个类模块并将此代码粘贴到那里。

Option Explicit

Public WithEvents MyButton As MSForms.CommandButton

Private Sub MyButton_Click()
    MsgBox MyButton.Name
End Sub

enter image description here

下一步插入模块并将此代码放在那里

Dim shpButtons() As New Class1

Sub StartCode()
    Dim shp As Shape
    Dim btnCount As Long

    ReDim shpButtons(1 To 1)

    btnCount = 0

    For Each shp In ActiveSheet.Shapes
        If shp.OLEFormat.Object.OLEType = xlOLEControl Then
            btnCount = btnCount + 1
            ReDim Preserve shpButtons(1 To btnCount)
            Set shpButtons(btnCount).MyButton = shp.OLEFormat.Object.Object
        End If
    Next
End Sub

Sub StopCode()
    Dim iBtn As Long

    On Error Resume Next
    For iBtn = LBound(shpButtons) To UBound(shpButtons)
        Set shpButtons(iBtn).TheText = Nothing
    Next
End Sub

enter image description here

现在只需运行Sub StartCode()

即可

接下来,当您单击ActiveX CommandButton时,您将获得它的名称。

enter image description here

答案 1 :(得分:1)

尝试ActiveSheet.Shapes(Application.Caller).Name