Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel VBA Benutzerbeschränkung auf Tabellenblätter

Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 07:22:58
Nadine
Hallo Zusammen,

Leider benötige ich für den letzten Schliff noch einige Anpassungen, die mit meinem bisherigen Wissens nicht so funktionieren wie ich will.

Kurz zur Excel: User öffnet diese Datei, Anmeldefenster öffnet sich, wo dann jeweils der Benutzername ausgewählt werden soll, wer man ist (mit Passwort), das ist wichtig für Datenschutz bzw. soll nicht der eine Bearbeiter die Daten des anderen Bearbeiters sehen können.
User (außer ADMIN) bekommt nur die Startseite zu sehen, wo er dann auf seine Kachel (Makro hinterlegt) klickt und sich eine Userform öffnet, er gibt dann seine Daten dort ein und speichert, im Hintergrund kopiert sich dann immer die "aktuellen" Daten in den Admin Reiter rein.
Für den ADMIN ist alles sichtbar.

Nun mein Problem:
- User meldet sich an und kann trotzdem auch die anderen Kacheln mit den Makros ausführen -> soll bitte nicht sein, sondern er DARF nur seine eigene Kachel nutzen
- Weiterhin soll auf der Startseite die Zeilen 30:38 ausgeblendet werden, da dies nur für den ADMIN sichtbar sein soll
- Blattschutz soll auch auf der Startseite sein, dass das Makro trotzdem funktioniert
- In den Tabellenblättern der User soll immer die Spalten G:I ausgeblendet sein, weil die nur für den Kopiervorgang in das Adminblatt erforderlich sind (Hintergrund ist, das in der Userform die Tabelle angezeigt wird und somit auch die Spalten G:I , die den User nicht interessieren

Da die Datei leider viel zu groß mit und ohne Makro ist, müsste man Punkt für Punkt durchgehen und ich würde den jeweiligen Code und Ansicht schicken. ;-(

Ich hoffe mir kann zeitnah einer helfen.

Lieben Dank
Nadine
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 09:19:12
schauan
Hallöchen,

nutze hier mal die Suche. Du bist nicht die erste mit so einer Frage :-)
Die Lösungen sind zwar nicht konkret auf Dein Projekt zugeschnitten, mit VBA gut solltest Du aber damit zurecht kommen
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 09:43:31
Oberschlumpf
Hi Nadine,

Und wieso nutzt du im Code nicht die Anmeldedaten vom jeweiligen User, ...

...so dass er nur seine eigene Kachel (echt? sry, das Ding heißt Button!) anklicken kann, bzw bei Klick anderer Button ein entsprechender Hinweis kommt
...so dass immer, wenn Anmelder nich Admin is, dass dann die Zeilen 30:38 + Spalten G:I ausgeblendet werden

Blattschutz soll auch auf der Startseite sein, dass das Makro trotzdem funktioniert = dann aktivier doch den Blattschutz

Da die Datei leider viel zu groß...ist = dann erstell doch eine Bsp-Datei mit weniger Blättern, mit Bsp-Daten, und auch das Userform(ular!) sollte enthalten sein, und natürlich der Code, der für dein(e) Problem(e) relevant ist.

Eigtl sind all das Probleme, die mit VBA gut problemlos lösbar sein sollten.
Daher bin zumindest ich irritiert, wieso jemand mit VBA gut solche Fragen stellt, und daher weiß ich nicht, wie ich Lösungsideen beschreiben soll.

Na ja, und mit Bsp-Datei könnten wir nicht nur besser testen, sondern wir - sehen - dann auch das, was du versuchst zu beschreiben.

Hast du auch schon berücksichtigt, dass deine Datei nur funktionieren kann, wenn Ausführung von Makros erlaubt sind - und - dass du dafür sorgen musst, dass bei nicht-Aktivierung von Makros auf deiner "Startseite" ein entsprechender Hinweis erscheint, der natürlich nicht erscheinen darf, wenn die Makros aktiviert sind?

Ciao
Thorsten
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 15:01:52
Peter (HPO)
Hallo Nadine,

hier noch ein kleines Beispiel für die Button (Kachel) anzuzeigen.

https://www.herber.de/bbs/user/168557.xlsm

Viele Grüße
Peter (hpo)
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 18:21:36
schauan
Hallöchen,

mal etwas Theorie:
Du könntest ein Parameterballt anlegen, wo Du Anmeldedaten und anzuzeigende Elemente hinterlegst, z.B.

 ABCDE
1NamePasswortElementeElement1Element2
2willigeheimTextbox 1;Textbox 2;Textbox 1Textbox 2

ZelleFormel
C2=TEXTVERKETTEN(";";WAHR;D2:Q2)&";"


Die Elementebezeichnungen müssten für die einfachste Variante in der Datei eindeutig sein. Macht ggf. nur Sinn, wenn verschiedene Benutzer verschiedene Elemente / Inhalte benutzen dürfen. Siehe auch Hinweise unten zum Alternativvorschlag.

Per Code kannst Du dann die Elemente aus- oder einblenden. Hier hab ich mal nur eine Meldung, das Ausblenden ist auskommentiert.

Sub test1()

'Schleife ueber alle Blaetter
For Each blaetter In ThisWorkbook.Sheets
'Schleife ueber alle Shapes
For Each texte In blaetter.Shapes
'erst mal ausblenden
'texte.Visible = False
'Wenn der Name des Shapes in der Liste ist, dann
If InStr(1, UCase(Sheets("Tabelle3").Cells(1, 3).Value), UCase(texte.Name) & ";") > 0 Then
'Einblenden - hier mal nur eine Meldung
MsgBox texte.Name
'Ende Wenn der Name des Shapes in der Liste ist, dann
End If
'Ende Schleife ueber alle Shapes
Next
'Ende Schleife ueber alle Blaetter
Next
End Sub


Eine andere Variante wäre, die Elementebezeichnung dem Personenkreis zuordenbar vorzunehmen.
Du könntest z.B. bei den Elementen,
- die alle sehen dürfen, "all" davor schreiben
- die nur für den Administrator sind, "admin" davor schreiben.
Dann kann man die anhand der Vorsilbe ein- oder ausblenden.
"all" kann man eigentlich auch weglassen und nur auf "admin" prüfen und diese ausblenden. Außer, wenn verschiedene Benutzer unterschiedliche Aktionen / Elemente / Inhalte benutzen dürfen, Dann macht "all" sinn, aber es erfordert eine weitere Differenzierung entsprechend dem Aufgabenbereich. Dazu könntest Du "Gruppen" bilden - womit wir wieder beim Parameterblatt wären, wo Du den Benutzern als weitere Spalte die Gruppe zuordnest


Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
09.04.2024 08:13:08
Nadine
Hallo zusammen,

lieben Dank für eure Hilfen. Ich hab das soweit eingebaut, allerdings hab ich mich glaube grade etwas verrannt im Code :-(
Ich habe in dem Tabellenblatt "Zugriffsrechte" die Benutzernamen mit Passwörter, was für den Login (Userform) benötigt wird drin, sowie von D10:D13 die Benutzergruppe, was ich nun gerne abfragen würde, um die Rechtecke (was meine Kacheln sind) anzusprechen, auf denen das Makro verwiesen ist, um die Userform je Benutzer zu öffnen.
Ich möchte aber gerne alle Rechtecke sichtbar belassen, da ich separat ein Rechteck mit dem Makro drüber gelegt habe, was dann jeweils ein- und ausgeblendet wird, wenn der korrekte Benutzer dazu sich angemeldet hat.

Private Sub Buttonanmelden_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
Dim rng As Range
On Error GoTo Ende

'Benutzername suchen
Set rng = Range("tblZugriffsrechte[Benutzername]").Find(what:=txtBenutzernamen1.Value, lookat:=xlWhole)

'Prüfen, ob Benutzername angelegt
If rng Is Nothing Then

'Benutzer benachrichtigen
MsgBox "Dieser Benutzername ist nicht angelegt."

'Prozedur beenden
Exit Sub

End If

'Prüfen, ob Passwort korrekt ist
If rng.Offset(0, 1).Value > txtPasswort.Value Then

'Benutzer benachrichtigen
MsgBox "Das Passwort ist nicht korrekt."

'Prozedur beenden
Exit Sub

End If

'Prüfen, ob Benutzer Admin ist
If rng.Offset(0, 2).Value = "Admin" Then

End If

If rng.Offset(0, 2).Value = "Admin" Then

For Each ws In ThisWorkbook.Worksheets

'Tabellenblatt einblenden
ws.Visible = xlSheetVisible

If rng.Offset(0, 2).Value = "Admin" Then

For Each blaetter In ThisWorkbook.Sheets
For Each texte In blaetter.Shapes

'erst mal einblenden
texte.Visible = True
Next
Next
End If
Next ws

'_________________________________________________StQ_____________________________________________________________

ElseIf rng.Offset(0, 2).Value = "StQ" Then
Call Benutzermodus

'Schleife über alle Tabellenblätter
For Each ws In ThisWorkbook.Worksheets

'prüfen, ob Tabellenblatt TPA ist
If ws.Name > "Admin" And ws.Name > "Startseite" Then

'Tabellenblatt einblenden
ws.Visible = xlSheetVisible

End If
If rng.Offset(0, 2).Value = "StQ" Then
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

End If
Next ws

'Schleife ueber alle Blaetter
For Each blaetter In ThisWorkbook.Sheets
For Each texte In blaetter.Shapes

'Wenn der Name des Shapes in der Liste ist, dann
If InStr(1, UCase(Sheets("Zugriffsrechte").Cells(0, 4).Value), UCase(texte.Name)) = "StQ" Then

Dim shShape As Shape
Dim strName As String

texte.Shapes("TPA").Visible = False
texte.Shapes("ZivPers").Visible = False

Select Case Target
Case 1
texte.Shapes("StQ").Visible = True

End Select

'Ende Wenn der Name des Shapes in der Liste ist, dann
End If

Next
Next


Ich hoffe, ihr könnt auch ohne Datei das Wirrwarr entzerren. Ich seh den Wald voller Bäume nicht mehr, da ich 4 Benutzergruppen habe und den Code somit entsprechend anpassen muss.

Danke sehr
Nadine
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
09.04.2024 12:08:54
Peter (HPO)
Hallo Nadine,

Du kannst auch alle Button(Kacheln) sichtbar (Visible=true) lassen aber inaktiv (Enabled = False). Beim Anmelden wird nur der Button(Kachel) des Benutzers Aktiv.
Dadurch können die anderen Button(Kacheln) nicht aktiviert werden.
_____________________________________________
Private Sub CommandButton1_Click()
Dim rngBenutzer As Range, conKa As CommandButton
With Tabelle1.Range("A2:A" & Sheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row)
Set rngBenutzer = .Find(what:=TextBox1.Value, lookat:=xlWhole, LookIn:=xlValues)
If Not rngBenutzer Is Nothing Then
If rngBenutzer.Offset(0, 1).Value = TextBox2.Value Then
Set conKa = Controls(rngBenutzer.Offset(0, 2).Value)
conKa.Enabled = True
End If
End If
End With
End Sub
___________________

Ist auf meine Beispiel Datei angepasst.

Viele Grüße
Peter (hpo)
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
09.04.2024 12:14:31
Nadine
Hallo Peter,

vielen Dank für deine Hilfe. Meine "Kacheln" sind leider nur Formen (Rechtecke), aber dann bau ich Buttons anstatt der Dreiecke und verwende deinen Code.
Ich teste mal und bedanke mich.

Liebe Grüße
Nadine
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
10.04.2024 08:44:04
schauan
Hallöchen,

Du könntest auch Formen, z.B. Rechtecke, drüber legen und diese auf Visible... schalten. Natürlich mit einiger Transparenz, damit man noch sieht, was drunter liegt :-)
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
10.04.2024 18:24:38
Nadine
Hallo schauan,

ja, diese Idee habe ich tatsächlich dann umgesetzt. Mit einer Dopplung meiner Rechtecke, die übereinander liegen und der oberste mit dem Makro verknüpft ist, den ich je nach Benutzer anzeige oder ausblende. Somit hatte sich dieses Thema dann erledigt.

Vielen Dank für die viele Hilfe für, am Ende, relativ simple Lösung ;-)

