2017-09-25 53 views
-1

Excel用戶窗體出現奇怪的問題。VBA:用戶窗體Textbox_Change僅適用於一次

我有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到控制檯。

任何人都可以幫忙嗎?

編輯:即使 更改用戶窗體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

你會首先使用兩種形式? – jsotola

回答

0

好的,我解決了這個問題。

我不確定它爲什麼有效,需要進一步研究,但如果我在初始化用戶表單時將vbModeless添加到.show函數,它允許我跟蹤第二種表單上的更改。