2017-08-11 181 views
0

我有一大堆切換按鈕1張,我希望他們有相同的_click事件。有沒有一種方法可以在不爲每個按鈕編寫新的_click函數的情況下做到這一點?VBA - 使用一個點擊事件多個切換按鈕

謝謝!

+0

那麼你可能不得不爲每個人做點什麼。我會把基本代碼放在一個函數中,並讓每個單獨的事件調用它。 –

回答

2

的另一種方式是使用一個類模塊來控制事件的控制...

1)插入類模塊(VBE>插入>類模塊)。

2)在名稱下的屬性窗口中,輸入clsToggleButtonGroup。

3)複製和下面的代碼粘貼到該類的代碼模塊...

Option Explicit 

Public WithEvents ToggleButton As MSForms.ToggleButton 

Private Sub ToggleButton_Click() 
    MsgBox ToggleButton.Caption 
    'do stuff 
    ' 
    ' 
End Sub 

4)在常規的模塊(VBE>插入>模塊),複製和粘貼以下代碼。 ...

Option Explicit 

Public colToggleButtons As New Collection 

Sub AddToggleButtonsToClass() 

    Dim OleObj As OLEObject 
    Dim cToggleButton As clsToggleButtonGroup 

    For Each OleObj In Worksheets("Sheet1").OLEObjects 'change the sheet name accordingly 
     If TypeName(OleObj.Object) = "ToggleButton" Then 
      Set cToggleButton = New clsToggleButtonGroup 
      Set cToggleButton.ToggleButton = OleObj.Object 
      colToggleButtons.Add cToggleButton 
     End If 
    Next OleObj 

End Sub 

5)然後,運行AddToggleButtonsToClass。

+0

我沿着這些線路嘗試了一些東西,但它什麼都不會。我想我讀了一些關於它不工作的東西,如果我在工作表模塊中做,它必須在一個常規模塊中。是對的嗎? –

+0

我測試過它,它工作正常。使用位於工作表上的切換按鈕,您將在類模塊中獲得單擊事件的代碼,並且該代碼將常規模塊中的切換按鈕添加到您的類中。插入類模塊時,不要忘記重新命名它,正如我在文章中所描述的那樣。 – Domenic

+0

我得到運行時錯誤424:對象需要在行'colToggleButtons.Add cToggleButton' ... –

2

簡答:不。

較長的回答:不。 但是您不必爲每個處理程序複製/粘貼整個邏輯。只需將該邏輯提取到其自己的Private方法中,並從處理程序調用它。

Private Sub RunToggleButtonLogic() 
    'do stuff 
End Sub 

Private Sub ToggleButton1_Click() 
    RunToggleButtonLogic 
End Sub 

Private Sub ToggleButton2_Click() 
    RunToggleButtonLogic 
End Sub 

Private Sub ToggleButton3_Click() 
    RunToggleButtonLogic 
End Sub 

Private Sub ToggleButton4_Click() 
    RunToggleButtonLogic 
End Sub 

Private Sub ToggleButton5_Click() 
    RunToggleButtonLogic 
End Sub 

... 

這樣做的原因在於,VBA是COM和COM事件與接口(如Java)工作,而不是代表(如C#,VB.NET或) - 所以你不能「指定」處理程序對一個事件來說,它根本就不是那樣工作的。

+0

男人我真的打出了一個評論,說這只是(當然不是拼寫)。 –

+0

原來有一種方法。見Domenic的答案。 –

相關問題