AW: VBA schreiben zum Zeilen löschen
01.11.2010 23:38:30
fcs
Hallo Ludwig,
du ja auch gleich schreiben können, dass du die Einträge nicht nur löschen willst, sondern vorher in ein anderes Blatt eintragen.
Zeitsteuerungen innerhalb von Excel zu realiseren, setzt voraus, dass das Excel ständig geöffnet ist. D.h. dass bei 24 h Zyklus Rechner und Excel rund um die Uhr laufen müssen. Alternativ kann man noch mit dem Zeitplaner im Windows-Betriebssystem arbeiten. Dann kämpft man aber ggf. mit dem Zugriff auf die Datei wenn diese zum Zeitpunkt der Makroausführung in Benutzung ist.
In soweit halte ich meinen Lösungsvorschlag für wesentlich praktikabler, bei dem die Einträge vom Vortag oder älter (z.B. Einträge vom Freitag, die dann ggf. erst am Montag übertragen und gelöscht würden) beim ersten Öffnen der Datei am jeweiligen Tag abgearbeitet werden.
Wenn du wirklich jeden Eintrag nach genau 24 Stunden aus der Hauptliste entfernen willst, dann muss du in deiner Tabelle ausser dem Datum auch die Uhrzeit eintragen. Sonst ist es nicht möglich Sekunden/Minutengenau? zu arbeiten.
Du solltest dir also nochmals genau Überlegen, welche Anforderungen du an den zeitlichen Ablauf des Verschiebens der "Abgearbeitet"-Einträge stellen willst.
Nachfolgend noch die Anpassung für das Verschieben der Einträge nach Tabelle3
Gruß
Franz
Private Sub Workbook_Open()
'Alte "Abholbereit" nach Tabelle 3 verschieben
Dim Zeile As Long, wks As Worksheet, wksZiel As Worksheet
Set wks = ThisWorkbook.Worksheets("Eingabe")
Set wksZiel = ThisWorkbook.Worksheets("Tabelle3")
Application.ScreenUpdating = False
Application.StatusBar = "Alte Zeilen ""Abholbereit"" werden gelöscht"
With wks
For Zeile = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
If .Cells(Zeile, 9).Value = "Abholbereit" And _
.Cells(Zeile, 7).Value > 0 And .Cells(Zeile, 7).Value = 4 Then
.Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)). _
SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
End If
End With
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub