Zeilen löschen und gleichzeitig Formeln einfügen


Zvoni

Erfahrenes Mitglied
Dein "With Info" funktioniert nicht.
Mache ich in deinem Code dagegen ein "With Tabelle1" gehts
 

josef24

Erfahrenes Mitglied
Sorry, aber welcher Code soll es denn sein, bei mir geht jedenfalls nichts. Die Mappe1, da geht aber nichts? Gruß Josef
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
Ersetz mal in deiner Mappe 1 (Anhang) das " With Info" mit "With Tabelle1", und schon gehts.
Habs bei mir eben getestet

EDIT: Ähhh....quatsch. Da fehlt noch was: und zwar die ermittlung der letzten Zeile.
Die muss noch vor die Schleife rein
Code:
With Tabelle1
lngZeileMax = .Cells(.Rows.Count, zielspalte).End(xlUp).Row
'Schleifen
 

josef24

Erfahrenes Mitglied
Ist wohl noch ein Hacken in der Sache, sorry, es bewegt sich nichts, leider. Frage mich allerdings warum es in der einen Tabelle geht, und in meinem "Original" nicht. Wo könnte ich denn noch Veränderungen vornehmen? In der Spalte 6 wo ich die Formel anwende, geschieht nichts. Ich aktualisiere über eine Eingabemaske. Ist "Worksheet_Activate()" nicht ein automatisches Aktivieren eines Prozesses? Gruß Josef

Der Code:
Code:
 Private Sub Worksheet_Activate() '   Open() '  Activate()  ' ** Zeilenentfernen() ' Zeileentfernen()

Dim lngZeile As Long, zielspalte As Long  '  , With as variable
        zielspalte = 6
                With Tabelle1
              
             lngZeileMax = .Cells(.Rows.Count, zielspalte).End(xlUp).Row
          
            For lngZeile = lngZeileMax To 2 Step -1

        .Cells(lngZeile, zielspalte).FormulaLocal = "=WENN(E" & lngZeile & "="""";"""";DATEDIF(E" & lngZeile & ";HEUTE();""D""))"
  
If .Cells(lngZeile, zielspalte) >= 10 Then .Rows(lngZeile).Delete ' Löscht Daten älter 30 Tage
Next
    End With
Application.CutCopyMode = False '  Beendet den Copiervorgang
End Sub
 
Zuletzt bearbeitet:

josef24

Erfahrenes Mitglied
Das Ausführen hat funktioniert. Aber wenn ich den Code z. B. mit F5 aktiviere, müsste sich ja etwas tun? Separat ausprobiert habe ich es mit der Codezeile "Löschen", das ist o.K. Die Codezeile "Formel" übertragen funktioniert hingegen nicht. Hänge die Datei nochmal an. Gruß Josef
 

Anhänge

Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
Ich glaube ich habe deinen Fehler gefunden:
Die Ermittlung der letzten Zeile findet in Bezug auf Spalte F statt.
Wenn da natürlich keine Einträge sind, wirft er als letzte Zeile natürlich nur schmarrn raus.
Änder mal wie folgt ab:
Code:
    With Tabelle1
        lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row 'Hier Änderung von "zielspalte" auf "1" Spalte A
        For lngZeile = lngZeileMax To 2 Step -1
            .Cells(lngZeile, zielspalte).FormulaLocal = "=WENN(E" & lngZeile & "="""";"""";DATEDIF(E" & lngZeile & ";HEUTE();""D""))"
            If .Cells(lngZeile, zielspalte) >= 10 Then .Rows(lngZeile).Delete ' Löscht Daten älter 10 Tage
        Next
    End With
Ich habe jetzt Spalte A genommen. Du musst natürlich selbst wissen, welche Spalte definitiv Einträge bis zum "Ende" hat (Adressen-Spalte?).
Ich habe die If-Delete-Zeile auskommentiert, und alle Formeln wurden korrekt gesetzt
 

josef24

Erfahrenes Mitglied
Danke für deine erneute Hilfe. Habe den Code mit Erfolg getestet. Ist mir für die Praxis eine große Hilfe. Nochmal vielen Dank, Gruß Josef