Nadine
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 10:41:52
Nadine
Hallo Oberschlumpf,

danke für deine Kritik.

Blattschutz war ein Gedanke, das wenn man den VBA Code schreibt und einschränkt, dass vielleicht mit Einstellen des Blattschutzes vielleicht irgendwas nicht funktioniert. Wenn es aber aus deiner Sicht nichts gibt, dann ignoriere diesen Punkt.

Die Testdatei hab ich schon so weit runtergebrochen, dass diese immer noch mit über 7.000 KB nicht hochgeladen werden kann. Daten stehen keine drin, aber es gibt eine Userform zum Anmelden beim Öffnen der Excel, was relevant ist für meine Anfragen, dann die Buttons auf der Startseite mit dem Makro dahinter, wo ebenfalls der Code zum Öffnen der Userform drin steht. Die Datei hat selbst nur die "Startseite" und das Tabellenblatt "Zugriffsrechte", was für den Code zur Abfrage des Logins benötigt wird.

Ich werde einfach mal die übrigen Codes hier einfügen, vielleicht hilft das.

Private Sub Buttonanmelden_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)

'Variable dimensionieren
Dim rng As Range

'Benutzername suchen
Set rng = Range("tblZugriffsrechte[Benutzername]").Find(what:=txtBenutzernamen1.Value, lookat:=xlWhole)

