Posterior a de nuestra extensa búsqueda de información dimos con la respuesta este enigma que suelen tener ciertos de nuestros usuarios. Te ofrecemos la respuesta y nuestro objetivo es serte de mucha apoyo.
Solución:
No declare la variable en el formulario de usuario. declararlo como Public
en el módulo.
Public pass As String
En el formulario de usuario
Private Sub CommandButton1_Click()
pass = UserForm1.TextBox1
Unload UserForm1
End Sub
En el Módulo
Public pass As String
Public Sub Login()
'
'~~> Rest of the code
'
UserForm1.Show
driver.findElementByName("PASSWORD").SendKeys pass
'
'~~> Rest of the code
'
End Sub
Es posible que también desee agregar una verificación adicional justo antes de llamar al driver.find...
¿línea?
If Len(Trim(pass)) <> 0 Then
Esto asegurará que un espacio en blanco string no se pasa.
La respuesta de Siddharth es buena, pero se basa en variables de ámbito global. Hay una forma mejor y más amigable con la programación orientada a objetos.
Un formulario de usuario es un módulo de clase como cualquier otro; la única diferencia es que tiene un módulo oculto VB_PredeclaredId
attribute ajustado a True
lo que hace que VB cree una variable de objeto de alcance global con el nombre de la clase; así es como puede escribir UserForm1.Show
sin crear una nueva instancia de la clase.
Aléjese de esto y trate su formulario como un objeto en su lugar: exponga Property Get
miembros y abstraer los controles del formulario; al código de llamada no le importa control S de todos modos:
Option Explicit
Private cancelling As Boolean
Public Property Get UserId() As String
UserId = txtUserId.Text
End Property
Public Property Get Password() As String
Password = txtPassword.Text
End Property
Public Property Get IsCancelled() As Boolean
IsCancelled = cancelling
End Property
Private Sub OkButton_Click()
Me.Hide
End Sub
Private Sub CancelButton_Click()
cancelling = True
Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = VbQueryClose.vbFormControlMenu Then
cancelling = True
Cancel = True
Me.Hide
End If
End Sub
Ahora el código de llamada puede hacer esto (asumiendo que el formulario de usuario se nombró LoginPrompt
):
With New LoginPrompt
.Show vbModal
If .IsCancelled Then Exit Sub
DoSomething .UserId, .Password
End With
Dónde DoSomething
sería algún procedimiento que requiere los dos string parámetros:
Private Sub DoSomething(ByVal uid As String, ByVal pwd As String)
'work with the parameter values, regardless of where they came from
End Sub
Finalizando este artículo puedes encontrar las explicaciones de otros sys admins, tú además tienes la libertad de dejar el tuyo si dominas el tema.