2017-09-25 7 views
-1

Excel Userformsで奇妙な問題が発生しました。VBA:Userform Textbox_Change Only Once Works

私は2つのユーザーフォームを持っています.1つはテキストボックスで、もう1つはボタン付きです。テキストボックスを持つものはTextbox_Changeイベントを使用してボックス内の内容を追跡し、10文字を入力するとUserform2を読み込みます。

Userform2が初期化すると、Userform1がアンロードされます。 Userform2には、Userform1をリロードするボタンがあります。

これは私の最終結果の非常にスリムなバージョンですが、問題を引き起こしていたコードでないことを確認するために、最も基本的なフォームに表示する必要がありました。

とにかく、Userform1のテキストボックスに入力するとTextBox1の変更が追跡されますが、読み込まれた後は追跡が停止します。

以下は私のコードです。

のUserForm1:

Dim Iteration As Integer 
Private Sub TextBox1_Change() 

    Debug.Print Me.TextBox1.Value 

    Iteration = Iteration + 1 

    If Iteration = 10 Then 

     UserForm2.Show 

    End If 

End Sub 
Private Sub UserForm_Initialize() 

    Iteration = 0 

End Sub 

Userform2:

Private Sub CommandButton1_Click() 

    UserForm1.Show 

End Sub 
Private Sub UserForm_Initialize() 

    Unload UserForm1 

End Sub 

それはそれはおそらく可能性と同じくらい簡単です。予想通り

1 
12 
123 
1234 
12345 
123456 
1234567 
12345678 
123456789 
1234567890 

:私は最初のUserForm1をロードすると

は私がコンソールに出力テキストボックス「1234567890」、締結しました。

私はUserform2をロードしてからUserform1をリロードするためにボタンをクリックした後、テキストボックスに "abcdefghij"と入力するとコンソールには何も出力されません。

私がここで紛失しているuserformsの基本的な概念はありますか?または何か私は間違っている?私はこれを引き起こしているものは何も見えません。

私はアンロードとショーが実際に行うことについて読んできましたが、イベントが発生するかどうかに影響を与えるものは見つかりませんでした。私があなたがUserform.showを実行するときに知っていることから、すべてを再初期化しますが、そうでなくてもコンソールに何かを出力する必要があります。

誰でも手助けできますか?

EDIT: 私はあることをユーザーフォーム1を変更した場合でも:

Dim Iteration As Integer 
Private Sub TextBox1_Change() 

    Debug.Print Me.TextBox1.Value 

    Iteration = Iteration + 1 

    If Iteration = 10 Then 

     Unload Me 
     UserForm1.Show 

    End If 

End Sub 
Private Sub UserForm_Initialize() 

    Iteration = 0 

End Sub 

それはまだ二回目のラウンドでの変更を追跡することはありません。

+0

最初に2つのフォームを使用するとしますか? – jsotola

答えて

0

さて、問題を修正しました。

私はそれがなぜ機能するのかわかりませんが、それをさらに調べる必要がありますが、.show機能にvbModelessを追加すると、ユーザーフォームを初期化するときに2番目のフォームの変更を追跡できます。