2016-07-20 22 views
0

我動態定義了複選框,它們在運行時添加到用戶窗體中。複選框事件在VBA中不起作用

Sub Userform_Initialize() 
    For i = 1 To 4 
    Set Chk = Frame4.Controls.Add("Forms.Checkbox.1", "Checkbox" & i) 
    With Chk 
     .top = 84 + k 
     .left = 336 
     .Width = 100 
     .Height = 18 
     .Caption = "Add item" 
     .Visible = True 
    End With 
    k = k + 24 
    Next i 
End Sub 

Public WithEvents Chk As MSForms.CheckBox 
Private Sub Chk_Click() 
    MsgBox Chk 
End Sub 

由於某種原因,該事件不響應。有沒有人有一個想法,爲什麼?我需要複選框的布爾值。這意味着當用戶點擊動態複選框時,我會在msgbox中看到「True」。

+1

你需要創建一個類來處理事件 - 檢查這些鏈接:http://stackoverflow.com/questions/3014421/how-to-add-events-to-controls-created-at-runtime-in-excel- with-vba(使用類事件,不添加額外的代碼!)。 –

+0

@ DarrenBartrup-Cook感謝您的回覆。我有它投票:)我會盡快分享我的解決方案代碼。 – yuro

回答

1

將類模塊添加到您的項目,只要你想(說「ChkBox」),將其命名並把這個代碼在它:

Public WithEvents Chk As MSForms.CheckBox 

Private Sub Chk_Click() 
    MsgBox Chk.Value 
End Sub 

在您的用戶窗體的代碼,添加此

Dim myChks(1 To 4) As New ChkBox '<--| this must be at the very top of your userform code pane 

Sub Userform_Initialize() 
    Dim i As Long, k As Long 

    With Me.Frame4.Controls 
     For i = 1 To 4 
      With .Add("Forms.Checkbox.1", "Checkbox" & i) 
       .Top = 84 + k 
       .Left = 336 
       .Width = 100 
       .Height = 18 
       .Caption = "Add item" 
       .Visible = True 
       Set myChks(i).Chk = .Parent.Item(.Name) 
      End With 
      k = k + 24 
     Next i 
    End With 
End Sub