Clever-Excel-Forum

Normale Version: Zugriff steuern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe folgenden Code:

Code:
Option Explicit
Dim arrSh, i#

Private Sub Workbook_Open()
arrSh = Split("Tabelle1 Tabelle2 Tabelle3 Tabelle4 Tabelle5 Tabelle6")
If Environ("UserName") <> "maxmuster" Then Exit Sub
For i = 0 To UBound(arrSh)
   Sheets(arrSh(i)).Visible = True

Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
For i = 0 To UBound(arrSh)
   Sheets(arrSh(i)).Visible = xlVeryHidden
Next
ThisWorkbook.Save
End Sub

Was passieren soll:
Es soll beim Schließen der Excel alles ausgeblendet werden (Tabelle1 Tabelle2 Tabelle3), außer "Info"...
In dem Tabellenblatt Info steht --> das die Makros aktiviert werden müssen, um weitere Tabellenblätter zu sehen.

Dann soll im o.g. abgebildet werden, welche User, welche Tabellenblätter sehen.

Im o.g. Beispiel sieht der User maxmuster Tabelle1, Tabelle2.... bis Tabelle6

thommuel soll nun beispielsweise nur Tabelle1 und Tabelle2 sehen.
markmaie soll beispielsweise nur Tabelle 4 sehen
usw usw usw.

Wie kann ich das umsetzen?
Hi,

(17.03.2017, 11:52)Blitzkönig schrieb: [ -> ]Wie kann ich das umsetzen?

so?
[...]
auf Nachfrage mit Ergänzung und Erläuterung zum Verständnis der Cases.
Der Schreibschutz/Blattschutz wird ohne Passwort verwendet. Wenn Passwörter verwendet werden sollen, muß das ' vor dem Password weg, das Passwort ist dann test:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
   Dim i As Integer
   With ThisWorkbook
      For i = 1 To Sheets.Count
         .Sheets(i).Visible = False          'alle Blätter werden ausgeblendet 
         .Sheets(i).Protect 'Password:="test" 'alle Blätter werden schreibgeschützt ohne Passwort, sonst das ' entfernen 
      Next i
      .Sheets("Info").Visible = True
   End With
End Sub

Private Sub Workbook_Open()
   Dim s As String
   Dim i As Integer
   
   s = VBA.Environ("Username")
   
   With ThisWorkbook
      Select Case s                     'Tabellen, Bereiche und Formularschaltflächen ausblenden, je nach Account 
      Case Is = "maxmuster", "michamuster": ', "klaus": 
         'Wenn der User maxmuster oder michamuster ist, dann zeige alle Blätter an und entschütze sie 
         For i = 1 To Sheets.Count
            .Sheets(i).Visible = True              'alle Blätter werden eingeblendet 
            .Sheets(i).Unprotect 'Password:="test" 'alle Blätter werden entschützt ohne Passwort, sonst das ' entfernen 
         Next i
      Case Is = "thommuel": ', "huber", "schmid": 
         'Wenn der User thommuel ist, dann verberge alle Blätter und schütze sie, anschließend zeige nur Blatt eins und zwei an. 
         For i = 1 To Sheets.Count
            .Sheets(i).Visible = False           'alle Blätter werden ausgeblendet 
            .Sheets(i).Protect 'Password:="test" 'alle Bläütter werden schreibgeschützt ohne Passwort, sonst das ' entfernen 
         Next i
         For i = 1 To 2
            .Sheets(i).Visible = True            'Blatt 1 und 2 werden eingeblendet 
         Next i
      Case Is = "markmaie":
         'Wenn der User markmaie ist, dann verberge alle Blätter und schütze sie, anschließend zeige nur Blatt vier an. 
         For i = 1 To Sheets.Count
            .Sheets(i).Visible = False           'alle Blätter werden ausgeblendet 
            .Sheets(i).Protect 'Password:="test" 'alle Bläütter werden schreibgeschützt ohne Passwort, sonst das ' entfernen 
         Next i
         .Sheets(4).Visible = True               'Blatt 4 wird eingeblendet 
      Case Else
         'alle anderen Benutzer sehen die komplette Datei, aber nur schreibgeschützt (ReadOnly = True) 
         'Datei schreibgeschützt öffnen 
         'Ausdruck.Open(FileName, UpdateLinks, ReadOnly, Format, Password, WriteResPassword, IgnoreReadOnlyRecommended, Origin, Delimiter, Editable, Notify, Converter, AddToMru, Local, CorruptLoad) 
         Application.DisplayAlerts = False
         Workbooks.Open ThisWorkbook.FullName, , True
      End Select
   End With
   Application.DisplayAlerts = True
   
End Sub