Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1620to1624
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

Fast geschafft und doch gescheitert....

Fast geschafft und doch gescheitert....
17.04.2018 11:36:53
Peach1234
Hallo zusammen,

Ich habe bereits einiges durchgelesen allerdings find ich für mich keine passende Lösung :/
Nach langem hin und her, funktionierten endlich alle meine eingesetzten Makros.
Stolz wie Oskar weise ich diversen Benutzergruppen Berechtigungen zu und hoffe endlich fertig zu sein. (Inklusive Blattschutz)
Falsch gedacht die Makros starten einfach nicht mehr selbständig bzw. überhaupt nicht mehr und durch die diversen Berechtigungen weis ich mir leider auch nicht mehr zu helfen.....
Wie muss ich den Code verändert?, OHNE das Passwort im Makro zu hinterlegen UND gleichzeitig die einzelnen Berechtigungsstufen zu erhalten?
Könnt Ihr mir weiter helfen? :)
Ich wäre euch sehr dankbar.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Dim c As Range
Set Bereich = Range("A7:Q66")
For Each c In Target.Cells
If Not Intersect(c, Bereich) Is Nothing Then
If IsEmpty(c) Then
On Error Resume Next
Application.EnableEvents = False
c.Formula = Sheets("Formelblatt").Range(c.Address).Formula
Application.EnableEvents = True
On Error GoTo 0
End If
End If
Next c
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngDV As Range
Application.EnableEvents = False
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
If rngDV Is Nothing Then Exit Sub
If Intersect(Target, rngDV) Is Nothing Then
ActiveWindow.Zoom = 90
Else
ActiveWindow.Zoom = 130
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Not Intersect(Target, Range("A4:A66")) Is Nothing Then
Target = IIf(Target = "", "x", IIf(Target = "x", "", ""))
Cancel = True
End If
End Sub

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

Betreff
Datum
Anwender
Anzeige
Makros bei Blattschutz
17.04.2018 12:13:58
EtoPHG
Hallo Peach,
Keine Ahnung was du da zusammenwürfelst oder -wurstest.
Grundsätzlich gilt, dass Makros, die Veränderungen an Zellinhalten vornehmen, dies nur in Zellen können, die nicht geschützt sind. Andernfalls müssen sie den Blattschutz via Code aufheben, die Änderung durchführen und den Blattschutz wieder setzen.
Im Worksheet_SelectionChange Code hast du einen entscheidenden Fehler:
Am Anfang schaltest du die Events aus, wodurch alle Ereignismakros ausgeschaltet werden.
Zwischen drin steht ein Exit Sub. Wird dieser durchlaufen, funktionieren all deine aufgeführten Makros nicht mehr. Events müssen zwingend wieder eingeschaltet werden bevor eine Prozedur, welche sie ausgeschaltet hat, verlassen wird.
Gruess Hansueli
Anzeige
AW: Fast geschafft und doch gescheitert....
17.04.2018 12:17:55
fcs
Hallo Peach,
in diesem Makro schaltest du ggf. die Ereignismakros ab, wenn rngDV als Ergebnis Nothing hat, da du mit Exit Sub der Einschalten der Ereignismakros übersprings.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngDV As Range
Application.EnableEvents = False
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
If rngDV Is Nothing Then Exit Sub
If Intersect(Target, rngDV) Is Nothing Then
ActiveWindow.Zoom = 90
Else
ActiveWindow.Zoom = 130
End If
Application.EnableEvents = True
End Sub

Passe z.B. wie folgt an, damit die Ereignismakros auch wieder aktiviert werden:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rngDV As Range
Application.EnableEvents = False
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
If Not rngDV Is Nothing Then
If Intersect(Target, rngDV) Is Nothing Then
ActiveWindow.Zoom = 90
Else
ActiveWindow.Zoom = 130
End If
End If
Application.EnableEvents = True
End Sub

