2017-10-06 60 views
0

我有一個帶有1個標籤(lword)的用戶窗體。每次運行代碼時,標籤都需要更新一個變量。每次運行代碼時,活動單元都會更改,因此也會更改該值。Excel VBA - 標籤空白首次運行窗體,後面總是落後1步

第一次運行代碼時,標籤是空白的(我刪除了屬性中的默認標題)。應該給標籤賦值的變量正在更新並顯示正確的值。我包含一個MsgBox來測試這個(MsgBox單詞)。

當您第二次運行窗體或每次運行窗體時,它總是顯示以前的值。更新標籤的含義似乎總是落後一步。

這是我到目前爲止的代碼:

Sub Random_Words() 

Dim i As Integer 
Dim word As String 
Dim answer As String 
Dim Rng As Range 

i = ActiveSheet.UsedRange.Rows.Count 
Set Rng = Range("B1:B" & i) 

Cells(Int((i * Rnd) + 1), 2).Select 
word = ActiveCell.Value 
answer = ActiveCell.Offset(0, -1).Value 

MsgBox word 

Load UserForm1 
UserForm1.Show 
UserForm1.lword.Caption = word 

End Sub 

我一直想和閱讀幾個網站,但沒有解決。 另外Userform1.Repaint沒有幫助。

非常感謝,如果您需要更多信息,請告訴我。

回答

0

如果將ShowModal屬性設置爲False,您將看到預期的行爲。

當線路UserForm1.Show執行,而形式是模態,下一行不會執行,直到關閉自己的表中(實際上它隱藏的形式,並允許子繼續)。您永遠不會在您的代碼中執行Unload,因此表單會保留,標籤的值在「關閉」後會設置爲word的新值。下一次顯示錶單時(實際上不重新加載),舊值顯示等。要驗證剛描述的內容,請修改代碼,如下所示:

. . . 
    MsgBox "word = " & word ' the new value is assigned to "word" 

    Load UserForm1 
    UserForm1.Show ' the old value of "word" is showing 
    UserForm1.lword.Caption = word ' the new value is assigned to the label 

    MsgBox "caption = " & UserForm1.lword.Caption 

End Sub 
+0

你得開玩笑吧。我知道這是簡單的,但不是什麼... 它確實有效。非常感謝基因。 – Dennis