2017-09-29 29 views
2

こんにちはすべて私は、動的に作成されたコンボボックスとテキストボックスをクリックして、userformにクリックイベントを持たせることができる次の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文字列型の 'TypeName'チェックの代わりに' If TypeOf controller(i)Is MSForms.TextBox'を使用したいと思います。私は、 'controller'配列がどのように埋め込まれているのかを見なければならないかもしれないと思います。 –

答えて

1

Hum ... VBAのテキストボックスにはClickイベントがないようですので、代わりにChange(予定がない)イベントを処理するように変更したとき、テキストボックスに文字を入力するとポップアップが表示されます。

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

ああ、私はそれを言いたいし、別のタブに移動して忘れてしまいました。 –

+0

使用している変更に応じて、 'TextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)'を使う方が良いでしょう。例:ユーザーがテキストボックスに何かを入力してテキストを変更する必要があるときに、テキスト全体を書き込むことができず、テキストが変更されたとき – danieltakeshi

関連する問題