Hallo und Guten Morgen!
Ich versuche im Augenblick Makros für das Auslesen, über- und weiterverarbeiten von Messdaten für mein Büro zu schreiben (da sich die Daten über mehr als 16.000 Zeilen zu je 6 Spalten erstrecken soll dieses soweit wie möglich automatisiert werden). Nur kurz zur Info was ich über VBA weiß habe ich mir selbst beigebracht.
Nun zu meinem Problem:
Das Makro soll alle Datensätze die außerhalb des Messzeitraums liegen löschen (als komplette Zeilen). Als Grundlage wird dafür das Datum verwendet => die Bedingung ist also größer als und kleiner als das eingegebene Datum => deren Zeilennummer. Neben dem Datum wird auch die Uhrzeit der Messung erfasst, deswegen habe ich es erst mit der Find-Funktion probiert, da ich hier aber die Suchroutine für das Ende des Messzeitraums noch ergänzen müsste damit er nicht vom 1. Ergebnis aus geht sondern das vom letzten, habe ich überlegt ob die Match-Funktion eine besser Lösung wäre. Das Makro besteht im Prinzip aus 2 For-Schleifen die solange wiederholt werden sollen bis die Bedingung nicht mehr eingehalten ist (der 2. Teil ist noch unfertig, ich wollte die erste Schleife fertigstellen und diese dann kopieren / anpassen). Die Spalte mit den Messzeitpunkten ist als Datum mit Uhrzeit formatiert und befindt sich in Spalte F => 6, dennoch steigt das Programm jedesmal bei der Set-Funktion aus.
Zu den Fehlern: Versuche ich den Code mit der Match-Funktion durchlaufen zu lassen bringt er mir "Laufzeitfehler 424 - Objekt erforderlich"
Versuche ich es mit Find wird Found auf "Nothing" gesetzt (weiß ich durch den Überwachungsmonitor) und er steigt logischerweise bei If aus "Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt". Nur verstehe ich nicht warum! Die Datei in der ich das Makro schreibe basiert auf einer Original-Auslese-Datei (schon bis zu diesem Punkt überarbeitet) dementsprechend habe ich bei meinen Probeläufen ein Datum gewählt das innerhalb des Datenbereichs liegt.
Sub Filtern2()
'
' Filtern2 Makro
'
'
Dim Zeile As Variant
Dim Ende As Variant
Dim tofind As Variant
Dim found As Variant
Dim Zeile2 As Variant
Dim tofind2 As Variant
Dim found2 As Variant
Application.ScreenUpdating = False
Ende = Cells.SpecialCells(xlCellTypeLastCell).Row
tofind2 = InputBox(prompt:="Bitte Anfangsdatum des Messzeitraums eingeben! Datenformat: dd-mm-yy", Title:="Datum")
If tofind2 = "" Then Exit Sub
tofind = InputBox(prompt:="Bitte Enddatum des Messzeitraums eingeben! Datenformat: dd-mm-yy", Title:="Datum")
If tofind = "" Then Exit Sub
For Zeile = Ende To found Step -1
Set found = Application.Match(tofind.Value, ActiveSheet.Columns(6), -1)
' Set found = ActiveSheet.Columns(6).Find(what:=tofind, LookIn:=xlValues, Lookat:=xlWhole)
' If found Is Nothing Then Exit For
If Cells(Zeile, 6) > found Then Rows(Zeile).EntireRow.Delete Shift:=xlUp
Next Zeile
found2 = Columns(6).Find(what:=tofind2, LookIn:=xlValues, Lookat:=xlWhole).Row
For Zeile2 = found2 To 13 Step -1
If found2 > Rows(Zeile2) Then Rows(Zeile2).Delete
Next Zeile2
Application.ScreenUpdating = True
End Sub
Ich weiß nicht mehr weiter, ich habe den Code auf Fehler durchgesehen aber nichts gefunden, ich habe versucht ihn umzuschreiben ohne Erfolg. Weiß jemand von euch vielleicht eine Lösung.
|