ungefähr so:

'Klassen Modul: ThisWorkbook / DieseArbeitsmappe
Option Explicit
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Call modView.UpdateView
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call modView.UpdateView(CoverSheetOnly:=True)
End Sub
Private Sub Workbook_Open()
Call modView.UpdateView
End Sub
'Modul: modView
Option Explicit
Public Sub UpdateView(Optional CoverSheetOnly As Boolean = False)
Dim blnSupervisor As Boolean
Dim blnEmployee As Boolean
Dim strUsername As String
strUsername = LCase$(Environ$("username"))
'LCase = Benutzername in Kleinbuchstaben
Select Case strUsername
' # Mitarbeiter
Case "inge"
blnEmployee = True
' # Vorgesetzte
Case "peter"
blnSupervisor = True
' # alle anderen
Case Else
blnSupervisor = False
blnEmployee = False
End Select
Dim wks As Excel.Worksheet
If blnSupervisor Then
'alle Blätter anzeigen
For Each wks In ThisWorkbook.Worksheets
wks.Visible = xlSheetVisible
Next
ElseIf blnEmployee Then
'Deckblatt anzeigen
tblCoverSheet.Visible = xlSheetVisible
'spezifisches Blatt von Mitarbeiter anzeigen
' Blätter aller anderen Mitarbeiter verbergen
For Each wks In ThisWorkbook.Worksheets
If wks.Name <> tblCoverSheet.Name Then
If 0 = StrComp(wks.Name, strUsername, vbTextCompare) _
And CoverSheetOnly = False _
Then
wks.Visible = xlSheetVisible
wks.Activate
Else
wks.Visible = xlSheetVeryHidden
End If
End If
Next
Else
'Deckblatt anzeigen
tblCoverSheet.Visible = xlSheetVisible
'alle anderen Blätter verbergen
For Each wks In ThisWorkbook.Worksheets
If wks.Name <> tblCoverSheet.Name Then
wks.Visible = xlSheetVeryHidden
End If
Next
End If
End Sub
PS: Sei dir bitte darüber im Klaren, dass das nicht 100%ig sicher ist - das kann durchaus umgangen werden (wer das darauf anlegt, der findet einen Weg).
Sicher wäre nur, wenn du jedem Mitarbeiter seine eigene Mappe gibst.
Grüße
|