VBA 无法获取您刚刚单击的按钮的属性

Posted

技术标签:

【中文标题】VBA 无法获取您刚刚单击的按钮的属性【英文标题】:VBA cannot get the property of the button you just clicked 【发布时间】:2017-11-03 20:37:57 【问题描述】:

现在我在工作表中有几个按钮,每个按钮都设置了标题。我想实现一个这样的功能:当我点击按钮时,会执行一个宏来过滤带有自身标题的特定行,所以我需要获取我刚刚点击的按钮的属性,即标题宏的内部。

我的伪代码是这样的:

Sub filterPM()
    Dim capBt as String
    'get button caption as capBt
    ActiveSheet.Range(...).Autofilter(...,criterial=capBt,...)
End Sub

我碰巧找到了一种解决方案是使用Application.Caller,但我无法从中获得正确的标题,该对象返回默认标题,类似于button134,但不是我在创建按钮时设置的标题。

那我该怎么做呢?

【问题讨论】:

【参考方案1】:

试试这个:

capBt = Worksheets("Sheet1").Buttons("Button 1").Text

【讨论】:

除非 OP 明确要求,否则理想情况下我们不会提供使用 Select 的解决方案【参考方案2】:

您可以使用替代文字。首先尝试使用Application.Caller 返回的形状名称来获取Shape 对象。之后,您可以轻松访问该形状的替代文本:

Sub ButtonClick()
    Dim btn As Shape
    Dim altText As String

    Set btn = ThisWorkbook.Worksheets("Sheet1").Shapes(Application.Caller)

    altText = btn.AlternativeText
    ActiveSheet.Range(...).Autofilter(...,criterial=altText,...)
End Sub

【讨论】:

【参考方案3】:

形状没有标题属性。您需要使用具有.Caption 属性的ActiveSheet.Buttons 对象来访问它。

capBt = Sheet1.Buttons(Application.caller).Caption

但请确保此宏仅分配给按钮,而不是其他类型的形状。

【讨论】:

以上是关于VBA 无法获取您刚刚单击的按钮的属性的主要内容,如果未能解决你的问题,请参考以下文章

VBA代码获取单击按钮的行号

Excel VBA:获取单击按钮的行[重复]

无法从文本框中获取更新的值

如何使用VBA单击网页上的按钮(名称隐藏)?

Vba中窗体部件点击事件?

html 单击按钮删除某一单元格的内容