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.

Hinweis Schreibschutz ändern
#1
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


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#2
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.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#3
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
Antworten Top
#4
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.
Gruß Karl
Antworten Top
#5
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
Antworten Top
#6
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:
  • mmat
Antworten Top
#7
Hallo Jungs, danke für die Arbeit, bin gleich im Büro und werde testen und berichten Blush
Antworten Top
#8
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
Antworten Top


Gehe zu:


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