Excel Userforms存在一个奇怪的问题。
我有2个用户表单,一个带文本框,另一个带按钮。带文本框的文本框使用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
它尽可能简单。
当我第一次加载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
它仍然没有跟踪第二轮的变化。
答案 0 :(得分:0)
好的,我解决了这个问题。
我不确定它为什么会起作用,需要进一步调查,但是如果我在初始化用户表单时将vbModeless
添加到.show
函数,它允许我跟踪第二个表单上的更改