'Prüfen, ob Benutzername angelegt
If rng Is Nothing Then

'Benutzer benachrichtigen
MsgBox "Dieser Benutzername ist nicht angelegt."

'Prozedur beenden
Exit Sub

End If

'Prüfen, ob Passwort korrekt ist
If rng.Offset(0, 1).Value > txtPasswort.Value Then

'Benutzer benachrichtigen
MsgBox "Das Passwort ist nicht korrekt."

'Prozedur beenden
Exit Sub

End If

'Prüfen, ob Benutzer Admin ist und Bearbeitungsleiste anzeigen

If rng.Offset(0, 2).Value = "Admin" Then
Call Entwicklermodus

End If

'Prüfen, ob Benutzer Admin ist
If rng.Offset(0, 2).Value = "Admin" Then

'Schleife über alle Tabellenblätter
For Each ws In ThisWorkbook.Worksheets

'Tabellenblatt einblenden
ws.Visible = xlSheetVisible

If rng.Offset(0, 2).Value = "Admin" Then

End If

Next ws

ElseIf rng.Offset(0, 2).Value = "ZivPers" Then
Call Benutzermodus

'Schleife über alle Tabellenblätter
For Each ws In ThisWorkbook.Worksheets

'prüfen, ob Tabellenblatt TPA ist
If ws.Name > "Admin" And ws.Name > "StQ" And ws.Name > "TPA" And ws.Name > "Dashboard" And ws.Name > "Zugriffsrechte" And ws.Name > "Hilfstabellen" Then

'Tabellenblatt einblenden
ws.Visible = xlSheetVisible

End If
If rng.Offset(0, 2).Value = "ZivPers" Then
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False

End If
Next ws
End If

Unload Me

End Sub

Private Sub UserForm_Initialize()

With UfLogin.txtBenutzernamen1

.AddItem "Admin"
.AddItem "ZivPers"

End With

End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

If CloseMode = vbFormControlMenu Then 'Cancel = True

ThisWorkbook.Close SaveChanges:=False
End If
End Sub




Button Makro:

Sub ZivPers_Kachel()

UfÜbersichtZivPers.Show (Userform)

End Sub

Hier ist ja nun die Frage, wie schreibe ich den Code, dass die Person die beim Login "ZivPers" ausgeführt hat, nun nur genau diese ZivPers_Kachel ausführen KANN und alles andere nicht?


Dankeschön
Nadine
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 11:00:56
Oberschlumpf
Hi,

ich hab erst heute nachmittag wieder Zeit.
Vllt findet sich noch wer anders.

Ach so, ich kann nur helfen, wenn du ne Bsp-Datei zeigst.
Wieso isn die Datei - ohne Daten - 7MB groß????

Lösch mal alle Zeilen = wirklich Zeilen löschen, nicht nur Inhalte!

Komprimier deine Bsp-Datei mal als ZIP-Datei, z Bsp mit 7ZIP.
Die ZIP-Datei ist sehr oft um ein sehr Vielflaches kleiner als die Excel-Datei.
Zeig nun per Upload die ZIP-Datei.

Aber wie schon erwähnt, vllt kann auch (früher als ich) wer anders ohne Datei helfen.

Ciao
Thorsten
Anzeige
AW: Excel VBA Benutzerbeschränkung auf Tabellenblätter
08.04.2024 12:29:06
Peter (HPO)
Hallo Nadine

Setze alle Buttons (Kacheln) auf Visible= False
Ordne jedem User eine Kachel zu und nimm in der Lister für den Benutzer und Passwort die Kachel mit in die Liste auf.

Beim einloggen schreibe die Kachel in eine Variable und setze diese Kachel auf True
Dan wird nur die Kachel des Benutzers angezeigt.

Viele Grüße
Peter (hpo)

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
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