Wenn Sie die Zeilen in dem Arbeitsblatt löschen möchten, basierend auf einem Wert, dann Code wie die folgenden werden das tun ...
Sub DeleteRows()
Dim aRange As Range, aRow As Range, aCell As Range
Set aRange = Range("A1:E5")
For Each aRow In aRange.Rows
For Each aCell In aRow.Cells
If aCell.Value = "Somestring" Then
aRow.EntireRow.Delete
Exit For
End If
Next aCell
Next aRow
End Sub
Wenn Sie den Bereich ändern möchten, dass ein Objekt in VBA Referenzierung, basierend auf einem Wert, dann Code wie die folgenden wird das tun ...
Sub DeleteRowsInObject()
Dim aRange As Range, aRow As Range, aCell As Range
Dim bRange As Range, found As Boolean
Set aRange = Range("A1:E5")
For Each aRow In aRange.Rows
found = False
For Each aCell In aRow.Cells
If aCell.Value = "Somestring" Then found = True
Next aCell
If Not found Then
If bRange Is Nothing Then
Set bRange = aRow
Else
Set bRange = Union(bRange, aRow)
End If
End If
Next aRow
Set aRange = bRange
Set bRange = Nothing
End Sub
Sie müssen sich mit einem Range-Objekt, vorsichtig sein, die nicht kontinuierlich ist mit seinen Zeilen/Spalten, wie einig Die normalen Eigenschaften/Methoden liefern nicht unbedingt die Werte, die Sie erwarten würden.
Würde der Bereich in mehrere nicht kontinuierliche Abschnitte unterteilt? Gibt es eine Möglichkeit, die Zellen nach oben zu schieben, wie auf einem Spredsheet? –
@Srick - fügen Sie 'debug.print aRange.address' am Ende der Routine hinzu und Sie werden sehen, wie aRange" geteilt "wird. Je nachdem, was Sie erreichen möchten, ist es wahrscheinlich besser, ein Array vom Typ Variant zu verwenden. – OldUgly
Ok, also die Bereichswerte durchlaufen und in einem Array speichern. Ich versuche, einen Bereich von mehreren Arbeitsmappen zu einem Master-Arbeitsmappe zu verschieben, aber ich finde bestimmte Benutzereingabe auf den Quellbüchern macht die Prozedur fehlerhaft, ich möchte Dinge wie Leerzeichen und andere Qualifikationsmerkmale entfernen, die normalerweise auf dem Quellbuch gefiltert werden würden. Danke für Ihre Hilfe ! –