Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA - AllowEditRanges
#1
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önntSmile

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ß
Antwortento top
#2
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
________
Servus
Case
Antwortento top
#3
Hi Case, 

Danke für deine HilfeSmile.
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ß
Antwortento top
#4
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. Angel

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. Exclamation

Der Code läuft jetzt natürlich auf einen Fehler!!! Bis du "Set USR = UAL.Add("DeinWindowsAnmeldeName", True)" richtig angepasst hast!
________
Servus
Case
[-] Folgende(r) 1 Benutzer sagt Danke an Case für diesen Beitrag:
  • EasY
Antwortento top
#5
Perfekt, damit versuche ichs! DANKE!!!
Antwortento top
#6
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
Antwortento top
#7
Hallo, 19

1.
Blatt muss aktiv sein.

2. 
Code:
.Protection.AllowEditRanges.Add Title:="DerTitel", Range:=.Range("A1:C4", "B5:C7"), Password:="DasPasswort"
________
Servus
Case
Antwortento top
#8
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ß

:)
Antwortento top
#9
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.
________
Servus
Case
Antwortento top
#10
Mh,

ich danke dir ganz herzlich, dass du mir immer hilfstSmile.

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?Smile


Gruß
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste