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:
-
Que tanto el usuario como la contraseña estén llenos.
-
Que el usuario ingresado exista en la tabla de usuarios.
-
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
Imagen de la tabla de usuarios
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
















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
Palabras inesperadas, pero bien recibidas.
Tu blog es excelente, muchas gracias por compartir
Saludos
Luis (Chile)
Saludos (México)
excelente, me ha servido de mucha ayuda tus codigos, saludos
Qué bueno.
Saludos !!
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.
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
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.
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 ?
Gracias!
esto me fue de mucha ayuda y no cabe duda q excel no tiene limtes
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
Que tal Luis:
Puedes dar detalles del error que te marca y la línea de código que arroja el error.
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.
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.
Que tal David:
Validé que el link sí esté funcionando, pero de todos modos puedes probar con este otro https://www.dropbox.com/s/7txxpbfv5v4c193/EXCELeINFO%20-%20usuario%20y%20contrase%C3%B1a.zip
En qué línea te marca el error ??
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
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:=Falsebuenos 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…
Si deseas que el usuario sea numérico descarga el mismo ejemplo modificado https://skydrive.live.com/redir?resid=4509FEB32392C17C!2446&authkey=!ALAptIo6BZN9rB0