Danach Excel neu starten oder die Ereigismakros in einem kleinen Hilfsmakro wieder aktivieren.
Grundsätzlich dürfen alle Zellen, in die Eingaben manuell oder per Makro gemacht werden zum Zeitpunkt der Eingabe nicht gesperrt sein. Entweder sind die Zellen nicht gesperrt oder der Blattschutz ist nicht aktiv.
Falls die Zellen normalerweise gesperrt sind, dann muss im Makro der Blattschutz kurzzeitig deaktiviert werden, wenn das Makro Zelleingaben machen soll.
Falls der Blattschutz mit Kennwortschutz ist, dann ist dies auch kein Problem, wenn das Kennwort im Code steht. Du kannst ja auch das VBA-Projekt per Kennwort schützen.
Was die Benutzer-Gruppen-Berechtigungen angeht kann ich dir nichts sagen, da ich damit noch nicht gearbeitet habe.
Gruß
Franz
Anzeige
Funktioniert so leider nicht
17.04.2018 12:59:31
Peach1234
Hallo Franz,
Danke für deine Antwort.
Die Makros an sich funktionieren tadellos wenn KEIN Blattschutz oder Berechtigungen
vergeben wurden.
Da die Exceldatei allerdings zur weiteren Bearbeitung öffentlich eingesehen werden soll und verschiedene Nutzer verschiedene Bereiche bearbeiten oder eben nur sehen sollen, wurde hinterher der "Benutzer dürfen Bereiche bearbeiten" und der Normale "Blattschutz" aktiviert.
Diese beiden Blattschutzarten verhindern, dass die Makros "funktionieren" bzw sich verwenden lassen.
Ich brauch nun die Hilfe, dass die Makros so umgeschrieben werden, dass Sie trotz Blattschutz aktiv sind und jeder Verwender so seine Bereiche bearbeiten kann mit aktiven Makros.
Leider weiß ich nicht, wie der Code an sich zu schützen ist, dadurch wäre mir eine Lösung in der nicht das Passwort in Klarschrift enthalten ist am liebsten.
Der Bau eines solchen Codes oder der Umbau der vorhandenen Codes übersteigt bei weitem mein können :/
Anzeige
Kann auch nicht...
17.04.2018 13:17:19
EtoPHG
Hallo Peach,
Die Makros können nicht umgeschrieben werden, damit sie mit Blattschutz funktionieren.
Der Blattschutz muss durch Code (Unprotect "pwd") aufgehoben werden, wenn geschützte Zellen durch das Makro bearbeitet werden und muss anschliessend wieder programmatisch gesetzt (Protect "pwd") werden.
Wenn du das eingebaut hast, kannst du den Code so schützen, dass er ohne Passwort nicht einsehbar ist, d.h. das Blattschutz-Passwort auch nicht ersichtlich ist. Siehe: Code Schützen - Projektschutz
So einfach ist des!
Gruess Hansueli
Anzeige
AW: Fast geschafft und doch gescheitert....
18.04.2018 13:18:03
Peach123
Ich hab es jetzt so versucht jedes mal den Blattschutz im Makro aufzuheben und erneut zu setzten leider erfolglos......
Kann mir jemand sagen, was ich da falsch mache?
Beim debuggen zeigt er mir eine Fehlermeldung bei dieser Zeile:
ActiveSheet.Unprotect "Test"
Wie muss ich es denn ändern damit dies Funktioniert?
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "Test"
Dim Bereich As Range
Dim c As Range
Set Bereich = Range("A7:Q66")
For Each c In Target.Cells
If Not Intersect(c, Bereich) Is Nothing Then
If IsEmpty(c) Then
On Error Resume Next
Application.EnableEvents = False
c.Formula = Sheets("Formelblatt").Range(c.Address).Formula
Application.EnableEvents = True
On Error GoTo 0
End If
End If
Next c
With ActiveSheet
.EnableSelection = xlUnlockedCells
.Protect Password:="Test", DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Unprotect "Test"
Dim rngDV As Range
Application.EnableEvents = False
On Error Resume Next
Set rngDV = Cells.SpecialCells(xlCellTypeAllValidation)
On Error GoTo 0
If Not rngDV Is Nothing Then
If Intersect(Target, rngDV) Is Nothing Then
ActiveWindow.Zoom = 90
Else
ActiveWindow.Zoom = 130
End If
End If
Application.EnableEvents = True
With ActiveSheet
.EnableSelection = xlUnlockedCells
.Protect Password:="Test", DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
ActiveSheet.Unprotect "Test"
If Not Intersect(Target, Range("A4:A66")) Is Nothing Then
Target = IIf(Target = "", "x", IIf(Target = "x", "", ""))
Cancel = True
End If
With ActiveSheet
.EnableSelection = xlUnlockedCells
.Protect Password:="Test", DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
End Sub

Anzeige
Zeigt Fehler... Was für einen? Meldung? (omg)
18.04.2018 13:33:13
EtoPHG

AW: Zeigt Fehler... Was für einen? Meldung? (omg)
18.04.2018 14:03:53
Peach123
False=Falsch
Wird mir angezeigt.
Kann es Daran liegen, dass ich zwei verschiedene Passwörter verwende? Je nach Bearbeitungsbereich?
Sprich muss ich dies dann bei zwei Passwörtern zwei mal verschließen?
So geht nicht weiter... Peach
18.04.2018 14:11:28
EtoPHG
Sorry, aber ich steig aus..
1. Man muss dir alles aus der Nase ziehen.
2. Mit deinem Excel/VBA Level würde ich die Finger vom Ganzen lassen.
3. Du gehst nicht auf Antworten ein.
4. Du postest völlig kryptisches. False=Falsch ist keine Fehlermeldung und/oder ich sehe nirgends eine Codezeile, die so lautet.
5. Ohne Beispielmappe gehts nicht weiter.
Gruess Hansueli
Anzeige
AW: So geht nicht weiter... Peach
18.04.2018 14:34:16
Peach123
Hansueli es tut mir leid
Meine Kenntnisse beschränken sich wirklich auf ein Minimum
Ich lerne ich bei jedem Fehler hinzu
und hoffe auch für dieses Problem eine Lösung zu finden.
Bei der Beispieldatei ist der Normale Blattschutz vorab deaktiviert.
https://www.herber.de/bbs/user/121124.xlsm
Der Blattschutz ist NICHT deaktiviert! (owT)
18.04.2018 15:02:28
EtoPHG
Hallo,
In der Beispielmappe ist das Blatt mit einem Kennwort-Schutz geschützt.
Das Passwort kenn ich nicht und "Test" ist es mit Sicherheit nicht.
Gruess Hansueli
AW: Der Blattschutz ist NICHT deaktiviert! (owT)
18.04.2018 16:10:44
Peach123
Entschulige Hansueli,
Hab nochmals eine Datei hochgeladen in der kein Blattschutz enthalten ist.
Und das Kennwort für den Bereichszugriff abgeändert in Test.
https://www.herber.de/bbs/user/121132.xlsm
Anzeige
AW: Der Blattschutz ist NICHT deaktiviert! (owT)
19.04.2018 09:28:23
EtoPHG
Hallo Alexander,
Ich kann dir nur noch Empfehlungen abgeben, da ich die verschiedenen Bereiche/Benutzer Relationen, die du erwähnt hast, nicht kenne.
Schau Dir in der XL-VBA Hilfe das AllowEditRange-Objekt an und versuche anhand der Beispiele und der Unprotect/Protect Methode diese Bereiche je nach Benutzer zu ent-/-sperren.
Gruess Hansueli

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige