28.05.2019, 12:11 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2019, 12:12 von Beltason.)
Hallo Leute,
ich habe eine Excel Mappe die dank eurer Hilfe sehr gut funktioniert. An einigen Stellen habe ich Zellen mit schreibschutz versehen. Wenn der Benutzer nun da was eingeben will, geht ja das eigene Ecxel Hinweisfenster auf. Ok das kennen wir ja alle...
Genau dieses Hinweisfenster gefällt mir nicht. Würde es gerner Persönlicher machen, z.b. Popup oder Hinweisfenster "Hallo, diese Zelle darfst du nicht verändern!" Ist das möglich und wenn ja, wie?
das geht normalerweise nicht - die excelinternen Meldefenster kannst du nicht beeinflussen oder ändern. Aber du könntest den Fehler mit VBA (Markro) abfangen und dafür ein eigenes Hinweisfenster aufrufen.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
genau, weg mit den drögen, formalen Fehlermeldungen.
Das Folgende schützt die Zelle A1 (Blattschutz inaktiv). Beim Versuch, irgendwas zu ändern wird ein zufällig gewählter Text ausgegeben (und die Änderung zurückgedreht).
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, s As String If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Application.EnableEvents = False Application.Undo Application.EnableEvents = True
i = Int(Rnd * 7) + 1 Select Case i Case 1: s = "Ey du Depp, des derfste nich ändern!" Case 2: s = "Denken Sie immer dran: das größte Problem sitzt vor dem Bildschirm. Also sehen Sie gefälligst genau hin, wenn Sie was ändern." Case 3: s = "Diese Zelle darf nicht geändert werden. Siehe Betriebshandbuch Seite 785, Abschnitt III, Unterabschnitt d)." Case 4: s = "Sie sind sich doch hoffentlich darüber im klaren, dass eine Änderung dieser Zelle ganz üble Konsequenzen nach sich ziehen kann?" Case 5: s = "Nix da, da könnt ja jeder kommen!" Case 6: s = "Man kann diesen Anwendern nicht trauen, immer wollen Sie was ändern, wo sie es nicht dürfen." Case 7: s = "Ach nee, ich hab jetzt kein Bock, hier was neues einzutragen" End Select MsgBox s, vbCritical, "Finger weg von dieser Zelle!" End Sub
28.05.2019, 16:51 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2019, 17:04 von hddiesel.)
Hallo Beltason,
den Code von mmat, durch 2 Zeilen erweitern, dann sollte er seinen Zweck, im angegebenen Bereich z.B. A1:A100 erfüllen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, s As String
If Intersect(Target, Range("A1:A100")) Is Nothing Then Exit Sub
If Target.Locked = True Then Application.EnableEvents = False Application.Undo Application.EnableEvents = True
i = Int(Rnd * 7) + 1
Select Case i Case 1: s = "Ey du Depp, des derfste nich ändern!" Case 2: s = "Denken Sie immer dran: das größte Problem sitzt vor dem Bildschirm. Also sehen Sie gefälligst genau hin, wenn Sie was ändern." Case 3: s = "Diese Zelle darf nicht geändert werden. Siehe Betriebshandbuch Seite 785, Abschnitt III, Unterabschnitt d)." Case 4: s = "Sie sind sich doch hoffentlich darüber im klaren, dass eine Änderung dieser Zelle ganz üble Konsequenzen nach sich ziehen kann?" Case 5: s = "Nix da, da könnt ja jeder kommen!" Case 6: s = "Man kann diesen Anwendern nicht trauen, immer wollen Sie was ändern, wo sie es nicht dürfen." Case 7: s = "Ach nee, ich hab jetzt kein Bock, hier was neues einzutragen"
End Select
MsgBox s, vbCritical, "Finger weg von dieser Zelle!"
End If
End Sub
Hallo Beltason,
funktioniert nur, wenn die Zelle per Eingabe bearbeitet wird, wenn der Blattschutz nicht gesetzt ist und auch nicht per copy und einfügen gearbeitet wird. Ein Schutz ist weit davon entfernt und nicht mit dem Makro zu vergleichen.
29.05.2019, 01:04 (Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2019, 01:26 von hddiesel.)
Hallo Beltason,
sorry war noch unterwegs und habe erst nach einschalten des PC's, deine Frage gesehen.
Punkt 1: wenn du bei meiner Erweiterung, statt nur den Bereich z.B. Range("A1"), einen Bereich Range("A1:A10") angibst und nur die Zelle A5, aus dem Bereich Range("A1:A10") sperrst, dann kannst du A5, nicht in eine ungesperrte Zelle kopieren, jedoch eine ungesperrte Zelle in A5, das meine ich.
Punkt 2: Ist nur die Zelle A5 wie zuvor gesperrt, kannst du sie nicht ändern, alle ungesperrten Zellen kannst du ändern, nur beim kopieren, gibt es die Ausnahme unter Punkt 1.
Punkt 3: Verschiebe ich die geschützte Zelle A5, nach ungeschützte A8, erfolgt die Meldung, die Zelle wird anschließend verschoben und es erfolgt nochmals die Meldung.
Punkt 4: Verschiebe ich eine ungeschützte Zelle A8, nach geschützte A5, ergibt sich wieder ein anderes Verhalten.
Gruß Karl
Folgende(r) 1 Nutzer sagt Danke an hddiesel für diesen Beitrag:1 Nutzer sagt Danke an hddiesel für diesen Beitrag 28 • mmat
mmh, ja, einigen wir uns darauf, dass mein Lösungsansatz nicht perfekt ist. Es ist allerdings fraglich, ob es einen perfekten Lösungsansatz unter VBA gibt.
Deine Ergänzung hat auch eine Schwachstelle, nämlich die Bedingung "If Target.Locked=true"
Bei Copy und Paste wird das Locked-Attribut der Quelle wird auf das Ziel übertragen (zusammen mit dem ganzen Rest der Quelle) und zum Zeitpunkt dieser Abfrage ist es bereits überschrieben. Das gleiche passiert bei der Schiebung. Um das abzufangen, bräuchts einen "Before-Change-Event") und den gibt's nicht.
Naja, ich denke, man sollte nicht zuviel Zeit auf so ein Feature verschwenden.