Datumsabhängiges leeren von anderen Zellen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Abraxxas.

    Datumsabhängiges leeren von anderen Zellen

    Hallo Community,
    da mir der Schädel dampft und ich keine passende Lösung für mein Problem finde, wende ich mich verzweifelt an alle VBA-Fans.

    Grundsätzlich ist eine Datumsabhängige Leerung von einzelnen Zellen vorgesehen.
    Vom aktuellen Datum (heute) aus gesehen, soll der Inhalt der Zelle in Spalte D dann gelöscht werden, wenn das dazugehörige Datum in Spalte B älter ist als 4 Monate.
    Nach Möglichkeit soll sich das Sheet automatisch aktualisieren, wenn die Datei geöffnet wird (auch wenn die Datei nicht täglich geöffnet wird, sollen ab dem Tag wo die Datei geöffnet wird, alle älteren Einträge in Spalte D geleert werden).
    Meine Versuchstabelle habe ich einfach mal mit hochgeladen.

    Schon mal vielen Dank vorab für Eure Hilfe und ich bin auf die Lösungsansätze gespannt.
    (Viel Spaß beim Knobeln ;-))

    Viele Grüße
    Abraxxas
    Dateien
    • Beispiel_A.xlsx

      (14,09 kB, 11 mal heruntergeladen, zuletzt: )
    Willkommen im Forum.
    Das erscheint mir ein sehr einfaches Problem, daher die Frage: Wo kommst Du nicht weiter?
    • Code bei Sheet-Öffnen ausführen? Prozedur Workbook_Open() im Code für die Exceldatei
    • Datumszelle auswählen und in ein Datum umwandeln? Funktion CDate()
    • Datumsvergleich? DateDiff().
    • Zeilen löschen? Kannst Du z.B. mit dem Makro-Recorder generieren und anschauen/modifizieren.
    • das Ganze in ner Schleife (bis zum Ende der Tabelle)? Programmier-Basics
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    VaporiZed schrieb:

    das Ganze in ner Schleife (bis zum Ende der Tabelle)
    Besser: Rückwärts von Ende bis Anfang.
    Insbesondere, falls Zeilen gelöscht werden sollen.

    Einfacher Vorschlag für nur Zell-Inhalt-Löschen:

    Visual Basic-Quellcode

    1. For Each c In Intersect(UsedRange, Range("B:B"))
    2. If IsDate(c) Then If DateDiff("m", c.Value, Date) > 4 Then c.Offset(0, 2).ClearContents
    3. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    Hallo guten Morgen zusammen,
    leider war es mir nicht möglich die Lösungsvorschläge am Wochenende auszuprobieren, da meine Netzwerkkarte ihren Dienst verweigerte.
    Sobald ich eine neue eingebaut habe, wird ich mich zu Hause daransetzen.
    Ich werde berichten.
    Bis dahin erst einmal vielen Dank an Euch.
    Wünsche einen angenehmen Wochenstart.

    Viele Grüße
    Abraxxas

    PS.:
    ich konnte es nicht abwarten und habe das mal vorab auf einem anderen Rechner getestet.

    @petaod
    Habe ich erfolgreich ausprobiert !!
    Vielen dank an Euch Beiden.


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Abraxxas“ ()

    Vielen Dank noch einmal für die Lösung.

    Ich habe es geschafft, dass das Makro per Button aktiviert und korrekt ausgeführt wird.

    Das Makro habe ich in folgendes Modul eingefügt:
    Public Sub loeschen()
    For Each c In Intersect(UsedRange, Range("B:B"))
    If IsDate(c) Then If DateDiff("m", c.Value, Date) > 12 Then c.Offset(0, 2).ClearContents
    Next
    End Sub

    Ziel ist es, dass das Makro beim Öffnen der Datei selbstständig startet.

    Dafür wurde in „DieseArbeitsmappe“ folgender Code eingefügt:
    Private Sub Workbook_Open()
    Call loeschen
    End Sub

    Hier bekomme ich die Fehlermeldung 424 und im Debugger wird mir die Zeile „For Each c In Intersect(UsedRange, Range("B:B"))“ in Gelb hinterlegt.

    Vorab schon einmal vielen Dank für Eure Hilfe
    Abraxxas
    Das ist objektorientiert geschrieben.
    Der Code gehört in den Codebereich von Tabelle1 (oder wie das SheetObjekt sonst heißt).
    Dann im Workbook-Objekt aufrufen mit
    Tabelle1.loeschen

    Achtung: Sheetname und Objektname sind nicht dasselbe.
    Der Sheetname wird auf dem Arbeitsblatt vergeben.
    Der Objektname wird in der IDE vergeben.

    Wenn du es (nicht objektorientiert) in ein Modul packst, musst du UsedRange und Range("B:B") das entsprechende Sheet-Objekt voranstellen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --