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ß
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 1
Link 2
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ß
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!
Perfekt, damit versuche ichs! DANKE!!!
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
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ß
:)
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.
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ß