37414
Goto Top

Alle Zeilen sperren, in denen ein bestimmter Ausdruck auftaucht

Hallo liebe User,

ich habe eine Excel-Datei im Format ".xlsm", in der Daten eingetragen werden, die sich nachträglich nicht mehr verändern lassen dürfen.
Der komplette Bereich liegt zwichen A10 und P19.

Dazu gibt es im Zellbereich P10 - P19 jeweils eine Zelle, in der ein Datum eingetragen wird. Nach Eintrag dieses Datums wird die Excel-Datei geschlossen.
Die jeweiligen Zeilen, in denen nun der Ausdruck "erteilt" in einer Zelle auftaucht, sollen komplett gesperrt werden... aber erst, nachdem das Datum eingetragen wurde.
Am besten wäre es daher, dass die Funktion erst greift, wenn das Tabellenblatt nach Eingabe des Datums geschlossen wird.

Zu bedenken ist dabei jedoch, dass es in jeder Zeile innerhalb des Zellbereichs A10 - P19 bereits Zellen gibt, die gesperrt sind, da es sich um Ergebnis-Zellen handelt.

Und es sollte die Möglichkeit geben, die gesperrten Zellen nach Eingabe eines Kennwortes doch noch editieren zu können, um eventuelle Fehler korrigieren zu können.
Aber ich nehme an, dass dies eh über "Blattschutz aufheben" möglich sein dürfte, wodurch man die entsprechenden Zellen ja dann wieder entsperren könnte. Aber vielleicht geht das ja auch etwas eleganter face-wink

Und am besten wäre eine automatische Speicherung, sobald man die Excel-Tabelle schließt.

ALTERNATIV könnte die Sperrung und Speicherung auch starten, nachdem in der jeweiligen Zelle der Spalte "P" das Datum eingetragen wurde und die Tabelle geschlossen wird.

Ich nehme an, dass dies mit VBA-Code umsetzbar ist.
Würde mich sehr freuen, wenn mir jemand von Euch mit einem passenden Code helfen könnte.

Ich hatte dazu schon folgende ähnliche Lösung von "colinardo" gefunden, wo ich jedoch mit der Umstellung auf meine Anforderungen Probleme hatte:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    'Als gespeichert festlegen damit keine Nachfrage von Excel kommt  
    ActiveWorkbook.Saved = True
    'Speichere das Sheet automatisch bevor es geschlossen wird  
    ActiveWorkbook.Save
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim ws As Worksheet, changeRange As Range
    'Arbeitsblatt auf dem die Änderung vorgenommen wird  
    Set ws = Sh
    'Bereich der überwacht wird  
    Set changeRange = ws.Range("C2,C3,C5,C6,C8,C9,C11,C12,C14,C15")  
    'Wenn eine Änderung an einer Zelle vorgenommen wird die in der Liste steht ...  
    If Not Application.Intersect(changeRange, Target) Is Nothing Then
        If ws.ProtectContents = True Then
            'Wenn das Sheet geschützt ist entferne kurzfristig den Schutz um die Zelle als gesperrt festzulegen.  
            ws.Unprotect ""  
            Target.Locked = True
        Else    'Sheet ist ungeschützt  
            Target.Locked = True
        End If
        'aktiviere den Blattschutz mit leerem Kennwort  
        ws.Protect "", Contents:=True  
    End If
End Sub

Danke & schöne Grüße,
imebro

Content-Key: 650192

Url: https://administrator.de/contentid/650192

Printed on: April 18, 2024 at 18:04 o'clock

Mitglied: 37414
37414 Feb 11, 2021 at 10:03:41 (UTC)
Goto Top
Hallo nochmal,
vielleicht habe ich es ja auch zu kompliziert ausgedrückt.

Im Grunde soll einfach die jeweils bearbeitete Zelle - nachdem dort im letzten Feld (ganz rechts) ein Datum eingetragen wurde - gesperrt werden.
Und beim anschließenden Schließen der Excel-Datei soll diese gespeichert werden.

Danke und Grüße,
imebro
Mitglied: 37414
37414 Feb 12, 2021 at 12:46:09 (UTC)
Goto Top
Tja, offenbar hat sich an dieses Problem niemand von Euch heran getraut.
Aber ich habe es jetzt gelöst.

Grüße,
imebro