Hipervínculos con contraseña antes de ir al destino

Tengo una hoja en un libro de excel que actúa como índice, donde cada celda tiene un hipervínculo que me lleva a cada hoja del libro. Mi pregunta es ¿cómo hacer para que al momento de dar click sobre cada hipervínculo se abra un cuadro que me pida una contraseña y en caso de ser esta correcta me dirija a la hoja correspondiente. Las contraseña son distintas para cada hoja. Suena muy sencillo, pero no sé si se pueda hacer.

1 respuesta

Respuesta
1

Normalmente la solución sería poner un código en cada hoja, con la contraseña y con el evento que controle si se da el acceso o no...

Con un hipervínculo, Excel te direcciona a la hoja... de esto Excel solo recupera el evento de haber hecho clic en el evento indicando el hipervínculo desde el cual se hizo clic... es un poco difícil así controlar... pero se me ha ocurrido algo..

estoy suponiendo lo siguiente...

1) Si tienes una hoja INDICE (y de hecho en mi macro la he llamado así) que te permita/restrinja el acceso a las otras, las otras tienen que estar ocultas... si no no tendría sentido la restricción, cualquier usuario podría hacer el click directo en las hojas...

Asumo: que la hoja índice se llama INDICE (puedes cambiar en la macro, las dos veces que se hace mención a esa hoja para adecuar a tu archivo).

2) Asumo que has creado los hipervínculos con la herramienta hipervínculo de Excel, por lo tanto, los links están en celdas... no en dibujos

Copia este código en un módulo normal (de los comunes, no los de hoja).

Public Sub gor(d As String)
    Range(d).Select
End Sub

y copia este código en el MODULO DE LA HOJA que tengas como INDICE  (revisa que en el código figura 2 veces la palabra INDICE, cambia eso a como se llame de verdad tu hoja)

Option Compare Text
Private Sub Worksheet_Activate()
Dim eHoja As Worksheet
For Each eHoja In Worksheets
    If eHoja.Name <> "INDICE" Then eHoja.Visible = xlSheetVeryHidden
Next eHoja
End Sub
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim clave As String
Dim destino As Worksheet
Dim direc As String
Dim hoja As String
Application.ScreenUpdating = False
clave = Application.InputBox("Necesita introducir la contraseña para acceder a la hoja", "AVISO", , , , , , 2)
DoEvents
If Not (clave = passw(Target.Range)) Then
    Sheets("INDICE").Select
    MsgBox "Contraseña equivocada", vbCritical, "ERROR"
Else
    hoja = Replace(Left(Target.Name, InStr(1, Target.Name, "!") - 1), "'", "")
    direc = Mid(Target.Name, InStr(1, Target.Name, "!") + 1)
    Sheets(hoja).Visible = xlSheetVisible
    Sheets(hoja).Select
    gor direc
End If
Application.ScreenUpdating = True
End Sub
Function passw(rango As Range) As String
' Aqui van las contraseña, segun las celdas en donde están los hipervinculos
Select Case Replace(rango.Address, "$", "")
Case "A1"
    passw = "hola1"
Case "A2"
    passw = "hola2"
Case "A3"
    passw = "hola3"
End Select
End Function

En las ultimas lineas pondrás las contraseñas, según la celda en donde se encuentren los hipervinculos.

Hola

Sí, todas las suposiciones son correctas. Son hipervínculos, no dibujos. A la hoja índice la llamé INDICE en tu honor y oculté todas las demás hojas. Puse los códigos y todo parecía ir bien, pero al poner la contraseña y darle aceptar me mandó el mensaje "Se produjo el error '5' en tiempo de ejecución: Argumento o llamada a procedimiento no válida", AL depurar, me envía al editor de VB en la linea 20 del código marcada en amarillo: hoja = Replace(Left(Target.Name, InStr(1, Target.Name, "!") - 1), "'", "").

¿Que crees que pueda ser?

A mi me funcionó sin problemas. Cuando VB da un error de ese tipo solo queda ejecutar el código paso a paso para revisar donde esta el problema... que puede ser algún tipo de configuración diferente en tu PC

Si quieres pásame el archivo y lo reviso.

[email protected]

Hola

Voy a poner aquí lo que me contestaste por mail, porque creo que es importante que le sirva a otros usuarios:

"Es que cambiaste lo que decía la celda... pero no hay problema, usamos otra propiedad...

Corre el link... y cuando salga el error, elige Depurar...

Te aparecerá una parte del código con una línea marcada en amarillo...

En esa línea, y en la que está inmediatamente despues figura 4 veces la palabra    Name

Debes cambiarla por   SubAddress               (en las 4 apariciones)

Acepta los avisos posteriores cierra la ventana del código y listo

Saludos,

Jaime"

Con esto me funcionó perfecto, esconde todas las pestañas en automático y sólo puedo acceder a la que corresponde la contraseña indicada. Muchas gracias.

Ahora sólo le veo un problema. Si abro el editor de VB puedo ver en el código todas las contraseñas que se encuentran en el libro y cualquiera con conocimientos mínimos puede verlas. ¿Cómo hago para esconder el módulo donde se encuentran?

Saludos.

Ya resolví la parte de la protección del módulo en VB opción protegiendo el proyecto en el menú Herramientas / Propiedades de VBAProject, en la ficha protección marqué Bloquear proyecto para visualización y le puse contraseña.

Ahora me gustaría saber si se le puede hacer algo al inputbox para que al momento de ingresar la contraseña sólo aparezcan asteriscos (*****). ¿Sabes si se puede hacer?

Saludos.

Con un Inputbox (función nativa del VBA) no puedes.

Para hacerlo, tienes que usar un verdadero formulario... con un control ActiveX, eso si hay que hacerlo en el mismo archivo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas