2017-10-06 4 views
0

1つのラベル(lword)を持つユーザーフォームがあります。ラベルは、コードが実行されるたびに変数で更新する必要があります。コードが実行されるたびにactivecellが変更され、その値も変更されます。Excel VBA - 最初にフォームを実行するとラベルが空白になり、後で常に1ステップ遅れます

初めてコードを実行するとき、ラベルは空白です(プロパティのデフォルトのキャプションが削除されました)。値をラベルに付けるべき変数が更新され、正しい値が示されます。私はこれをテストするためのMsgBoxを含んだ(MsgBox単語)。

2回目以降にフォームを実行すると、それ以降は常に以前の値が表示されます。ラベルを更新する意味は、常に一歩遅れているようです。

この

は、私がこれまで持っているもののコードです:

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をコード内に実行することはありません。したがって、フォームが残っていて、ラベルの値は「closed」の後に 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

は、あなたは私をからかっするなきゃ。私はそれが何かシンプルだと分かっていましたが、何ではない... それは確かに動作します。ありがとうGene。 – Dennis

関連する問題