Login con password cambiar visibilidad hojas

Buenos días,
Necesito hacer un sistema de login para un libro excel, de manera que dependiendo de el usuario que loguée se muestren unas hojas u otras y el resto permanezcan muy ocultas (para quien no lo sepa, Excel tiene tres estados de visibilidad para las hojas de un libro, visible, oculto y muy oculto, la diferencia enrtre oculto y muy oculto es que en oculto las hojas aparecen en un listado de alguna parte y en muy oculto no)
Al hacer esto, me surgen tres problemas:
El primero es que soy novato en VBA (lo mio es el T-SQL) y no sé decirle que cuando se clickee la 'autoforma1' (botón de aceptar) lalala (donde lalala es comprobar el login y cambiar la visibilidad de las hojas que correspondan)
El segundo, aunque me preocupa menos porque está destinado a usuarios con un nivel MUY básico, los nombre de usuario y contraseñas habría que codificarlos 'a capón' con lo cual cualquiera sepa entrar en el modo de macro, podría ver todo los accesos. He pensado en crear una hoja muy oculta donde se la el listado de validación, para que no esté escrito en el código contraseña "Margaritaspower" y complicarlo un poco más, pero si entiende un poco de filosofía de programación podría saber donde mirar. ¿Tenéis alguna idea de como ocultar definitivamente las contraseñas?
El tercero es que debo detectar el evento cerrar libro para interrumpirlo y que antes de cerrar oculte la visibilidad y guarde los cambios.
En resumen, tengo que hacer una macro en Excel que de primeras me parecía una tontería, pero que una vez metidos en faena, no sé hacer.
¿Podríais ayudarme?
Muchas gracias por adelantado y Saludos.
{"lat":43.4210088299473,"lng":-3.8671875}

1 Respuesta

Respuesta
1
Como podréis deducir, soy el mismo que hizo la pregunta, que ya la he resuelto y quiero responder.
Mi planteamiento inicial estaba equivocado, porque desconocía que se pudieran crear formularios. Para crear un formulario, debemos presionar Alt+F11 (para abrir el modo diseño de VBA) y en el menú Insertar seleccionar un Userform. Se abrirá el cuadro de edición y crearemos los siguientes elementos:
2 Labels:
Label1 -> "Nombre de usuario"
Label2 -> "Password"
2 Text Box:
TextBox1 -> para el usuario
Textbox2 -> para el pass
2 CommandButton:
CommandButton1 -> Aceptar
CommandButton2 -> Cancelar
Este es el código que debemos insertar:
Private Sub CommandButton1_Click()
'Definimos el contador i
Dim i As Integer
'comprobamos que el nombre de usuario no esté vacío
If Me.TextBox1 = "" Then
MsgBox "Debe Escribir el usuario", vbExclamation
Exit Sub
End If
'si no está vacío comprobamos si aparece en el listado.
'Si no aparece mostramos un mensaje de erro y solicitamos que lo intente de nuevo
For i = 1 To 10
If Me.TextBox1 = CStr(Hoja1.Cells(i, 1)) And Me.TextBox2 = CStr(Hoja1.Cells(i, 2)) Then
MsgBox "Welcome", vbInformation
Unload Me
'Comprobamos en que posición del listado está, para asignarle las hojas que puede ver.
    If i = 1 Then
    'cambiamos la visibilidad de las hojas correspondientes:
    Worksheets("Hoja5").Visible = -1
    Worksheets("Hoja2").Visible = -1
    Else
        If i = 2 Then
        Worksheets("Hoja5").Visible = -1
        Worksheets("Hoja3").Visible = -1
        Else
            If i = 3 Then
            Worksheets("Hoja1").Visible = -1
            Worksheets("Hoja4").Visible = -1
            Else
                If i = 4 Then
                Worksheets("Hoja1").Visible = -1
                Worksheets("Hoja2").Visible = -1
                Worksheets("Hoja3").Visible = -1
                Worksheets("Hoja4").Visible = -1
                Worksheets("Hoja5").Visible = -1
                End If
            End If
        End If
    End If
Exit For
Else
If i >= 10 Then
MsgBox "Error, Compruebe el Nombre de Usuario y el Password", vbCritical
End If
End If
Next
End Sub
Private Sub CommandButton2_Click()
End
End Sub
NOTA:El código en cursiva, aparecerá automáticamente al hacer doble click en el objeto.
Parte 2, Debemos seleccionar en el visor de proyecto ThisWorkbook e introducir el siguiente código:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Login").Visible = 2
Worksheets("Hoja2").Visible = 2
Worksheets("Hoja3").Visible = 2
Worksheets("Hoja4").Visible = 2
Worksheets("Hoja5").Visible = 2
End Sub
NOTA: Al hacer click nos aparecerá por defecto otro evento que no sea BeforeClose, debemos cambiarlo. Lo que no sé, es si el "Cancel as boolean" es necesario porque es código copiado fusilado y modificado. Supongo que no lo sea.
NOTA: En mi código la hoja1 está renombrada com login y es u listado de los usuarios. Y según en que posición de la lista esté se verán unas hojas u otras.
Fuente: yahoo respuestas -> http://es.answers.yahoo.com/question/index?qid=20091214144912AAVDnIx

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas