Excel Userforms有一个奇怪的问题。
我有2个用户表单,一个带文本框,另一个带按钮。带有文本框的文件框使用Textbox_Change事件来跟踪框中的内容,并在输入10个字符后加载Userform2。
当Userform初始化Userform时卸载。 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
它尽可能简单。
当我第一次加载Userform1时,我进入了输出控制台的文本框“1234567890”:
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
正如所料。
然而,在我加载Userform2然后单击按钮重新加载Userform1后,当我在文本框中输入“abcdefghij”时,它不会向控制台输出任何内容。
我在这里缺少一些用户形式的基本概念吗?或者我错了什么?我看不到会导致这种情况的任何事情。
我一直在阅读卸载和节目实际上做了什么,我找不到任何影响事件是否应该触发的事情。根据我所知,当你运行Userform.show时,它会重新初始化所有内容,但即使它没有,它仍然应该将SOMETHING输出到控制台。
有人可以帮忙吗?
编辑:即使我将Userform 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
它仍然没有跟踪第二轮的变化。
好的,我解决了这个问题。
我不确定它为什么会起作用,需要进一步研究它,但是如果我在初始化用户窗体时将vbModeless
添加到.show
函数中,它允许我跟踪第二个窗体上的更改。