2017-09-12 1 views
1

J'ai plus de 20 sous-marins dans un fichier Excel et quelques formes d'utilisateur. Dans un userform, il y a un bouton d'annulation, mais je ne peux pas utiliser le code "if cancel = true" dans un autre sous-marin. Je ne sais pas pourquoi, mais ça ne se réalise jamais. Donc je pensais que si je peux affirmer qu'une variable est vraie dans userform, alors vérifier cette variable dans un autre sub, alors cela peut marcher mais malheureusement je ne peux pas le comprendre non plus. Dans ci-dessous vous pouvez trouver les deux codes;Utilisation d'une variable dans 2 sous-marins

Ceci est une forme d'utilisateur;

Private Sub Sheet_Iptal_Click() 
Dim Sheet_Iptal As String 
Sheet_Iptal = True 
ThisWorkbook.Worksheets("Storyboard").Delete 
Yeni_Sheet_Adi_Olustur.Hide 
MsgBox "Islem iptal edildi." 
Yeni_Sheet_Adi_Olustur.Yeni_Sheet.Value = "" 
End Sub 

Et voici la partie de l'autre sub où je veux vérifier cette situation "Sheet_Iptal";

If Sheet_Iptal = True Then 
    ThisWorkbook.Worksheets("Storyboard").Delete 
    GoTo son 
End If 

Ce que je suis en train de réaliser essentiellement ici est, si le bouton annuler a été utilisé, puis passez à « fils » de ce sous spécifique. Je suis ouvert à toutes suggestions ici.

+0

quelque chose comme https: // stackoverflow .com/questions/3979893/comment-arrêter-vba-code-running? – Slai

+0

Mais la valeur de la variable est vidée lorsque l'utilisateur se termine. Je ne porte pas sa valeur au sous-marin principal. C'est le principal problème pour moi en ce moment. – Bildircin13

Répondre

0

Le UserForm .Tag propriété peut être définie à quelque chose sur les événements de clic de bouton:

Private Sub buttonOK_Click() 
    Me.Tag = "OK" 
    Me.Hide 
End Sub 

Private Sub buttonCancel_Click() 
    Me.Tag = "Cancel" 
    Me.Hide 
End Sub 

puis vérifiez sa valeur après avoir montré la forme:

UserForm1.Show 
MsgBox UserForm1.Tag <> "OK" 
+0

Merci beaucoup l'homme. Celui-ci a fonctionné comme un charme. – Bildircin13