yan2021
Goto Top

Zellen endgültig sperren in Excel

Hallo,

ich habe eine Excel-Datei, wo in mehrere Zeilen Einträge gemacht werden (in den Spalten A - Q).
Sobald in Spalte Q automatisch das Tagesdatum eingetragen wurde, soll die komplette Zeile gesperrt werden, sodass man beim nächsten Aufruf der Excel-Tabelle diese Zeile nicht mehr verändern kann (es sei denn, man entsperrt sie mit einem bestimmten Kennwort).

Das funktioniert über VBA-Code und funktioniert grundsätzlich sehr gut.

Hier mal die beiden VBA-Codes:

1) "Diese Arbeitsmappe":

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim objCell As Range
    With Worksheets("Eingaben")  
        For Each objCell In Range("Q9:Q20")  
            If IsDate(objCell.Value) Then objCell.EntireRow.Locked = True
        Next
    End With
End Sub

2) "Tabelle 1" (also erstes Tabellenblatt):

Option Explicit

Private Sub Worksheet_Calculate()
    Dim objCell As Range
    For Each objCell In Range("O9:O20")  
        With objCell
            If .Text = "OK" Then _  
                If Not IsDate(.Offset(0, 2).Value) Then .Offset(0, 2).Value = Date
        End With
    Next
End Sub

Es handelt sich um Excel in der Version 2021 (aus dem MS 365 Business Premium Paket).

Mein Problem:

Manchmal muss ich nachträglich in den Tabellen noch etwas anpassen. Hierzu entsperre ich die Excel-Datei mit einem Kennwort und kann dann Änderungen (z.B. in einer Formel etc.) vornehmen.

Anschließend schütze ich die Arbeitsmappe wieder über "Blatt schützen" mit dem Kennwort.
Dabei fällt mir dann immer wieder auf, dass sich dann das Tagesdatum in Spalte "Q", welches automatisch eingetragen worden war, auf den aktuellen Tag ändert.

Aber genau das sollte ja eigentlich durch den Code verhindert werden.

Kann mir jemand von Euch sagen, wie ich die jeweiligen kompletten Zeilen... inkl. Spalte "Q" so sperren kann, dass man die Einträge wirklich nicht mehr verändern kann?

Falls ich mich nicht verständlich ausgedrückt habe... bitte einfach fragen face-smile

Grüße von
Yan face-wink

Content-Key: 6541280785

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

Printed on: June 18, 2024 at 13:06 o'clock

Member: kpunkt
kpunkt Mar 28, 2023 at 09:48:16 (UTC)
Goto Top
Das wird wohl an den Berechnungsoptionen liegen. Wenn die auf automatisch stehen, dann berechnet Excel einfach.
Die mal auf manuell stellen
Application.Calculation = xlManual

Wieder auf automatisch:
Application.Calculation = xlAutomatic
Member: Yan2021
Yan2021 Mar 28, 2023 at 10:21:43 (UTC)
Goto Top
Danke Dir.

In welchem der beiden Codes müßte ich das denn eintragen... und wo genau dort innerhalb des Codes?

Grüße von
Yan face-wink
Member: kpunkt
kpunkt Mar 28, 2023 at 11:50:57 (UTC)
Goto Top
Vergiss es, da es so nicht funktionieren dürfte.
Das Problem scheint zu sein, dass da mit der Formel heute() gearbeitet wird.
Und die führt Excel nun mal eben aus.
Man könnte das Tagesdatum beim Erstellen bzw. erstmaligen Ausfüllen der Tabelle per VBA machen.
Oder aber man arbeitet mit einer Hilfsspalte und kopiert dann die Werte in eine andere Spalte.

Oder aber man füllt die Zellen für das Datum manuell.
Member: Yan2021
Yan2021 Mar 28, 2023 updated at 12:03:43 (UTC)
Goto Top
Ooooh, Du hast Recht.

Es wird weiter vorne - in der Spalte "C" - tatsächlich mit dem Code

=WENN(B9="";"";HEUTE())  

