da ich mich mit VBA nicht gut auskenne, benötige ich Eure Hife. Ich habe ein Code aus dem Forum hier gefunden, welcher die Personen mehr oder weniger zwingt, Makros zu aktivieren, damit sie die restlichen Tabellen öffnet und das "Startblatt" gleichzeitig schließt. Zudem kann es nicht von anderen gespeichert werden, sondern nur beim schließen. Zudem habe ich das VBA mit einem Passwort gesichert, damit der Code nicht abgeändert werden kann.
Mein Problem ist jetzt nur, dass ich nicht weiß, wie man verschiedenen Usern Berechtigungen gibt. Dabei soll z.B. Mitarbeiter A nur Tabelle2 sehen und Mitarbeiter B Tabelle3. Zudem soll es mehrere Masteruser geben, die auf alle Tabellen Zugriff haben.
Dies ist der Code den ich gefunden habe:
Option Explicit ' Variablendefinition erforderlich
Dim InI As Integer ' Zählvariable für Register
Dim BoSichern As Boolean ' Variable für Speicherung
Private Sub Workbook_Open()
'ActiveWorkbook.Unprotect ("Passwort")
Application.ScreenUpdating = False ' aktualisierung Bildschirm aus
For InI = Sheets.Count To 1 Step -1 ' alle Tabellen einblenden vom letzten bis zum ersten
Sheets(InI).Visible = True
Next InI
Sheets("Tabelle1").Visible = False ' Tabelle mit Hinweis ausblenden
' Schalter Veränderung der Datei zurückstellen
' Damit das einblenden der Register nicht als Veränderung
' der Datei angesehen wird
ActiveWorkbook.Saved = True
Application.ScreenUpdating = True ' aktualisierung Bildschirm ein
'ActiveWorkbook.Protect ("Passwort")
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Dieses Ereignis wird auch angesprungen falls in
' Workbook_BeforeClose die Speicherabfrage mit Ja beantwortet wird
' Das speichern muß abgefangen werden damit die Datei nicht
' mit eingeblendeten Tabellen gespeichert wird.
If BoSichern = False Then
Cancel = True ' das Sicherungsereignis abbrechen, keine Speicherung
' Hinweis
MsgBox "Arbeitsmappe kann nur beim Schließen gespeichert werden!"
Else
' eine Tabelle muß mindestens eingeblendet sein
Sheets("Tabelle1").Visible = True
' alle Tabellen ausblenden vom letzten bis zum ersten
' außer "Makros_deaktiviert"
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name > "Tabelle1" Then _
Sheets(InI).Visible = xlVeryHidden
Next InI
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' ausblenden aller Register außer Sheets("Tabelle1")
' mit xlVeryHidden
' dies hat den Vorteil, sie können nur per VBA eingeblendet werden.
BoSichern = True ' Datei schliessen wurde ausgelöst
'ActiveWorkbook.Unprotect ("Passwort") ' falls Dateischutz
If ActiveWorkbook.Saved Then ' Prüfen ob Datei verändert
' Datei wurde nicht verändert
' eine Tabelle muß mindestens eingeblendet sein
Sheets("Tabelle1").Visible = True
' alle Tabellen ausblenden vom letzten bis zum ersten
' außer "Makros_deaktiviert"
For InI = Sheets.Count To 1 Step -1
If Sheets(InI).Name > "Tabelle1" Then _
Sheets(InI).Visible = xlVeryHidden
Next InI
BoSichern = True
ThisWorkbook.Save
End If
'ActiveWorkbook.Protect ("Passwort") ' Dateischutz wieder setzen
End Sub
Die Beispieldatei habe ich mit eingefügt https://www.herber.de/bbs/user/171740.xlsm. Über eine Hilfe wäre ich sehr dankbar!
P.S.: Hat jemand ein Tipp, für VBA Kurse, um mich weiterzubilden?
Vielen Dank im Voraus!
Lukas