Facebook Twitter Gplus Flickr Pinterest LinkedIn YouTube RSS
Home Excel Simular acceso con usuario y password en Excel con formulario vba
formats

Simular acceso con usuario y password en Excel con formulario vba

En esta ocasión les comparto un ejemplo donde se simula el acceso a un sistema mediante el ingreso de un Usuario y una Contraseña.

Lo vamos a realizar mendiante un formulario de vba que nos pida y nos valide los siguientes datos:

  1. Que tanto el usuario como la contraseña estén llenos.
  2. Que el usuario ingresado exista en la tabla de usuarios.
  3. Que coincida el usuario ingresado con su contraseña.

Para validar que usuario existe se hace mediante la función COUNT.IF de vba; para elegir al usuario encontrado se hace con el método Find; y por último para validar que el usuario y la contraseña coincidan, se realiza haciendo un Offset de la celda encontrada.

Imagen del formulario de acceso

image

Imagen de la tabla de usuarios

image

Código del formulario

':: By: Sergio Alejandro Campos Hernández
':: Date: marzo de 2012
':: http://exceleinfo.wordpress.com
':: Purpose: simular acceso con usuario y contraseña
'
Private Sub CommandButton2_Click()
Dim usuario As String
Dim password As Variant
Dim DatoEncontrado
Blog = "EXCELeINFO"
UsuarioExistente = Application.WorksheetFunction.CountIf(Range("D3:D12"), _
    Me.txtUsuario.Value)
Set Rango = Range("D3:D12")
If Me.txtUsuario.Value = "" Or Me.txtPassword.Value = "" Then
    MsgBox "Por favor introduce usuario y contraseña", vbExclamation, Blog
    Me.txtUsuario.SetFocus
ElseIf UsuarioExistente = 0 Then
    MsgBox "El usuario '" & Me.txtUsuario & "' no existe", vbExclamation, Blog
ElseIf UsuarioExistente = 1 Then
    DatoEncontrado = Rango.Find(What:=Me.txtUsuario.Value, MatchCase:=True).Address
    Contrasenia = Range(DatoEncontrado).Offset(0, 1).Value
    If Range(DatoEncontrado).Value = Me.txtUsuario.Value And Contrasenia = _
    Me.txtPassword.Value Then
        Range("G2").Value = "Usuario: " & Range(DatoEncontrado).Offset(0, -1).Value
        'Aquí va el código para dar acceso a todo lo que el programador decida
        Unload Me
    Else
        MsgBox "La contraseña es inválida", vbExclamation, Blog
    End If
End If
End Sub

:: Descargar el ejemplo

 
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn
25 Comments  comments 

