2017-09-29 33 views
2

嘿,我有以下的VBA代碼,允許我在動態創建的組合框和文本框上的點擊事件到用戶窗體上。組合框和文本框的VBA動態數組單擊事件

窗體:

Option Explicit 

Dim comboboxBoxColct As New Collection 
Dim textboxBoxColct As New Collection 

Private Sub UserForm_Activate() 
Dim comboboxEvent As Class1 
Dim textboxEvent As Class1 

    '..lots more code within here 

    If LCase(TypeName(controller(i))) = "combobox" Then 
     Set comboboxEvent = New Class1 
     Set comboboxEvent.comboboxBox = controller(i) 
     comboboxBoxColct.Add comboboxEvent 
    ElseIf LCase(TypeName(controller(i))) = "textbox" Then 
     Set textboxEvent = New Class1 
     Set textboxEvent.textboxBox = controller(i) 
     textboxBoxColct.Add textboxEvent 
    End If 
End Sub 

的Class1:

Option Explicit 

Public WithEvents comboboxBox As MSForms.ComboBox 
Public WithEvents textboxBox As MSForms.TextBox 

Private Sub comboboxBox_Click() 
    MsgBox "worked" 
End Sub 

Private Sub textboxBox_Click() 
    MsgBox "worked" 
End Sub 

enter image description here

上面的代碼作品使用它爲組合框時就好。但是,一旦我得到文本框它從來沒有msgbox彈出。

我猜測它可能會,因爲它可能會尋找一個,而不是任何的數量是數組中所以它的起點在,而不是有那箱的序列號做因爲它是第一個看到的數組文本。

我能做些什麼才能讓他們在同一個陣列中工作?

+1

'textboxBox',真的嗎? ;-) FWIW我會使用'如果TypeOf控制器(i)是MSForms.TextBox'而不是字符串型'TypeName'檢查。我想我們可能需要看看'controller'數組是如何填充的。 –

回答

1

嗚嗚......似乎在VBA一個文本框沒有一個Click事件,所以當我改變了它,而不是處理Change(沒有雙關語意)事件,它表明彈出,如果我鍵入一個字母到文本框中。

Private Sub textboxBox_Change() 'was textboxBox_Click() 
    MsgBox "worked" 
End Sub 
+0

啊廢話,我想說,然後移動到另一個標籤,並忘記了! –

+0

根據您使用的更改,最好使用'TextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)'。例如:當用戶需要在文本框上鍵入內容並且文本被改變時,所以他不能寫全文並且文本被改變 – danieltakeshi