2017-06-02 93 views
1

现在,我在工作表中有几个按钮,每个按钮都设置了它们的标题。我想实现这样一个功能:当我点击按钮时,执行一个宏来过滤具有它自己的标题的特定行,所以我需要获得我刚刚点击的按钮的属性,即标题,宏观的内部。VBA无法获得您刚才单击的按钮的属性

我的伪代码:

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

我偶然发现一个解决方案是使用Application.Caller,但我不能从中得到适当的标题,对象返回的默认标题这就好比button134但而不是我创建按钮时设置的标题。

那么我该如何做到这一点?

回答

1

您可以使用替代文字。尝试使用由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 
0

试试这个:

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

除非OP特别要求它,理想情况下我们不会提供使用'Select'的解决方案 – CallumDA

0

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

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

但要确保这个宏只能分配给按钮,而不是其他类型的形状为好。

相关问题