Sei sulla pagina 1di 5

Necesito poner en red una aplicacin de excel para 4 usuarios, los cuales tendrn acceso

a ella pero cada uno tendr sus limitaciones, osea, cada uno de estos usuarios tendr solo
permiso para algunas modificaciones de celdas, formatos, etc. y al mismo tiempo se me
ocurre ponerle diferentes contraseas a cada uno para que les defina ah sus permisos y
restricciones. Necesito ayuda en esto se los agradecera mucho.

Experto
Buenos Das: Recibe mis cordiales saludos, para generar una cantidad de usuarios, dentro
de tu aplicacin de excel, debes de crear una hoja donde debes tener los siguientes
encabezados. Por ejemplo:
Usuario Contrasea
Columna A columna B
2 Usuario1 1234
3 Usuario2 12345
4 Usuario3 123456
5 UsuarioN ...
El cdigo para validar los usuarios es el siguiente: Te explico, yo cargue mis usuarios en
un combobox, en una caja de texto tengo que ingresar la contrasea, y validarla con el
botn ingresar, este es el cdigo que realize, acoplalo a lo que estas necesitando.
Application.ScreenUpdating = False
On Error GoTo Errorusuario
Dim strClaveUser$
strClaveUser$ = Application.WorksheetFunction.VLookup(CmbUsuario,
Worksheets("Nombre del LIbro").range("A2:B5"), 2)
If TxtContrasea <> strClaveUser$ Then
MsgBox "Contrasea Incorrecta", vbCritical, "ERROR"
TxtContrasea = ""
Exit Sub
Application.Visible = True
End If
If CmbUsuario.Text = "Usuario1" Then
FrmIngresoSistema.Hide
FrmAnalisisCostos.Show
Exit Sub
End If
Exit Sub
Errorusuario:
MsgBox "Ingrese: Usuario y/o contrasea", vbInformation, "VERIFICAR"
Application.ScreenUpdating = True
End Sub
En el caso de los permisos, te doy una idea, si seleccionar un usuario e ingresas su
contrasea dentro de tu programacin tienes que asignarle permisos, por ejemplo:
If CmbUsuario.Text = "Usuario1" Then ' Si el usario de tu combobox es usuario1, y la
contrasea que has ingresado corresponde al usario1, te mostrara la siguiente :
' Abre libro
Application.Workbooks.Open "C:\Analisis de costos\Costos\Trujillo Costos 2009.xls"
'Activa la Hoja
Workbooks("Trujillo Costos 2009.xls").Worksheets("Hoja1").Activate
' Codigo:Proteger y desproteger una hoja
ActiveSheet.Unprotect Password:="12345"
Worksheets("Hoja1").Unprotect Password:="12345"
elseIf CmbUsuario.Text = "Usuario2" Then ' Si el usario de tu combobox es usuario2, y la
contrasea que has ingresado corresponde al usario1, te mostrara la siguiente :
' Abre libro
Application.Workbooks.Open "C:\Analisis de costos\Costos\Trujillo Costos 2009.xls"
'Activa la Hoja
Workbooks("Trujillo Costos 2009.xls").Worksheets("Hoja1").Activate
' el usuario2, ingresa sin ninguna proteccion a la hoja 1
Exit Sub
De esta manera puedes ortotgarle permisos a un usuario. Espero poderte haber ayudado,
saludos.

Estimados, tengo un archivo excel el cual al abrirlo pide usuario y contrasea, este
funciona bien, el problema esta que si agrego una letra que contenta el usuario y/o la
contrasea deja entrar o ingreso con un nombre de usuario POR y me deja entrar con la
contrasea de otro. Cmo puedo hacer para que el usuario y contrasea sean exactos?
Este es el cdigo que uso:

Private Sub ACEPTAR_Click()


user = TBX_USUARIO.Value
Sheets("UserPass").Visible = True
Sheets("UserPass").Select
Range("A1:A8").Select
On Error Resume Next
Set u = Selection.Find(What:=user)
'Selection.FindNext(After:=ActiveCell).Activate
If u Is Nothing Then
MsgBox "Usuario Incorrecto", vbInformation, "Error"
TBX_USUARIO = ""
TBX_CLAVE = ""
TBX_USUARIO.SetFocus
Application.DisplayAlerts = False
Exit Sub
End If
pass = TBX_CLAVE.Value
Range("B1:B8").Select
On Error Resume Next
Set c = Selection.Find(What:=pass)
'Selection.FindNext(After:=ActiveCell).Activate
If c Is Nothing Then
MsgBox "Contrasea Incorrecta", vbInformation, "Error"
TBX_USUARIO = ""
TBX_CLAVE = ""
TBX_USUARIO.SetFocus
Application.DisplayAlerts = False
Else
Sheets("UserPass").Visible = xlSheetVeryHidden
Unload Me
Application.Visible = True
End If
End Sub

Saludos y gracias.

Experto
Hola

Mira cero que tu enfoque esta mal orientado, pues utilzias la funcin buscar y no en forma
exacta, pues de esa manera el find te devuelve la coincidencia ms prxima y no exacta.
Prueba de esta manera:

Dim user As String


Dim pass As String
Dim R As Range
Dim fila As Integer
user = UCase(Trim(TBX_USUARIO))
pass = UCase(Trim(TBX_CLAVE))
fila = Application.WorksheetFunction.CountA(Sheets("UserPass").Range("A:A"))
For Each R In Sheets("UserPass").Range("A1" & ":" & "A" & fila)
If UCase(R) = user Then
If UCase(R.Offset(0, 1)) = pass Then
Unload Me
Application.Visible = True
'aca pones el resto del codigo para el evento que usuario y contrasea sean ok
Exit For
Else
MsgBox "Usuario o Contrasea Incorrecto", vbInformation, "Error"
Exit For
End If
DoEvents
End If
DoEvents
Next
Set R = Nothing
TBX_USUARIO = ""
TBX_CLAVE = ""
On Error Resume Next
TBX_USUARIO.SetFocus

Es ms sencillo, pues recorres el rango de la hoja de usuarios hasta que encuentra el


usuario exacta y luego si el usuario existe, comprueba la contrasea que se haya en la
columna a la derecha, pues bien, una vez que comprueba que usuario y contrasea son
los mismos que ingreso el usuario, pues se sale del bucle. As no sigues recorriendo
intilmente el rango.

Ahora si me permites una opinin, creo que tener usuarios y contraseas en una hoja
dentro del mismo libro que intentas proteger no es lo ms adecuado.

excel (v2007) cuenta con la manera de otorgar accesos controlados mediante usuarios y
contrasea cifrados, lo encuentras en la pestaa "Revisar" opcin "Permitir que los
usuarios modifiquen rangos".

O bien, piensa en alojar la lista de usuarios y password en un archivo externo ( en lo


posible cifrado) que luego puedas leer desde excel. No se es mi humilde opinin. En fin

Si te sirve el script que te facilito en esta oportunidad, CIERRA la pregunta.

bye

Usuario
Funciona amigo, pero si no ingreso nada o ingreso con user no registrado, no me dice que
el user o contrasea estn incorrectas, me limpia los textbox y me deja en el 1. gracias por
tu tiempo.

Experto
Dim user As String
Dim pass As String
Dim fila As Integer
Dim ex As Boolean
user = UCase(Trim(TBX_USUARIO))
pass = UCase(Trim(TBX_CLAVE))
If Len(user) = 0 Or Len(pass) = 0 Then MsgBox "Ingrese usuario y contrasea",
vbInformation: Exit Sub
fila = Application.WorksheetFunction.CountA(Sheets("UserPass").Range("A:A"))
If fila = 0 Then Exit Sub
Dim R As Range
ex = False
For Each R In Sheets("UserPass").Range("A1" & ":" & "A" & fila)
If UCase(R) = user Then
If UCase(R.Offset(0, 1)) = pass Then
ex = True
Unload Me
Application.Visible = True
'aca pones el resto del codigo para el evento que usuario y contrasea sean ok
Exit For
Else
MsgBox " Contrasea Incorrecta", vbInformation, "Error"
Exit For
End If
DoEvents
End If
DoEvents
Next
Set R = Nothing
If ex = False Then MsgBox "Usuario no registrado", vbCritical
TBX_USUARIO = ""
TBX_CLAVE = ""
On Error Resume Next
TBX_USUARIO.SetFocus

Si te sirve el script que te facilito en esta oportunidad, CIERRA la pregunta.

Potrebbero piacerti anche