VBA:Userform Textbox_Change仅适用一次

问题描述 投票:-1回答:1

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”时,它不会向控制台输出任何内容。

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

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

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

excel vba userform
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.