2017-10-06 23 views
0

J'ai une userform avec 1 étiquette (lword). L'étiquette doit être mise à jour avec une variable chaque fois que le code est en cours d'exécution. Chaque fois que le code est exécuté, l'activecell change et donc aussi la valeur.Excel VBA - L'étiquette est vierge lors de la première exécution du formulaire, plus tard toujours 1 pas derrière.

Lors de la première exécution du code, l'étiquette est vide (j'ai supprimé la légende par défaut dans les propriétés). La variable qui doit donner la valeur à l'étiquette est mise à jour et affiche la valeur correcte. J'ai inclus un MsgBox pour tester ceci (mot MsgBox).

Lorsque vous exécutez le formulaire pour la deuxième fois ou à chaque fois par la suite, il affiche toujours la valeur précédente. Signification mise à jour de l'étiquette semble toujours un pas en arrière.

Ce code est ce que j'ai jusqu'à présent:

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 

J'ai essayé et lire plusieurs sites, mais rien a marché. Aussi Userform1.Repaint n'aide pas.

Merci beaucoup d'avance et au cas où vous avez besoin de plus d'informations, faites le moi savoir.

Répondre

0

Si vous définissez la propriété ShowModal sur False, le comportement attendu s'affiche.

Lorsque la ligne UserForm1.Show exécute, alors que la forme est Modal, la ligne suivante ne seront pas exécutés jusqu'à ce que vous fermez le formulaire vous-même (en fait, il cache la forme et permet au sous de continuer). Vous n'exécutez jamais Unload dans votre code afin que le formulaire reste et la valeur de l'étiquette est définie à la nouvelle valeur de word après qu'il est «fermé». La prochaine fois que vous montrer la forme (pas re-charge, en fait), l'ancienne valeur montre le haut, etc. Pour vérifier ce que je viens de décrire, modifier votre code comme ceci:

. . . 
    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

Tu dois me faire marcher. Je savais que c'était quelque chose de simple, mais pas quoi ... Cela fonctionne en effet. Merci beaucoup Gene. – Dennis