25 Responses

  1. RAMON VAZQUEZ

    te agradezco todas las aportaciones me he convertido en un adicto EMPIRICO de programacion excel es tan hermoso y mas con personas como tu que hacen un gran aporte de antemano mil gracias

  2. Luis Hernandez

    Tu blog es excelente, muchas gracias por compartir

    Saludos

    Luis (Chile)

  3. Juan Carlos

    excelente, me ha servido de mucha ayuda tus codigos, saludos

  4. hadadeamor

    hola Sergio ; una pregunta.. en donde dice que ‘ahi va el codigo que el usuario decida dar acceso.. como que hiria.. ; ya que te comento tengo un libro que kiero implementarle este valioso aporte tuyo, pero las otras macros pequeñas que tengo estan en cada hoja que tengo… mi libro esta conformado por cinco hojas que contienen macros , como puedo hacer..
    saludos..

    • El código que podrías implementar es alguno que te oculte las demás hojas si es que decides que no las vean si no ingresan un password correcto.

      Conforme al código de cada hoja te recomiendo que todas tus macros las pongas en un módulo independiente y las mandas llamar desde cada hoja.

  5. Alejandro Nahuelhual

    Hola Sergio, junto con saludarte y agradecerte por el tiempo que dedicas al foro haciendo las cosas complicadas más simple para nosotros, los novatos, bien, mi pregunta es la sgte. Tu VBA esta excelente, sólo necesito que el usuario y clave lo muestre al momento de abrir el archivo, si no encuentra coincidencias, simplemente que no abra nada, a diferencia de ahora, aunque le des cerrar igualmente te deja ver las demas hojas.

    Alejandro Nahuelhual
    Chile

    • Para que se muestre al momento de abrir el archivo, debes especificarlo en el objeto ThisWorkbook con la instrucción:

      Private Sub Workbook_Open()
      UserForm1.Show
      End Sub

      Para que si la contraseña está incorrecta o no, utiliza la siguiente línea como se te acomode mejor:

      Sheets(“Hoja2″).Visible = False

  6. Alejandro Nahuelhual

    Sergio, nuevamente yo, jejejeje, pasa que pude hacer lo que te pedi anteriormente, pero ahora me toco ver que si coloco el usuario por error con mayuscula, me da un error 91, el cual me lleva directamente a VBA, la idea es que tampoco lo deje pasar ó que le diga que el usuario es incorrecto, se entiende????, me podrias ayudar con eso?

    Alejandro Nahuelhual

    • Para esto sólo cambia la línea siguiente:

      DatoEncontrado = Rango.Find(What:=Me.txtUsuario.Value, LookAt:=xlWhole, MatchCase:=False).Address

      A la línea anterior solo le agregué LookAt:=xlWhole

      Y mi recomendación es que tanto el texto que tengas en tu tabla como el introducido en el TextBox sea mayúscula o minúscula.

  7. JORGE PALACIOS

    Saludos Sergio, soy algo obstinado y trato de pedir ayuda. siento mucho si te inoportuno
    me podrias dar tu opinion sobre mi codigo por favor

    SE ME OCURRIO HACER OTRO FORMULARIO PARA OTRO USUARIO QUE REQUIERE ACCESO PERO CON OTRAS FUNCIONES POR ASI DECIRLO. LO QUE PASA ES QUE ME TOMA COMO SI FUESE EL MISMO QUE EL CODIGO ANTERIORO ME DA ACCESO PERO PASA DERECHO AL MsgBox Y LUEGO ME SACA

    ESTE ES EL CODIGO DEL FORMULARIO EN EL CUAL TENGO LOS BOTONES PARA ABRIR LOS FORMULARIOS DE ACCESO

    Private Sub UserForm_Activate()

    Application.Visible = True

    End Sub

    ESTE ES EL CODIGO DE MI FORMULARIO DE ACCESO

    Private Sub CMBCU1_Click()

    If TXT1.Text = “ADMIN” And TXT2.Text = “ADMIN” Then
    Ingreso = True
    Sheets(“INICIO”).Visible = True
    Sheets(“CLIENTES”).Visible = True
    Sheets(“INVENTARIO”).Visible = True
    Sheets(“PRODUCTOS”).Visible = True
    FRMMENU.Show

    Else
    Ingreso = False
    Sheets(“CLIENTES”).Visible = False
    Sheets(“INVENTARIO”).Visible = False
    Sheets(“PRODUCTOS”).Visible = False

    End If

    Sheets(“INICIO”).Select
    MsgBox (” Ingrese Usuario y Contraseña?”)
    Unload Me

    End Sub

    HASTA AHI REBIEN.

    SE ME OCURRIO HACER OTRO FORMULARIO PARA OTRO USUARIO QUE REQUIERE ACCESO PERO CON OTRAS FUNCIONES POR ASI DECIRLO. LO QUE PASA ES QUE ME TOMA COMO SI FUESE EL MISMO QUE EL CODIGO ANTERIORO ME DA ACCESO PERO PASA DERECHO AL MsgBox Y LUEGO ME SACA

    Private Sub CMBCU3_Click()

    If TXT3.Text = “USER” And TXT4.Text = “USER” Then
    Ingreso = True
    Sheets(“ACCESO ADMINISTRADOR”).Visible = True
    Sheets(“CLIENTES”).Visible = True
    Sheets(“INVENTARIO”).Visible = True
    Sheets(“PRODUCTOS”).Visible = True
    FRMBIENVENIDOADMIN.Show

    Else
    Ingreso = False
    Sheets(“CLIENTES”).Visible = False
    Sheets(“INVENTARIO”).Visible = False
    Sheets(“PRODUCTOS”).Visible = False

    End If

    Sheets(“INICIO”).Select
    MsgBox (” Ingrese Usuario y Contraseña?”)
    Unload Me

    End Sub

    • Según tu código:

      Sheets(“INICIO”).Select
      MsgBox (” Ingrese Usuario y Contraseña?”)
      Unload Me

      Te selecciona la hoja INICIO, te muestra el formulario y después lo cierra. Es correcto el funcionamiento ?

  8. emmxnuel

    Gracias! ;) esto me fue de mucha ayuda y no cabe duda q excel no tiene limtes :D

  9. luis ortiz

    saludos sergio, sabes me base en tu codigo para poder hacer mi pantalla de acceso, pero por alguna razon no me toma datos en DatoEncontrado no toma el valor de la caja de texto

    ElseIf UsuarioExistente = 1 Then

    DatoEncontrado = Rango.Find(What:=Me.TextBox1.Value, LookAt:=xlWhole, MatchCase:=False).Address

    Contrasenia = Range(DatoEncontrado).Offset(0, 1).Value

    If Range(DatoEncontrado).Value = TextBox1.Value And Contrasenia = TextBox2.Value Then
    Range(“G2″).Value = “Usuario: ” & Range(DatoEncontrado).Offset(0, -1).Value

  10. Manuel Ramirez

    Buenas tardes sergio realice una entreda de usuario y contraseña me sucede lo mismo que luis los datos a encontrar son numericos pero me arroja error en esta linea “DatoEncontrado = Rango.Find(What:=Me.TextBox1.Value, LookAt:=xlWhole, MatchCase:=False).Address”.
    que puedo hacer en este caso.

    • Ubica éstas líneas:

      Contrasenia = Range(DatoEncontrado).Offset(0, 1).Value
      If Range(DatoEncontrado).Value = Me.txtUsuario.Value And Contrasenia = _

      Y reemplázalas con éstas:

      Contrasenia = CStr(Range(DatoEncontrado).Offset(0, 1).Value)
      If CStr(Range(DatoEncontrado).Value) = Me.txtUsuario.Value And Contrasenia = _

      Se hace la conversión de número a texto para que funcione con passwords numéricos.

  11. David Franco

    Buenos dias Sergio, dos cositas, la priemra es que el link de descarga ya no esta activo, haber si porfavor podrias enviarmelo a este correo: qffranco@gmail.com. Lo segundo es que copie tu codigo pero al ir ejecutandolo por pasos me sale el siguiente error: “erro de compilacion el uso de la palabra me no es valido. Uso excel 2007. Ya he copiados otras macrso con este me y me sale el mismo error, por que otroa propiedad podria reemplazarlo o que puedo hacer?. Por ultimo felicitaciones por compartir sus conocimientos. Muchas gracias.

  12. Antonio

    Muchísimas gracias por tus estupendos aportes. El formulario tiene un problema, si le das a “cerrar”, accedes al libro sin necesidad de usuario y contraseña. ¿Cómo se soluciona esto?
    Saludos

    • Sergio Alejandro Campos

      El archivo no se cierra para que puedan ver el código y aplicarlo según sus necesidades.

      Si quieres que se cierre el archivo, asignale el siguiente código en el botón cerrar:

      Activeworkbook.Close SaveChanges:=False

  13. angel

    buenos dias… muchas gracias por este valioso aporte, tengo una duda… quisiera que lo nombres de usuario fueran numericos y el programa hiciera lo mismo, como se logra esto? gracias de antemano por la respuesta…

Sistema Wordpress corriendo bajo... Windows Server 2008 R2
Follow

Get every new post delivered to your Inbox

Join other followers