2016-07-25 67 views
0

我試過@DaveShaw code,對於複選框的運行時事件,點擊不是複選框的有效方法?它從未進入方法checkBoxEvent_click在運行時爲excel中的userform中的複選框添加事件

Dim CheckBoxArray() As New ClassEvents   
for i=0 to 10 
      Set cTemp = MOM.Frame_MOM_MOM.Controls.Add("Forms.CheckBox.1") 

      With cTemp 
       .Top = HeaderOffset + RowOffset + i * 25 'your top pos 
       .Visible = True 
       .Left = 30 'your left pos 
       .Width = widthOfLabel 'your width 
       .Name = Replace(keyArrays(i, 1), " ", "_") 
       .Caption = keyArrays(i, 1) 'your caption , 


      End With 

      ReDim Preserve CheckBoxArray(0 To i) 
      Set CheckBoxArray(i).checkBoxEvent = cTemp 
      next i 

和我ClassEvents類看起來是這樣的:

Public WithEvents checkBoxEvent As MSForms.checkBox 

Private Sub checkBoxEvent_click() 
    MsgBox "halla" 'checkBox.Caption 
End Sub 
+0

正確:https://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.controls.checkbox.aspx?f=255&MSPPError=-2147217396 – Tim

+1

@Tim,在VBA中它是IS – user3598756

+0

從理論上講,您的代碼將工作......你可以在你的模塊的頂部放置'Option Explicit',並且如果你有它們,則刪除任何'On Error Resume Next'行。 – Ambie

回答

1

你必須保持Dim CheckBoxArray() As New ClassEvents你userfom代碼窗格的最頂端,因此不在任何潛艇/函數

而且使用Option Explicit說法太

變得

Option Explicit 

Dim CheckBoxArray() As New ClassEvents '<--| keep this line at the very top of your userform code pane 

Private Sub UserForm_Initialize() 
    Dim i As Long 
    Dim cTemp As MSForms.CheckBox '<-- with "Option Explicit" you have to declare all your variables 

    For i = 0 To 10 
     Set cTemp = MOM.Frame_MOM_MOM.Controls.Add("Forms.CheckBox.1") 
      With cTemp 
      .Top = HeaderOffset + RowOffset + i * 25 'your top pos 
       .Visible = True 
       .Left = 30 'your left pos 
       .Width = widthOfLabel 'your width 
       .Name = Replace(keyArrays(i, 1), " ", "_") 
       .Caption = keyArrays(i, 1) 'your caption , 
      End With 
      ReDim Preserve CheckBoxArray(0 To i) 
      Set CheckBoxArray(i).checkBoxEvent = cTemp 
    Next i 
End Sub 

此外,因爲你已經知道你的陣列的尺寸,它Dim在開始和不ReDim它在每次迭代:「是點擊複選框不是一個有效的方法」

Option Explicit 

Dim CheckBoxArray(0 To 10) As New ClassEvents '<--| keep this line at the very top of your userform code pane 

Private Sub UserForm_Initialize() 
    Dim i As Long 
    Dim cTemp As MSForms.CheckBox '<-- with "Option Explicit" you have to declare all your variables 

    For i = 0 To 10 
     Set cTemp = MOM.Frame_MOM_MOM.Controls.Add("Forms.CheckBox.1") 
      With cTemp 
      .Top = HeaderOffset + RowOffset + i * 25 'your top pos 
       .Visible = True 
       .Left = 30 'your left pos 
       .Width = widthOfLabel 'your width 
       .Name = Replace(keyArrays(i, 1), " ", "_") 
       .Caption = keyArrays(i, 1) 'your caption , 
      End With 
      Set CheckBoxArray(i).checkBoxEvent = cTemp 
    Next i 
End Sub 
+0

所以,明確幫助。我不知道數組的大小(輸入來自數據庫,我剝離了代碼)。我想要實現的是找出點擊哪個複選框的順序,然後按照點擊外觀的順序創建一個帶有複選框名稱的字符串。我將把'Dim CheckBoxArray(0到10)作爲新的ClassEvents'放在我的設置類中,我保留了所有的全局變量。 – skatun

相關問題