Saltar al contenido

Pasar variable de formulario a módulo en VBA

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *