在Excel VBA控件内部进行自我引用

4
我正在尝试在按钮的点击事件中获取按钮控件的属性值,而不使用按钮的名称(因为我想在Excel表格上的许多按钮中使用相同的代码)。经过大量研究,我看到许多参考资料都建议尝试以下方法:
Me.ActiveControl.name

或者

Me.Shapes(Application.Caller).Name

然而,当在Excel中执行时,这两个都会抛出错误。请注意,我正在使用Excel 2010。
提前感谢您的帮助。 李

代码在哪里?在标准模块中吗? - Cool Blue
代码位于按钮本身的_Click事件中。 - LeeBarnes
你收到了什么具体的错误信息?我同意@CoolBlue的看法。 "Me"通常会指代代码运行的工作表,但我敢打赌你的代码不在工作表中,而是在一个普通模块中。我敢打赌你的错误信息是“无效使用'Me'关键字”。 - Blackhawk
2个回答

3
您想要的是可能的,但是需要创建一个
请按照以下步骤进行操作:
1.插入一个类模块,并将以下代码粘贴到其中。
Option Explicit

Public WithEvents MyButton As MSForms.CommandButton

Private Sub MyButton_Click()
    MsgBox MyButton.Name
End Sub

在此输入图片描述

接下来插入一个模块,并将此代码放置其中。

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

输入图像描述

现在只需运行 Sub StartCode()

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

输入图像描述


很好的回答针对ActiveX控件,但是OP并没有明确说明他正在使用ActiveX。 - chris neilsen
@chrisneilsen:是的,他不会 :) 从第一句话中我能理解到,OP试图从“按钮的点击事件内部”运行代码,其次,“Application.Caller”将对ActiveX控件产生错误。但让我们看看OP有什么要说的。 - Siddharth Rout
对于您的评论很感兴趣,即“_Application.Caller将为表单控件提供错误信息_”。- 我尝试了一下,似乎对我有效。 - chris neilsen
@chrisneilsen:抱歉,那是个打错字了...我想说的是ActiveX控件。我已经更正了评论。 - Siddharth Rout
@chrisneilsen:谢谢 :) 不过你永远不知道 ;) OP可能真的在谈论表单控件 :D - Siddharth Rout
显示剩余2条评论

1
尝试使用ActiveSheet.Shapes(Application.Caller).Name

1
我遇到了“运行时错误‘-2147352571(80020005)’:找不到指定名称的项。”问题出在Application.Caller上,因为Debug.Print TypeName(Application.Caller)返回Error - sancho.s ReinstateMonicaCellio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接