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
それはまだ二回目のラウンドでの変更を追跡することはありません。
最初に2つのフォームを使用するとしますか? – jsotola