Clever-Excel-Forum

Normale Version: Hinweis Schreibschutz ändern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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?

lg an alle
Hallo,

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.
Hallo,

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
vg, MM
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.
Hallo hddiesel,

der "Schutz" müsste auch dann anspringen, wenn im geschützten Bereich etwas mit Copy und Paste eingefügt wird (bei mir tut er das jedenfalls).

woher weisst du dass A1:A100 zu schützen ist und das locked - Attribut zu berücksichtigen ist Huh

vg, MM
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.
Hallo Jungs, danke für die Arbeit, bin gleich im Büro und werde testen und berichten Blush
Hallo hddiesel,

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.

vg, MM