Ante todo, perdón por la tardanza en contestar, pero no he podido hacerlo antes. Desconozco si pueden activarse o desactivarse los botones como tú lo planteas, pero se me ocurre que puedes insertar un formulario para introducir una contraseña, de modo que, si no es correcta, no permita acceder a la hoja en cuestión. Como no sé cuál es tu nivel con esto del código, intentaré explicarlo lo mejor que sepa.
Me explico:
Necesitarás dos botones y un formulario (que a su vez contendrá dos cuadros de texto con sus respectivas etiquetas y otro botón)
Para probar, coloca en principio dos botones (deberían ser botones de comando control activeX) en el primero (button1) le añades código para acceder a la página que desees:
Vas a la ficha Programador, seleccionas "insertar" y en las herramientas que aparecen en el cuadro en la parte de abajo (controles activeX) seleccionas botón de comando y lo situas donde quieras (haciendo click sobre él una vez colocado, puedes ir a propiedades y cambiar el nombre, el color..., después otro nuevo click y vas a "Ver código" y le añades el siguiente:
Private Sub CommandButton1_Click()
Hoja2.Select
End Sub)
Este botón servirá para que todos puedan utilizarlo (Recuerda ir a Programador una vez puesto el código y desactivar la ficha "Modo diseño")
Ahora, dentro de la ficha programador, pincha en "Ver código" y después en "insertar formulario".
Aparecerá un cuadro de formulario. Haz click sobre él con el botón derecho y ve a propiedades.
En propiedades cambia el nombre (Userform1) por otro (por ej. "Contraseña" y el título ("Caption") por por ej. "Se requiere contraseña". A continuación ve al cuadro de herramientas que debería aparecer al lado del formulario (si no lo ves, en la barra de herramientas de arriba pincha en "Ver" y después selecciona "cuadro de herramientas")
Selecciona la opción cuadro de texto (necesitarás dos) y conforme los colocas, aprovecha para cambiar los nombres (textbox1 podría llamarse "Usuario" y textbox2, "Contraseña". Coloca también dos etiquetas (en este caso da igual que cambies el nombre o no, pero escribe en ellas los mismos que has usado como nombre en los botones y emparéjalas con ellos)
Por último coloca un botón de comando (cambia el nombre del botón y el texto que aparecerá por defecto en "propiedades".
Para acabar haz click con el botón derecho en el botón de comando y teclea este código:
Private Sub CommandButton1_Click()
If Usuario = "yo" And Contraseña = "Admin" Then
Hoja3.Select
Else
MsgBox "El nombre de usuario o la contraseña no es correcto. No estás autorizado para acceder a esa hoja", vbCritical + vbOKOnly, "SE REQUIERE AUTORIZACIÓN"
End If
End
End Sub
Para finalizar, cierra la pantalla de código y ve a la hoja en la que habías colocado los botones.
Selecciona, una vez más la ficha "Programador", después "modo diseño". Haz click con el botón derecho del ratón en el segundo botón (en el que no habías colocado código) y selecciona ver código.
Entre las líneas "Private sub..." y "End Sub" escribe
Contraseña.show (si el nombre que le has dado al formulario es "Contraseña", en otro caso, el nombre que hayas elegido). Quedaría así
Private Sub CommandButton2_Click()
contraseña.Show
End Sub
De este modo, cuando pinchen en el primer botón, accederán a la hoja2, pero al pinchar en el segundo, se les requerirá la contraseña, y si la desconocen, no les permitirá el acceso a la hoja3.
Esto puedes hacerlo en tantos botones como desees, y el formulario podría ser el mismo...