Bien, imaginé entonces:
- Una hoja llamada 'Resumen'
-3 usuarios: Ana, Juan, Camila
-Cada usuario tiene un conjunto de col: A:C, E:G y P:R respectivamente.
Podrás colocar el primer código en el evento Open del libro o en el evento Activate de la hoja, haciendo la llamada:
Private Sub Workbook_Open()
Call Permisos
End Sub
Luego en un módulo coloca cada macro ;
Sub Permisos()
'x Elsamatilde
'va en el evento Open o al activar la hoja (evento Worksheet_Activate)
Dim usua As String
usua = InputBox("Ingresa tu usuario")
Select Case usua
Case Is = "Ana"
Call muestraAna
Case Is = "Juan"
Call muestraJuan
Case Is = "Camila"
Call muestraCamila
End Select
End Sub
y las que se llaman desde los Case:
Sub muestraAna()
'desproteje la hoja
Sheets("Resumen").Select
ActiveSheet.Unprotect "tu_clave"
ActiveSheet.Columns("A:C").Hidden = False
ActiveSheet.Protect "tu_clave"
End Sub
Sub muestraJuan()
'desproteje la hoja
Sheets("Resumen").Select
ActiveSheet.Unprotect "tu_clave"
Columns("E:G").Hidden = False
ActiveSheet.Protect "tu_clave"
End Sub
Sub muestraCamila()
'desproteje la hoja
Sheets("Resumen").Select
ActiveSheet.Unprotect "tu_clave"
Columns("P:R").Hidden = False
ActiveSheet.Protect "tu_clave"
End Sub
Además necesitas otra macro que debe ser llamada cuando el usuario abandona su tarea, y deben ser colocadas en el evento Deactivate de la hoja y también en el evento BeforeClose y/o BeforeSave para evitar que quede alguna copia con las col visibles.
Por ej:
Private Sub Worksheet_Deactivate()
Call ocultaCol
End Sub
Y en el módulo ésta otra:
Sub ocultaCol()
ActiveSheet.Unprotect "tu_clave"
Sheets("Resumen").Columns("A:C").Hidden = True
Sheets("Resumen").Columns("E:G").Hidden = True
Sheets("Resumen").Columns("P:R").Hidden = True
ActiveSheet.Protect "tu_clave"
End Sub
Reemplazá nombre de hojas, columnas y usuarios. Luego comentame.
Sdos.
Elsa
500Macros