Registriert seit: 28.05.2017
Version(en): 365
26.10.2019, 22:46
(Dieser Beitrag wurde zuletzt bearbeitet: 26.10.2019, 22:47 von EasY.)
Hi Leute, ich möchte in meiner Datei die Zugriffsberechtigungen ein wenig dynamischer gestalten. Dazu möchte ich den AllowEditRanges-Befehl nutzen. Habe mit Hilfe von Google auch ein Makro gefunden, welches schon fast alles macht, was ich möchte, aber eben nur fast. Leider finde ich zu dem VBA-Befehl im Internet nur sehr wenig, sonst hätte ich mich selbst eingelesen. Code: Sub neu() Dim ws As Worksheet, ual As UserAccessList, aer As AllowEditRange, _ usr As UserAccess Set ws = ThisWorkbook.ActiveSheet ws.Unprotect Set aer = ws.Protection.AllowEditRanges.Add("Edit Range", ws.[H1:H4]) Set usr = aer.Users.Add("Name", True) ws.Protect
End Sub
Zu diesem Makro hätte ich einige Fragen, die ihr mir ja vielleicht netterweise beantworten könnt :) 1. Wo bzw. wie füge ich ein Passwort für den Bereich hinzu, der mich legitimiert, obwohl ich kein berechtigter Nutzer bin? 2. Ich möchte nun nicht nur "Name" als User hinzufügen sondern mehrere Personen. Mache ich das über eine Schleife? Da in meinem Netzwerk nur ein Benutzer ist, kann ich es leider nicht testen :/ In dem Makro ist eine UserAccessList "ual" definiert. Ich finde sie jedoch nirgends im Code. Damit sind vermutlich eher Benutzergruppen innerhalb der Netzwerkstruktur gemeint?! 3. Wofür steht das true hinter dem Nutzernamen? 4. Zum Löschen der AllowEditRange funktioniert Code: .Protection.AllowEditRanges(1).Delete
Ich möchte jedoch eine bestimmte Löschen - zum Beispiel die mit dem Namen "Edit Range" ... ich bekomme das aber nicht hin. Kann mir da auch wer helfen? Ich bedanke mich schon im voraus Gruß
00202
Nicht registrierter Gast
Hallo, :19: 1.Code: Option Explicit Public Sub Main() Dim lngCount As Long With Tabelle1 ' Tabellenblatt entsperren - sonst laufen Aktionen auf einen Fehler .Unprotect ' Schleife über alle Bereiche For lngCount = 1 To .Protection.AllowEditRanges.Count ' Titel im Direktfenster ausgeben Debug.Print .Protection.AllowEditRanges(lngCount).Title ' Löschen .Protection.AllowEditRanges(lngCount).Delete Next lngCount ' Bereich hinzufügen, Titel, Range und Passwort vergeben .Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range("A1:C4"), Password:="DasPasswort" ' Titel im Direktfenster ausgeben Debug.Print .Protection.AllowEditRanges("DerTitel").Title ' Bestimmtes löschen .Protection.AllowEditRanges("DerTitel").Delete ' Bereich hinzufügen, Titel, Range und Passwort vergeben .Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range("A1:C4"), Password:="DasPasswort" ' Tabellenblatt schützen - sonst nützt das alles nichts .Protect End With End Sub
2.Du kannst nur User hinzufügen, die in deinem System bekannt sind. 3.Das " True" gibt den Zugriff. 4.Siehe 1.Link 1Link 2
Registriert seit: 28.05.2017
Version(en): 365
Hi Case,
Danke für deine Hilfe :). Kann ich also keinen bestimmten Bereich per Angabe mit Name löschen sondern nur die Nummer?
In deinem Code fügst du zwei Mal den Bereich aber kein mal einen User hinzu. Geht das denn dann über eine normale Schleife, wenn ich mehrere User hinzufügen möchte?
Einen User der in meinem system bekannt ist? Damit ist nicht gemeint einer, der sich mal an meinem Rechner angemeldet hat oder? Sondern einer der im Netzwerk bekannt ist, richtig? Und es ist der windows-anmeldename relevant und sonst nichts oder?
Gruß
00202
Nicht registrierter Gast
Hallo, :19: ich lösche hier doch per Name: :21: Code: .Protection.AllowEditRanges("DerTitel").Delete
Auf einem privaten PC mit einem User gibt das hinzufügen keinen Sinn her. Zu allem anderen - Ja. Also nicht falsch verstehen. Wenn du deinen Windows Anmeldename hinzufügst, musst du zum bearbeiten des entsprechenden Bereiches kein Passwort eingeben. Diese Feature ist aber eher im Netzwerk sinnvoll. Hier nochmal mit hinzufügen: :21: Code: Option Explicit Public Sub Main() Dim UAL As UserAccessList Dim AER As AllowEditRange Dim USR As UserAccess Dim lngCount As Long With Tabelle1 ' Tabellenblatt entsperren - sonst laufen Aktionen auf einen Fehler .Unprotect ' Schleife über alle Bereiche For lngCount = 1 To .Protection.AllowEditRanges.Count ' Titel im Direktfenster ausgeben Debug.Print .Protection.AllowEditRanges(lngCount).Title ' Löschen .Protection.AllowEditRanges(lngCount).Delete Next lngCount ' Bereich hinzufügen, Titel, Range und Passwort vergeben .Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range("A1:C4"), Password:="DasPasswort" ' Titel im Direktfenster ausgeben Debug.Print .Protection.AllowEditRanges("DerTitel").Title ' Bestimmtes löschen .Protection.AllowEditRanges("DerTitel").Delete ' Bereich hinzufügen, Titel, Range und Passwort vergeben .Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range("A1:C4"), Password:="DasPasswort" ' User hinzufügen Set AER = .Protection.AllowEditRanges("DerTitel") Set UAL = AER.Users Set USR = UAL.Add("DeinWindowsAnmeldeName", True) ' Tabellenblatt schützen - sonst nützt das alles nichts .Protect End With Set USR = Nothing Set UAL = Nothing Set AER = Nothing End Sub
Und ja - ich füge zweimal hinzu, ich lösche ja auch raus. Einmal am Anfang per Schleife und einmal den Einzelnen. Der Code läuft jetzt natürlich auf einen Fehler!!! Bis du " Set USR = UAL.Add("DeinWindowsAnmeldeName", True)" richtig angepasst hast!
Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:1 Nutzer sagt Danke an Gast für diesen Beitrag 28
• EasY
Registriert seit: 28.05.2017
Version(en): 365
Perfekt, damit versuche ichs! DANKE!!!
Registriert seit: 28.05.2017
Version(en): 365
Hi Case,
ich muss den Thread doch noch mal aktivieren, da mir zwei Bereiche Probleme bereiten.
1. Beim Löschen der Alloweditrange per Schleife läuft der Code immer in einen Fehler, wenn ich das entsprechende Blatt nicht offen habe.
2. Ich schaffe es nicht, einen zweiten Bereich in die range einzupflegen. Also die alloweditrange soll zwei Bereiche umfassen. Weder mit ; noch mit & noch mit , akzeptiert er meine Eingabe :(
Gruß und danke schonmal
00202
Nicht registrierter Gast
Hallo, :19: 1. Blatt muss aktiv sein. 2. Code: .Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range("A1:C4", "B5:C7"), Password:="DasPasswort"
Registriert seit: 28.05.2017
Version(en): 365
29.10.2019, 21:09
(Dieser Beitrag wurde zuletzt bearbeitet: 29.10.2019, 21:09 von EasY.)
Hossa, 1. leider nicht das, was ich hören wollte :D ... also muss ich jedes Blatt aktivieren vor dem Löschen? Ich dachte ich komme ohne select aus. Oder gibt es noch eine andere Variante? 2. Ok, da war ich wohl zu undeutlich. Bisher sieht meine Range für den Bereich so aus: Code: range:= .Range(Replace(ThisWorkbook.Sheets(g).Cells(1, 5).FormulaLocal, "=", ""))
In E1 steht =D1:E4 z.B. Und nun soll da noch eine zweite Range hinzukommen, die exakt so aufgebaut ist, jedoch in einer anderen Zelle steht. Danke und Gruß :)
00202
Nicht registrierter Gast
Hallo, :19: 1. Mir ist keine bekannt. Wenn du eine findest, dann poste sie hier. :21: 2. Code: .Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range(Replace(ThisWorkbook.Sheets(g).Cells(1, 5).Value, "=", ""), Replace(ThisWorkbook.Sheets(g).Cells(2, 5).Value, "=", "")), Password:="DasPasswort"
Gilt, wenn " Sheets(g)" ein anderes Tabellenblatt ist, sonst geht’s natürlich kürzer.
Registriert seit: 28.05.2017
Version(en): 365
Mh,
ich danke dir ganz herzlich, dass du mir immer hilfst :).
Leider funktioniert das mit den zwei Bereichen nicht.
In E1 habe ich =H4:AA36 stehen, in F1 habe ich =AF6:AJ36 stehen.
Mit dem Makro schreibt er mir eine AllowEditRange von H4:AJ36. Er scheint immer das Maximum der Zeilen/Spalten zu wählen, anstatt zwei Bereiche innerhalb einer AllowEditRange zu schreiben.
Ich befürchte, dass ich zwei voneinander getrennte AllowEditRanges schreiben muss, oder fällt dir noch etwas ein? :)
Gruß
|