2015-07-06 67 views
0

我已經創建了一個帶有一些複選框的框架的用戶窗體。在框架旁邊,我有按鈕。流程就像我必須選擇複選框,然後點擊按鈕來獲取一些數據。選擇VBA框中存在的複選框不會觸發任何事件

但我想要做的是,我不希望按鈕被啓用,直到我選擇框架中的任何複選框。我使用「輸入/點擊」事件程序,他們都沒有工作。

以下是我的嘗試,仍然沒有啓用Commandbutton2

任何人都可以請幫我解決這個問題嗎?

Private Sub Frame1_enter() 

For Each C In Frame1.Controls 

If TypeOf C Is MSForms.CheckBox Then 

    If C.Value = True Then 
    Me.CommandButton2.Enabled = True 
    Exit Sub 

End If 
End If 
Next 
End Sub 

回答

0

我知道這是有點舊,但這裏是一個解決方案。不幸的是,您需要分別爲每個Checkbox處理Change事件。至少可以將邏輯分解爲單獨的方法。

Private Sub CheckBox1_Change() 
    SetButtonEnabled 
End Sub 

Private Sub CheckBox2_Click() 
    SetButtonEnabled 
End Sub 

Private Sub CheckBox3_Change() 
    SetButtonEnabled 
End Sub 

Sub SetButtonEnabled() 
    Me.CommandButton2.Enabled = ValidateChecks 
End Sub 

Function ValidateChecks() As Boolean 

    Dim cbx As MSForms.CheckBox 
    Dim ctl As Control 
    Dim bSomethingChecked As Boolean 

    For Each ctl In Me.Frame1.Controls 

    If TypeName(ctl) = "CheckBox" Then 
     Debug.Print "Found checkbox : " & ctl.Name 
     Set cbx = ctl 
     If cbx.Value Then 
     bSomethingChecked = True 
     Exit For 
     End If 
    Else 
     Debug.Print ctl.Name & " is not a checkbox: " & ctl.Name 
    End If 
    Next 
    Set cbx = Nothing 
    Set ctl = Nothing 
    ValidateChecks = bSomethingChecked 
End Function