Passage de variable de la Forme au Module VBA
J'ai le bouton suivant dans un Formulaire:
Private Sub CommandButton1_Click()
Dim pass As String
pass = UserForm1.TextBox1
Unload UserForm1
End Sub
J'ai alors d'un Module Module1:
Public Sub Login()
...
UserForm1.Show
driver.findElementByName("PASSWORD").SendKeys pass
...
End Sub
L'idée est le mot de passe que l'utilisateur entre dans la zone de saisie sera affectée à la variable pass
. Ce que je vais avoir du mal à faire, cependant, est de passage pass
de UserForm1 dans Module1 de Connexion sub.
Je voudrais de la pensée en ajoutant quelque chose comme Module1.Login (pass)
de mon formulaire avant de me décharger, il serait, cependant ça ne semble pas passer n'importe quoi. Toute aide serait grandement appréciée. Merci.
Vous devez vous connecter pour publier un commentaire.
Ne pas déclarer la variable dans l'objet userform. Déclarer comme
Public
dans le module.Dans le Userform
Dans le Module
Vous pouvez aussi ajouter un contrôle supplémentaire juste avant l'appel de la
driver.find...
ligne?Cela permettra d'assurer qu'une chaîne vide n'est pas passé.
Siddharth la réponse, c'est sympa, mais s'appuie sur l'échelle mondiale de portée des variables. Il y a de mieux, de plus OOP de manière conviviale.
Un objet UserForm est un module de classe comme les autres - la seule différence, c'est qu'il a caché
VB_PredeclaredId
attributTrue
, ce qui rend VB créer un champ d'application mondial variable objet nommé d'après la classe - c'est comment vous pouvez écrireUserForm1.Show
sans la création d'une nouvelle instance de la classe.Pas loin de cette réalité et de traiter votre formulaire comme un objet au lieu - exposer
Property Get
membres et de l'abstraction de la forme de contrôles, le code d'appel ne se soucie pas contrôles de toute façon:Maintenant le code appelant peut le faire (en supposant que l'objet UserForm a été nommé
LoginPrompt
):Où
DoSomething
serait une procédure qui exige que les deux paramètres de la chaîne:WithEvents
déclaration de la vue/forme). Un peu comme "Appliquer" logique pour UserForm boîte de dialogue