... Sobre grado de complejidad en textbox VBA

... Utilizando Visual Basic para Access... Cómo validar desde en un textbox, el grado de complejidad de una contraseña (cadena) al escribirla en este textbox... ) digo grado de complejidad: cadena con más de 7 caracteres, ¿alfanumérica con mayúsculas y minúsculas?...

Respuesta
1

Para saber la longitud de una cadena de texto tienes la función Len()

Puedes recorrer los caracteres de una cadena con un bucle For ...Next combinado con la función InStr ()

Para saber si un carácter es número o no, tienes la función IsNumeric ()

Para saber si ésta en mayúsculas o no, puedes usar su valor ascii o las funciones ucase() o lcase()

Si lo combinas todo, ya puedes hacer la validación de complejidad que buscas.

Inténtalo a ver si te sale.

Tenía un poco de tiempo y te propongo dos posibilidades:

1º/ En el evento "Antes de actualizar" del campo donde escribes la contraseña (lo llamaré txtPass en el código):

Private Sub txtPass_BeforeUpdate(Cancel As Integer)
Dim laContraseña As String
laContraseña = Nz(Me.txtPass, "")
'Si no hay nada escrito, salimos sin más
If laContraseña="" Then Exit Sub
'Comprobamos la longitud
If Len(laContraseña) < 7 Then
    MsgBox "La contraseña no tiene los 7 caracteres mínimos requeridos"
    Cancel = True
End If
Dim hayNumero As Boolean
Dim hayMayusculas As Boolean
Dim hayMinusculas As Boolean
Dim i As Integer
Dim temp As Variant
For i = 1 To Len(laContraseña)
    temp = Mid(laContraseña, i, 1)
    If IsNumeric(temp) Then
        hayNumero = True
    Else
        If Asc(UCase(temp)) = Asc(temp) Then hayMayusculas = True
        If Asc(LCase(temp)) = Asc(temp) Then hayMinusculas = True
    End If
Next i
If hayNumero = False Then
    MsgBox "La contraseña no incluye números"
    Cancel = True
End If
If hayMayusculas = False Then
    MsgBox "La contraseña no incluye mayúsculas"
    Cancel = True
End If
If hayMinusculas = False Then
    MsgBox "La contraseña no incluye minúsculas"
    Cancel = True
End If
End Sub

En este caso no te dejará salir del cuadro de texto mientras no cumplas todas las condiciones o lo dejes en blanco.

2º/ En el evento "después de actualizar del campo donde escribes la contraseña:

Private Sub txtPass_AfterUpdate()
Dim laContraseña As String
laContraseña = Nz(Me.txtPass, "")
'Si no hay nada escrito, salimos sin más
If laContraseña="" Then Exit Sub
'Comprobamos la longitud
If Len(laContraseña) < 7 Then
    MsgBox "La contraseña no tiene los 7 caracteres mínimos requeridos"
    Me.txtPass = ""
    Exit Sub
End If
Dim hayNumero As Boolean
Dim hayMayusculas As Boolean
Dim hayMinusculas As Boolean
Dim i As Integer
Dim temp As Variant
For i = 1 To Len(laContraseña)
    temp = Mid(laContraseña, i, 1)
    If IsNumeric(temp) Then
        hayNumero = True
    Else
        If Asc(UCase(temp)) = Asc(temp) Then hayMayusculas = True
        If Asc(LCase(temp)) = Asc(temp) Then hayMinusculas = True
    End If
Next i
If hayNumero = False Then
    MsgBox "La contraseña no incluye números"
    Me.txtPass = ""
    Exit Sub
End If
If hayMayusculas = False Then
    MsgBox "La contraseña no incluye mayúsculas"
    Me.txtPass = ""
    Exit Sub
End If
If hayMinusculas = False Then
    MsgBox "La contraseña no incluye minúsculas"
    Me.txtPass = ""
    Exit Sub
End If
End Sub

En este caso, te borrará lo escrito si no cumple las condiciones.

¡Gracias! Compadre... yo sé un poquito de este mundo, pero no tan profundo, he hecho mis proyectos de Access, aunque aun me faltan cosas por aprender... gracias nuevamente, tu solución es excelente... estoy implementando una solución aquí en la empresa donde trabajo, y las pruebas de seguridad que me hicieron, solo me detectaron este punto del grado de complejidad... mi código solo llegaba a contar la cadena Len() ... de ahí no pasaba... gracias, nuevamente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas