Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Spalten benutzterabhängig freigeben

Spalten benutzterabhängig freigeben
26.10.2023 11:59:45
Tanri
Hallo liebe Forumsmitglieder,

ich habe eine Datei mit mehreren Tabellen. (Momentan 16). In 14 dieser Tabellen sollen nun immer wieder andere Spalten für verschiedene Personen zur Bearbeitung freigegeben werden. Habe es auch schon mit "Bearbeiten von Bereichen zulassen" probiert. Beim Testen konnte ich trotzdem die Bereiche bearbeiten, obwohl ich nicht eingetragen war. Daher die Idee es über VBA zu lösen.

Beispiel:
Tabelle 1
Spalten C-D darf Person A bearbeiten,
Spalten G-H Personen B,C und D,
Spalten E-G Personen A und B

Tabelle 2
Spalten B-E darf Person B bearbeiten
Spalten G-H Personen X und Y,
Spalten F-G Personen A und B

usw.

Jede Tabelle hat eine unterschiedliche Anzahl von Spalten und die entsprechenden Spalten sollen von verschiedenen Personen bearbeit werden dürfen. Alle anderen Spalten müssen schreibgeschützt werden.

Und es gibt Personen, die alles bearbeiten dürfen.

Wenn es geht, würde ich das Freigeben der Spalten mit dem Anmeldenamen verknüpfen, so das kein Passwort erforderlich ist. Könnte mir aber auch vorstellen, eine Tabelle anzulegen, mit den Personen und den dazugehörigen Passwörtern.

Ich lade mal eine ganz vereinfachte Datei dazu hoch. https://www.herber.de/bbs/user/163825.xlsx

Kann mir jemand helfen? Das wäre super. Ich hoffe ich habe mich halbwegs verständlich ausgedrück.´t.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten benutzterabhängig freigeben
26.10.2023 14:02:46
Uduuh
Hallo,
prinzipiell, rein aus deiner Beschreibung, so.
Ins Modul des Tabellenblatts:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim bolDARF As Boolean
Select Case LCase(Environ("username"))
Case "lieschen.müller"
Select Case Target.Column
Case 2 To 5, 12, 13, 20, 21: bolDARF = True
End Select
Case "franz.schmidt", "egon.meier"
Select Case Target.Column
Case 8, 9, 15, 17: bolDARF = True
End Select
Case "darf.alle": bolDARF = True
'etc.
End Select
If Not bolDARF Then Application.Undo
End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: Spalten benutzterabhängig freigeben
26.10.2023 14:29:01
MCO
Hallo Tanri!

Für eine bessere Verwaltung hab ich die Namen u Sheets u. Spalten in einen Tabellenbereich gepackt (der auch später versteckt/ geschützt werden könnte)


-ABC
1
2adamSorte 11,2,3,4
3adamSorte 22,4,6,8
4beateSorte 14,5,6
5beateSorte 22,3,4,6
6CäsarSorte 12,5,8
7CäsarSorte 21,3,5,7

Hier wird jeder Name verglichen, geprüft und ggf. die Eingabe rückgängig gemacht.

Der Code ist kurz u. knackig:

Ins Modul des Arbeitsblattes:
Private Sub Worksheet_Change(ByVal Target As Range)


zulässig ActiveSheet, Target

End Sub


Ins allgemeine Modul
Sub zulässig(ws As Worksheet, ziel As Range)


Dim name As String
Dim i As Single
Dim erlaubt As Boolean

name = Application.UserName
name = "adam" 'Eintrag entfernen

With Sheets("Startseite")
For i = 1 To .UsedRange.Rows.Count
If .Cells(i, 1) = name And .Cells(i, 2) = ws.name Then
erlaubt = InStr(.Cells(i, 3), ziel.Column) > 0
Exit For
End If
Next i
End With

If Not (erlaubt) Then
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
End If
End Sub


Gruß, MCO
Anzeige
Denkt daran, ...
26.10.2023 18:20:02
Yal
... dass, wenn der User die Aktivierung der Makros verweigert, ein "Schutz durch Code" nicht mehr funktioniert.

Dementsprechend wäre es zielsicherer, grundsätzlich alles zu blockieren und dann durch Code etwas erlauben. Keine Makro, keinen Schreibrechte.


Im allgemein bevorzuge ich Schulung/Kommunikation zur Verantwortungsübergabe. Auf langem Sicht viel effizienter, sonst entsteht schnell eine "kein Schutz vorhanden, also nicht meine Verantwortung"-Kultur. Und da ist der Programmierer immer der Depp.

VG
Yal
kleine Korrektur
26.10.2023 14:13:40
Uduuh
Private Sub Worksheet_Change(ByVal Target As Range)

Dim bolDARF As Boolean
On Error GoTo ERREXIT
Application.EnableEvents = False

Select Case LCase(Environ("username"))
Case "lieschen.müller"
Select Case Target.Column
Case 2 To 5, 12, 13, 20, 21: bolDARF = True
End Select
Case "franz.schmidt", "egon.meier"
Select Case Target.Column
Case 8, 9, 15, 17: bolDARF = True
End Select
Case "darf.alle": bolDARF = True
'etc.
End Select
If Not bolDARF Then Application.Undo

ERREXIT:
Application.EnableEvents = True
End Sub
Anzeige
AW: kleine Korrektur
26.10.2023 14:20:06
Tanri
Danke dir. Habe jetzt leider schon Feierabend. Werde ich morgen sofort testen.
AW: kleine Korrektur
26.10.2023 14:29:17
Tanri
Hallo,
eine Frage habe ich schon vorab. Muss auf dem Blatt dann ein Blattschutz sein? Oder wie werden die anderen Zeilen gesperrt bzw. entsperrt.
Viele Grüße

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige