Macro para Login que permita distinguir entre mayúsculas y minúsculas en el nombre de usuario

Dam, necesito una macro para validar el acceso a un libro por medio de usuario, password y estatus que se depositan o se encuentran registrados en la hoja "CLAVES", tengo el siguiente código:

Private Sub btn_Registrar_Click()
Dim usuario As String
Dim Fila, Final As Integer
Dim password, UsuarioEncontrado, yaExiste, Status
Dim Rango As Range
' Hoja 6 = CLAVES
' Hoja 8 = BITACORA
yaExiste = Application.WorksheetFunction.CountIf(Hoja6.Range("Usuarios"), Me.txtUsuario.Value)
Set Rango = Hoja6.Range("Usuarios")    ' ("Tabla1[Usuario]") ' Este es el valor original
If Me.txtUsuario.Value = "" Or Me.txtPassword.Value = "" Then
MsgBox "Introduce usuario y contraseña", vbExclamation, Titulo
Me.txtUsuario.SetFocus
ElseIf yaExiste = 0 Then
MsgBox "El usuario '" & Me.txtUsuario & "' no existe", vbExclamation, Titulo
ElseIf yaExiste = 1 Then
UsuarioEncontrado = Rango.Find(What:=Me.txtUsuario.Value, MatchCase:=False).Address
password = Hoja6.Range(UsuarioEncontrado).Offset(0, 1).Value
Status = Hoja6.Range(UsuarioEncontrado).Offset(0, 2).Value
If Hoja6.Range(UsuarioEncontrado).Value = Me.txtUsuario.Value And password = Me.txtPassword.Value Then
For Fila = 1 To 1000
If Hoja8.Cells(Fila, 1) = "" Then
Final = Fila
Exit For
End If
Next

El rango "Usuarios", es un rango dinámico con la siguiente estructura de Nombre: "=DESREF(CLAVES!$A$1;0;0;CONTARA(CLAVES!$A:$A))"  Así no me funciona adecuadamente.

Cuando utilizo la siguiente estructura para el nombre de "Usuarios" Me funciona bien

"=CLAVES!$A$2:$A$9"

El problema es que pueden haber 5, 60, 10 o 500 usuarios.

Con el valor original así:

yaExiste = Application.WorksheetFunction.CountIf(Hoja6.Range("Tabla1[Usuario]"), Me.txtUsuario.Value)
Set Rango = Hoja6.Range("Tabla1[Usuario]")

También funcionan, es solo que como debe estar en un Libro compartido para red, no me deja conservar el nombre de "Tabla1"

Si el nombre de usuario es: "ANDRes" y en el textbox previsto para ello dígito, "andres", Andres", "ANdres" y otras más posibles pero con la clave correcta me permite ingresar, quisiera que en esos casos me impida entrar y salga el mensaje de "Usuario no encontrado".

No se si se requerirá un código diferente por ser en red, aunque si escribo mal el Password, no me permite ingresar.

1 Respuesta

Respuesta
1

H o l a:

Tuve que cambiar varias cosas, por lo tanto, te anexo una nueva macro. Ya no es necesario tu rango de "Usuarios", la macro verifica todos los que existan: 5, 100, 2000, etc. Tampoco importa si tus datos están en una tabla o en un rango de celdas.

Private Sub btn_Registrar_Click()
'Por.Dante Amor
    Titulo = "INGRESO"
    Set h1 = Sheets("CLAVES")
    Set h2 = Sheets("BITACORA")
    If txtUsuario = "" Or txtPassword = "" Then
        MsgBox "Introduce usuario y contraseña", vbExclamation, Titulo
        txtUsuario.SetFocus
        Exit Sub
    End If
    '
    Set b = h1.Columns("A").Find(txtUsuario, LOOKAT:=xlWhole, MatchCase:=True)
    If b Is Nothing Then
        MsgBox "El usuario '" & txtUsuario & "' no existe", vbExclamation, Titulo
        txtUsuario.SetFocus
        Exit Sub
    End If
    '
    If IsNumeric(txtPassword) Then clave = Val(txtPassword) Else clave = txtPassword
    If h1.Cells(b.Row, "B") <> clave Then
        MsgBox "Contraseña incorrecta", vbExclamation, Titulo
        txtPassword.SetFocus
        Exit Sub
    End If
    '
    Status = h1.Cells(b.Row, "C")
    Final = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    '
    'Continuar con la macro
    '
End Sub

En la primer línea de la macro tengo esto:

Titulo = "INGRESO"

Supongo que tienes una variable o una constante "Titulo" en la macro con el texto que necesitas, si es así, puedes borrar esa línea.

Te estoy dejando de igual manera en las variables Status y Final los valores para que continúe la macro.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas