|
20/06/2003
Experto
|
Hola, Chavez
Me sorprende que tengas que desarrollar un procedimiento como el que solicitas, ya que supone un conocimiento de Visual Basic for Applications bastante avanzado. Por lo menos no parece para alguien que apenas está aprendiendo a manejar Excel, como tu dices.
Pero, bueno, intentaré ayudarte.
Para hacerlo simple, evitaremos el uso de Formularios (Userforms) porque supone un manejo de controles ActiveX que no sé si tienes.
Un Cuadro de diálogo (Inputbox) cumple el mismo cometido y no necesita diseño alguno (de todos modos, si al aplicar este procedimiento, realmente necesitas un Formulario, podremos mejorarlo de a poco)
Entonces, Chavez, para empezar, activa el editor de Visual Basic (presiona Alt+F11) y busca la hoja que dice "ThisWorkbook" (o "EsteLibro" según la versión")
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:
Private Sub Workbook_Open()
DefUsuario
End Sub
---
Hasta aquí sólo le indicaste que al abrir el libro se ejecute la macro "DefUsuario" que será la encargada de hacer el control de la clave.
Esta macro estará en un módulo nuevo que debes insertar. ("Insertar", "Módulo"):
Sub DefUsuario()
'Ingreso de clave para selección de modalidad
Dim C_Chances, C_Error, Adminis, Autoriz, Lector
'Definir aquí las claves para cada usuario:
Autoriz = "Clave"
C_Chances = 3 'cantidad de veces que puede reintentar ingreso de clave
'------------------------------------------
Application.EnableEvents = True
Application.EnableCancelKey = xlDisabled
10: ClaveX = InputBox("Por favor, ingrese su clave:", "Identificación de Usuario")
If ClaveX <> "" Then
Application.ScreenUpdating = False
MuestraTo
Select Case ClaveX
Case Autoriz
'Permite acceder al archivo.
'Muestra un mensaje de bienvenida pero puedes borrarlo
'y reemplazarlo por las acciones que quieres que haga al entrar, o por nada:
Sheets("Hoja1").Select
MsgBox "Bienvenido", vbExclamation, "Contraseña verificada"
Case Else
'Contraseña incorrecta
Application.EnableCancelKey = xlDisabled
C_Error = C_Error + 1
If C_Error < C_Chances Then
Application.ScreenUpdating = True
MsgBox "Contraseña incorrecta" & Chr(10) & "Ingrese nuevamente" & Chr(10) & "Le quedan " & C_Chances - C_Error & " chance" & IIf(C_Chances - C_Error = 1, "", "s"), vbInformation, "ERROR en CLAVE INGRESADA"
GoTo 10:
Else
Application.DisplayAlerts = False
Application.Quit
End If
End Select
Else
Application.EnableCancelKey = xlDisabled
Application.ScreenUpdating = True
MsgBox "No indicó clave" & Chr(10) & "Por lo tanto, cierro archivo" & Chr(10), vbInformation, "NECESITA CLAVE PARA OPERAR"
ActiveWorkbook.Close False
End If
Application.ScreenUpdating = True
End Sub
Bien, En el código deberás colocar la clave que habilitará el archivo. Allí donde dice:
Autoriz = "Clave"
Como verás, la contraseña está explícita en el procedimiento de Visual Basic.
Por tal razón, es conveniente que todo el proyecto de VBA estuviese también protegido para que el usuario no pueda leer el código y, eventualmente, descubrir cual es la clave.
Para ello, accede al Editor de Visual Basic, en su Navegador de Proyectos, busca el de tu archivo ?cierra todos los elementos que tenga asociado- haz click derecho sobre él. Elige ?Propiedades del VBA Project?. Selecciona la solapa de Protección, marca la casilla de ?Bloquear proyecto para visualización? y también ingresa otra contraseña aquí.
Notarás algnas notas dentro de la macro que te orientará en qué está pasando. De todos modos, me quedan algunas consideraciones adicionales:
Este archivo funciona íntegramente sobre la base de macros de VBA. Por tanto, es necesario que el usuario habilite las mismas al abrir el archivo.
Si el usuario no ingresa ninguna de estas la macro le avisará y tendrá tres oportunidades para escribir una correcta (también puedes modificarle en el código la cantidad de reintentos). Excedido el límite, la macro cerrará el archivo y Excel (en castigo).
Si en la pantalla de ingreso de clave, no se proporciona ninguna, se cerrará el archivo inmediatamente.
Desde luego, este es un esquema muy simple de protección que puede mejorarse. Pero considerando que recién empiezas no quise complicarlo más.
Espero que esto ayude a resolver tu problema.
Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)
Un abrazo!
Fernando
"Me lo explicaron y lo olvidé,
lo leí y lo entendí,
lo hice y lo aprendí".
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
A cambio de mi tiempo, sólo te pido dos cosas:
- Finaliza (con puntaje y comentario) esta pregunta
- Ingresa al sitio www.porloschicos.com y, si quieres,
presiona el botón de donación (es gratis).
Confío en que lo harás. Por ambas cosas, muchas gracias.
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
|