gearbeitet.
Dieser Code bezieht sich auf die Spalte "B", wie man ja sieht und richtet sich danach, ob dort was drin steht oder eben nicht. Diesen Code könnte ich jedoch aus der Spalte "C" entfernen. Dann müßte man das Tagesdatum dort eben manuell eintragen.

Und wenn ich Dich richtig verstanden habe, würde dann das durch den VBA-Code in die Spalte "Q" eingetragene Datum sich definitiv nicht mehr verändern, wenn ich etwas an der Tabelle ändern muss... richtig?


Grüße von
Yan face-wink
Member: kpunkt
kpunkt Mar 28, 2023 at 12:01:34 (UTC)
Goto Top
Ja, weil man den VBA-Code erst manuell ausführen muss.
Member: Yan2021
Yan2021 Mar 28, 2023 at 12:03:50 (UTC)
Goto Top
Was ich dabei aber nicht verstehe:
Wenn in Spalte "B" ja dann etwas drin steht, wird das aktuelle Datum ja in Spalte "C" eingetragen. Dadurch ist die Formel dort ja raus. Und am Ende wird durch den VBA-Code ja die komplette Zeile gesperrt.
Somit wäre ja überhaupt kein "HEUTE()" mehr vorhanden, wodurch das Datum in Spalte "Q" dann nochmal geändert werden könnte. Denn nur dort wird es verändert... nicht in Spalte "C".
Member: kpunkt
kpunkt Mar 28, 2023 updated at 12:16:05 (UTC)
Goto Top
Aber in Spalte C steht dann ja die Formel heute() drin und nicht der Wert der Formel heute().
Das macht die WENN-Formel.
Du müsstest den Inhalt der Spalte C erst kopieren. Der Wert bleibt dann unverändert.

Fällt mir gerade noch ein....
Du könntest die Ursprungsdatei als CSV ausgeben. Und dann die CSV wieder mit Excel öffnen. Dann hast du da überall nur noch Werte.
Member: Yan2021
Yan2021 Mar 28, 2023 at 12:42:25 (UTC)
Goto Top
Hmmm...

Sorry dass ich nochmal nachhake.

Ich habe es gerade mal durchgeführt.
In Spalte "B" habe ich in der obersten Zelle "B9" einen Text eingetragen.
Dadurch erschien dann in der Zelle "C9" --> 28.03.2023.

Wenn ich mit dem Cursor zu "C9" gehe, sehe ich dort ebenso nur das heutige Datum und oben in der Adressleiste auch.
Daher sieht es für mich so aus, als ob die Formel "=WENN(B11="";"";HEUTE())" durch das heutige Datum "28.03.2023" überschrieben wurde.

Wie kann sich das Datum in der Zelle "Q9" dann nochmal ändern, wenn in "C9" ja überhaupt keine Formel mehr drin steht?

Vielleicht mache ich ja auch einen dicken Denkfehler... das will ich nicht ausschließen face-smile

Grüße von
Yan face-wink
Member: kpunkt
kpunkt Mar 28, 2023 at 13:35:50 (UTC)
Goto Top
Lass dir einfach die Formeln anzeigen. Formeln - Formeln anzeigen.
Da steht noch immer die Formel in der Zelle und kein Wert.
Excel kann die Zelle mit der Formel nicht selbständig überschreiben. Es bleibt immer eine Formel.
Member: Yan2021
Yan2021 Mar 29, 2023 at 06:53:52 (UTC)
Goto Top
Hallo und danke für den Tipp.

Nachdem ich den Blattschutz für das Tabellenblatt aufgehoben hatte und mir dann die Formeln anzeigen ließ, sah ich das hier:

formeln anzeigen

Das heißt in den Zellen "C9" und "C10" wurde jeweils ein Datum eingetragen.
Über "Formeln / Formeln anzeigen" sieht man hier jedoch keine Formel, sondern den Eintrag "45000".

Keine Ahnung, was das nun bedeutet. Auf jeden Fall wird das eingetragene Datum nicht angezeigt... aber statt dessen eben dieser Wert (was auch immer er bedeutet) face-smile

Grüße von
Yan face-wink