ich betreue ein Excel-Projekt mit VBA-Makros im Freigabemodus. Es sind darin vertrauliche Daten enthalten, die nicht jeder sehen darf, der auch Zugriff auf die Datei hat. Aus diesem Grund werden mittels Event beim Schließen alle Reiter mit "veryhidden" ausgeblendet und nur ein Dummy-Sheet (SL) eingeblendet.
Öffnet man die Datei, wird über Workbook-Open der aktuelle Anwender abgefragt. Die berechtigten Mitarbeiter sind in einer entsprechenden Tabelle namentlich eingepflegt, dazu noch eine Berechtigungsstufe als Buchstabe. Nach Feststellen der Berechtigungsstufe werden die Sheets eingebledet.
Bisher habe ich das so gelöst:
Select Case Berechtigungsstufe
Case "G":
Sheets(SG).Visible = xlSheetVisible
Sheets(SB).Visible = xlSheetVisible
Sheets(SM).Visible = xlSheetVisible
Sheets(SH).Visible = xlSheetVisible
Sheets(SA).Visible = xlSheetVisible
Sheets(SP).Visible = xlSheetVisible
Sheets(SJ).Visible = xlSheetVisible
Sheets(SV).Visible = xlSheetVisible
Sheets(SE).Visible = xlSheetVisible
Sheets(SL).Visible = xlSheetHidden
Case "K":
Sheets(SH).Visible = xlSheetVisible
Sheets(SA).Visible = xlSheetVisible
Sheets(SP).Visible = xlSheetVisible
Sheets(SJ).Visible = xlSheetVisible
Sheets(SV).Visible = xlSheetVisible
Sheets(SE).Visible = xlSheetVisible
Sheets(SL).Visible = xlSheetHidden
Case "Q":
Sheets(SP).Visible = xlSheetVisible
Sheets(SV).Visible = xlSheetVisible
Sheets(SE).Visible = xlSheetVisible
Sheets(SL).Visible = xlSheetHidden
Case "E":
Sheets(SE).Visible = xlSheetVisible
Sheets(SL).Visible = xlSheetHidden
Case Else
Err.Raise vbObjectError + 114
End Select
Das klappt, aber ist wahrscheinlich nicht die höhere Schule. Ich will diese Ecke neu machen, weil ich sowieso Bedarf habe: Beim Start will ich nämlich auch bei allen sichtbaren Seiten das Kommando
Sheets(xy).Protect UserInterfaceOnly:=True
geben, was ich ganz reivoll finde. (Die Bereiche, die der Benutzer betreten darf, werden inhaltlich über Change-Events abgesichert. Trotzdem war es bisher möglich, mit einer destruktiven Ader die Beschriftungsbereiche/Formatierungen zu zerstören, aber das nur nebenbei)
Jedenfalls denke ich an eine "For Each WorkSheet in Workbook-Schleife", mit der man zum einen das Protect macht, und zum anderen vorher auch noch das Einblenden der Reiter.
Könnte man nicht vorher eine Aufzählung machen wie z.B.
RechtG = "SG,SB,SM,SH,SA,SP,SJ,SV,SE"
RechtK = "SH,SA,SP,SJ,SV,SE"
und so weiter, und dann in der For-Each-Schleife diesen Reiter einblenden, wenn der Seitenname in der entsprechenden Auflistung vorkommt?
Da fehlt mir allerdings die Phantasie, das zusammenzuschrauben und bitte um einen kurzen Wink, vielen Dank im voraus
Hans-Jürgen