Hola:
Mediante programación VBA, en el evento WorkBook_Open() del libro leo la variable de entorno "username", y en base a eso recorro todas las hojas y las muestro o no.
Public Sub WorkBook_Open()
Dim UserName As String, oSh As WorkSheet
UserName = Environ$("username")
For Each oSh In ThisWorkBook.WorkSheets
If <¿este usuario puede ver esta hoja?> Then
oSh.Visible = xlVisible
Else
oSh.Visible = xlVeryHidden
End If
Next
End Sub
Obviamente <¿este usuario puede ver esta hoja?> es una función que deberías definir tu. Existen múltiples posibilidades, tener una tabla con la relación usuario/hoja, nombres en las hojas, o cualquier cosa que te quieras/puedas inventar.
Un 'truco' para evitar que abran el libro sin macros y lo vean todo es tener en el evento BeforeClose código que oculte TODAS las hojas antes de guardar. Como es OBLIGATORIO que exista una hoja visible siempre, yo suelo tener una hoja de 'AVISO' que se muestra siempre, con instrucciones del libro o notas para los usuarios.
Public Sub WorkBook_BeforeClose(Cancel As Boolean)
Dim oSh As WorkSheet
For Each oSh In ThisWorkBook.WorkSheets
If oSh.Name = "AVISO" Then
oSh.Visible = xlVisible
Else
oSh.Visible = xlVeryHidden
End If
Next
End Sub
De esta forma el libro SIEMPRE se guarda con todas las hojas ocultas, y solo se mostraran al abrir.
Es una guía básica que espero que te sirva...
Un saludo