2017-06-02 22 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 

但要確保這個宏只能分配給按鈕,而不是其他類型的形狀爲好。

相關問題