Ayuda con Fucion if, else,end if me da error

Me sirvió de mucho, pero ahora tengo otro problema, mira tengo dos userforms que simulan cambiar una contraseña, el primero que me pida la contraseña guardada en una celda, este es el código del botón de aceptar del primero:
Private Sub boton_de_aceptar_primer_userform_Click()
contraseña = Range("a1")
If TextBox1 = contraseña Then
Unload Verificar_contraseña
Load cambiar_contraseña
cambiar_contraseña.Show
Else
MsgBox "Contraseña Incorrecta"
TextBox1.SetFocus
TextBox1 = Empty
End If
End Sub
"HASTA AQUI TODO ESTA BIEN"
Pero en el segundo, lo que intento hacer es que me pida una nueva contraseña y que la repita para verificar la primera contraseña del primer textbox, osea que sean iguales. Y que si los dos textbox están vacíos y el usuario presiona el botón de aceptar les pida que introduzcan una contraseña, y que si los dos textbox están llenos y son idénticos me diga que la contraseña ha sido cambiada con éxito.
aqui el codigo del segundo userform:
Private Sub boton_de_aceptar_segundo_userform_Click()
If TextBox2 <> TextBox1 Then
MsgBox "Las contraseñas no coinciden"
TextBox1 = Empty
TextBox2 = Empty
TextBox1.SetFocus
Else
If TextBox1 = Empty And TextBox2 = Empty Then
MsgBox "Introduce una contraseña valida"
Else
If TextBox1 =full and TextBox2=full and TextBox1 = TextBox2 Then
Range("a1") = TextBox2
MsgBox "Contraseña cambiada con exito"
Unload cambiar
End If
End Sub
En esta parte no se si se deba usar la palabra full para indicar si esta lleno el textbox, y aparte me marca este error [error de compilacion:bloque if sin end if]
NO SE USAR MUY BIEN EL IF,ELSE Y END IF. EN ESO ME ESTOY CONFUNDIENDO.
Te agradezco tu tiempo y espero me puedas ayudar, trate de ser lo más claro posible.

2 respuestas

Respuesta
1
Para verificar los Ifs, es mejor tabular. Esto es lo que tienes tu:
If TextBox2 <> TextBox1 Then
    MsgBox "Las contraseñas no coinciden"
    TextBox1 = Empty
    TextBox2 = Empty
    TextBox1.SetFocus
Else
    If TextBox1 = Empty And TextBox2 = Empty Then
        MsgBox "Introduce una contraseña valida"
    Else
        If TextBox1 =full and TextBox2=full and TextBox1 = TextBox2 Then
            Range("a1") = TextBox2
            MsgBox "Contraseña cambiada con exito"
            Unload cambiar
        End If
End Sub
Si te fijas, abres tres If y solo cierras uno.
Lo de Empty no me gusta, es preferible usar IsNull(). Yo lo haria asi:
If (TextBox2.Value <> TextBox1.Value) Then
    MsgBox "Las contraseñas no coinciden"
    TextBox1.Value = ""
    TextBox2.Value = ""
    TextBox1.SetFocus
Else
    If (IsNull(TextBox1.Value)) Or (IsNull(TextBox2.Value)) Then
        MsgBox "Introduce una contraseña valida"
    Else
        Range("a1") = TextBox2
        MsgBox "Contraseña cambiada con exito"
        Unload cambiar
    End If
End If
End Sub
Respuesta
1
Prueba:
Antes de que aceptar opere...
Puedes distribuirlo... y menos trabajo para el aceptar... y se distribuiye en los textos...
No olvides colocar las propiedades de value en cada campo... sino se dificultan las operaciones...
Private Sub TextBox1_Change()
If Len(Trim(TextBox1.Value)) < 0 Then
   TextBox2. Enabled = False ' esto evita que t cargue algo en el texto 2 sin aber casrgado el primero
End If
End Sub
Private Sub TextBox2_AfterUpdate()
If Len(Trim(TextBox1.Value)) > 0 Then
   If TextBox1.Value = TextBox2.Value Then
      boton_de_aceptar_segundo_userform.Enabled = True
   Else
       TextBox2.Value = Empty
       TextBox1.Value = Empty
       TextBox1.SetFocus
       MsgBox "Clave diferentes"
   End If
End If
End Sub
Private Sub boton_de_aceptar_segundo_userform_Click()
Range("a1") = TextBox2.value
   MsgBox "Contraseña cambiada con exito"
   Unload cambiar
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas