InputBox para acceso con usuario y contraseña

En una hoja llamada "USUARIOS" tengo registrados unos nombres de usuarios en la columna A, y en la columna B unas contraseñas de acceso, quiero crear un imputbox que al abrir un libro me pida que ingrese el nombre de usuario y contraseña que está en la hoja "USUARIOS", y si el dato es correcto, realice unas tareas, de lo contrario que no permita acceder y vuelva a pedir los datos; la macro es la siguiente:

Private Sub Workbook_Open()

Dim usuario, Clave As String
Dim rango As Range

Set P = Sheets("USUARIOS")

usuario = InputBox("POR FAVOR INGRESE SU NOMBRE DE USUARIO", "USUARIO")

Clave = InputBox("POR FAVOR INGRESE SU CONTRASEÑA", "CONTRASEÑA")

Set rango = P.Range("A:A").Find(What:=usuario, LookAt:=xlWhole, LookIn:=xlValues)

If usuario = P.Range("A" & rango.Row) And Clave = P.Range("B" & rango.Row) Then

MsgBox "SU CONTRASEÑA ES CORRECTA, BIENVENIDO", , "HOLA"

'ejecuta otras macros....

Exit Sub
End If

If usuario <> P.Range("A" & rango.Row) Or Clave <> P.Range("EH" & rango.Row) Then
MsgBox "SU USUARIO NO ES CORRECTO, POR FAVOR VERIFIQUE", vbCritical, "ERROR"
Exit Sub
End If

El problema es que por alguna razón, al darle un dato diferente al usuario y contraseña que se tiene registrada en la hoja "USUARIOS", genera un error que no sé como solucionar.

2 respuestas

Respuesta
2
Set rango = P.Range("A:A").Find(What:=usuario, LookAt:=xlWhole, LookIn:=xlValues)
If usuario = P.Range("A" & rango.Row)

El error es porque si el dato no existe, entonces en el objeto "range" no traes nada . En la línea Usuario = P.range te envía error porque no tienes nada en range


Prueba lo siguiente:

Private Sub Workbook_Open()
  Dim Usuario As Variant, Clave As Variant, i As Long, existe As Boolean
  Dim sh As Worksheet
  '
  Set sh = Sheets("USUARIOS")
  Usuario = InputBox("POR FAVOR INGRESE SU NOMBRE DE USUARIO", "USUARIO")
  Clave = InputBox("POR FAVOR INGRESE SU CONTRASEÑA", "CONTRASEÑA")
  If Usuario = "" Or Clave = "" Then
    MsgBox "Operación cancelada"
    Exit Sub
  End If
  '
  For i = 1 To sh.Range("A" & Rows.Count).End(3).Row
    If sh.Range("A" & i).Value = Usuario And sh.Range("B" & i).Value = Clave Then
      existe = True
      Exit For
    End If
  Next
  '
  If existe = True Then
    MsgBox "SU CONTRASEÑA ES CORRECTA, BIENVENIDO", , "HOLA"
    '
    'ejecuta otras macros....
    '
  Else
    MsgBox "SU USUARIO NO ES CORRECTO, POR FAVOR VERIFIQUE", vbCritical, "ERROR"
  End If
End Sub
Respuesta
1

Prueba la macro

Private Sub Workbook_Open()
    Dim usuario, Clave As String
    Set P = Sheets("USUARIOS")
    usuario = InputBox("POR FAVOR INGRESE SU NOMBRE DE USUARIO", "USUARIO")
    Clave = InputBox("POR FAVOR INGRESE SU CONTRASEÑA", "CONTRASEÑA")
    If usuario = "" Then Exit Sub
    If Clave = "" Then Exit Sub
    existe = False
    existe2 = False
    Set r = P.Columns("A")
    Set b = r.Find(usuario, LookAt:=xlWhole, LookIn:=xlValues)
        If Not b Is Nothing Then
        existe = True
            If P.Range("B" & b.Row) = Clave Then
            existe2 = True
            End If
        End If
    '
    If existe = True And existe2 = True Then
        MsgBox "SU CONTRASEÑA ES CORRECTA, BIENVENIDO", , "HOLA"
        'codigo
        '
    Else
        MsgBox "no existe"
        'codigo
        '
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas