VBA:Userform Textbox_Change仅适用一次

时间:2017-09-25 22:46:24

标签: excel vba userform

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"在文本框中,它不会向控制台输出任何内容。

我在这里缺少一些用户形式的基本概念吗?或者我错了什么?我无法看到任何导致这种情况的事情。

我一直在阅读卸货和展示实际上做了什么,我找不到任何影响事件是否应该触发的事情。根据我所知,当你运行Us​​erform.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

它仍然没有跟踪第二轮的变化。

1 个答案:

答案 0 :(得分:0)

好的,我解决了这个问题。

我不确定它为什么会起作用,需要进一步调查,但是如果我在初始化用户表单时将vbModeless添加到.show函数,它允许我跟踪第二个表单上的更改