Ich versuche, ein Makro zu erstellen, das einen Bericht automatisiert. Das Problem ist, dass die Quelldaten Daten liefern, die wir nicht benötigen, und dass der Bericht selbst viele Berechnungen auf der Grundlage der gesamten Tabelle durchführt. Auf der Grundlage der Tabelle werden Hunderte von Berechnungen durchgeführt, sodass das Hinzufügen eines Einschlussparameters zu jeder Formel im Bericht unverhältnismäßig viel Zeit in Anspruch nehmen wird.
Dies lässt sich leicht umgehen, wenn Sie den Bericht manuell aktualisieren, indem Sie den Filter verwenden, Daten herausfiltern und die relevanten Daten löschen. Ich versuche jedoch, die Datei zu automatisieren, sodass wir einfach auf eine Schaltfläche klicken und sie aktualisieren können, ohne dafür 20 bis 30 Minuten aufwenden zu müssen.
Was ich daher tun möchte, was mir bisher aber nicht gelungen ist, ist, dass VBA jede Zeile löscht, deren Spalte eine bestimmte Zeichenfolge enthält.
Dies ist Teil eines größeren Makros, das Daten aktualisiert, eine Datumsspalte mithilfe von Text in Spalten korrigiert, einen Datenabschnitt löscht, die Formeln im KPI-Blatt berechnet und sie dann als Datum dieser Woche speichert.
Ich kann alle anderen Schritte problemlos automatisieren, da ich bereits mehrere Makros zum Aktualisieren anderer Berichte erstellt habe, aber das hier hat mich ratlos gemacht! Mein Google-Fu hat mich auch im Stich gelassen.
Antwort1
Dieses Sub löscht die gesamte(n) Zeile(n) eines Blattes, wenn ein durch die Variabledie Saitebefindet sich in der Spalte, die durch die Variable definiert istdie Kolumne
Sub deleterows()
Dim a As Application
Dim wkb As Workbook
Dim wks As Worksheet
Dim DataRange As Range
Set a = Application
Set wkb = ThisWorkbook
Set wks = wkb.ActiveSheet
wks.Application.ScreenUpdating = False
thecolumn = 2 'this have to be changed to the desired column
thestring = "some text" ' this have to be changed too
reviewing = True
visitrow = 1
While reviewing = True
visitrow = visitrow + 1
If wks.Cells(visitrow, 1) = "" Then
reviewing = False
End If
celldata = wks.Cells(visitrow, thecolumn)
If IsNumeric(celldata) = True Then
celldata = Trim(Str(celldata))
End If
If celldata = thestring Then
wks.Rows(visitrow).Delete
visitrow = visitrow - 1
End If
Wend
wks.Application.ScreenUpdating = True
Message = MsgBox("Finished!", vbOKOnly)
End Sub