Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Benutzerrechte für bestimmte Tabellenblätter

Forumthread: VBA Benutzerrechte für bestimmte Tabellenblätter

VBA Benutzerrechte für bestimmte Tabellenblätter
21.08.2024 11:33:11
Lukeking
Hallo zusammen,

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
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Benutzerrechte für bestimmte Tabellenblätter
21.08.2024 13:51:32
ralf_b
Zitat:P.S.: Hat jemand ein Tipp, für VBA Kurse, um mich weiterzubilden?
google..... "excel vba userabfrage"

Du suchst eine Möglichkeit userabhängig Blätter einzublenden. Dein Code blendet aber unabhängig davon aus/ein.
Es gibt da immer verschiedene Möglichkeiten. Wie du das schlussendlich umsetzt ist dir überlassen. Für einen ersten Eindruck woher du die Informationen bekommst , siehe Zeile 2.
Anzeige
AW: VBA Benutzerrechte für bestimmte Tabellenblätter
21.08.2024 20:08:35
Firmus
Hi Lukas,

zum VBA-Lernen kannst du bei Herber bleiben: https://www.herber.de/vbabasics/0001.html
Siehe Tutorials im Header.

Allgemein gesehen: Wenn du jetzt mit VBA-Lernen anfängst, dann ist deine Aufgabenstellung schon eine Challenge - aber machbar.
Viel Erfolg.

Gruß,
Firmus
Anzeige
AW: VBA Benutzerrechte für bestimmte Tabellenblätter
21.08.2024 20:09:27
Firmus
noch offen
AW: VBA Benutzerrechte für bestimmte Tabellenblätter
22.08.2024 08:30:28
Lukeking
Hallo zusammen,

ich hatte es jetzt doch selber hinbekommen.

Für die, die es interessiert bzw. eine Verbesserung des Codes haben, korrigiert mich gerne.

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 ' Bildschirmaktualisierung aus

Dim MasterUsers As Variant
Dim UserSheetMap As Object
Dim UserName As String
Dim Sheet As Worksheet
Dim UserRecognized As Boolean
UserRecognized = False

' Liste der Master-Benutzer
MasterUsers = Array("Master1", "Master2", "Master3") ' Füge hier die Namen der Master-Benutzer hinzu

' Aktuellen Benutzernamen ermitteln
UserName = Environ("Username")

' Mapping der Benutzer auf die erlaubten Tabellen
Set UserSheetMap = CreateObject("Scripting.Dictionary")
UserSheetMap.Add "UsernameB", Array("Tabelle2") ' Mitarbeiter A sieht nur Tabelle 2
UserSheetMap.Add "UsernameA", Array("Tabelle3") ' Mitarbeiter B sieht nur Tabelle 3
' Weitere Benutzer hinzufügen

' Alle Tabellen standardmäßig ausblenden, außer Tabelle1
For Each Sheet In ThisWorkbook.Sheets
If Sheet.Name > "Tabelle1" Then
Sheet.Visible = xlSheetVeryHidden
End If
Next Sheet

If IsInArray(UserName, MasterUsers) Then
' Master-Benutzer sehen alle Tabellen
For Each Sheet In ThisWorkbook.Sheets
Sheet.Visible = xlSheetVisible
Next Sheet
UserRecognized = True
ElseIf UserSheetMap.Exists(UserName) Then
' Mitarbeiter sehen nur bestimmte Tabellen
For Each Sheet In ThisWorkbook.Sheets
If IsInArray(Sheet.Name, UserSheetMap(UserName)) Then
Sheet.Visible = xlSheetVisible
End If
Next Sheet
UserRecognized = True
End If

' Tabelle1 nur ausblenden, wenn der Benutzername erkannt wurde
If UserRecognized Then
Sheets("Tabelle1").Visible = xlSheetVeryHidden
End If

' Schalter Veränderung der Datei zurückstellen
ActiveWorkbook.Saved = True

Application.ScreenUpdating = True ' Bildschirmaktualisierung 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 = xlSheetVisible
' 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 = xlSheetVeryHidden
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 schließen 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 = xlSheetVisible
' 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 = xlSheetVeryHidden
Next InI
BoSichern = True
ThisWorkbook.Save
End If
' ActiveWorkbook.Protect ("Passwort") ' Dateischutz wieder setzen
End Sub

' Hilfsfunktion, um zu prüfen, ob ein Wert in einem Array ist
Function IsInArray(val As String, arr As Variant) As Boolean
Dim i As Integer
IsInArray = False
For i = LBound(arr) To UBound(arr)
If arr(i) = val Then
IsInArray = True
Exit Function
End If
Next i
End Function
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige