FindNext Befehl

06/07/2009 - 11:08 von Rainer Krusenbaum | Report spam
Einen guten Morgen an alle Experten da draussen,
ich hoffe mal wieder auf Hilfe weil ich die Lösung zu einem Fehler nicht
finden kann.
Das folgende kleine Testprogramm soll in einem bestimmten Bereich (in dem
Fall B8:B12) einen Wert suchen. Wenn dieser Wert gefunden wird soll die
entsprechende Zeile gelöscht werden und die Suche wiederholt werden bis
dieser Wert nicht mehr gefunden wird. Leider làuft das Programm nach dem
ersten Löschen in der Zeile mit dem FindNext Befehl auf einen Fehler.

Sub test()
Dim OBJ As Object
Dim A As String
Dim N, Z As Integer
N = 3
Set OBJ = Range("B8:B12").Find(N)
Do Until OBJ Is Nothing
OBJ.Select
Z = ActiveCell.Row
A = MsgBox(Z, vbOKOnly)
ActiveCell.EntireRow.Delete
Set OBJ = Range("B8:B12").FindNext(OBJ)
Loop
A = MsgBox("keine (mehr) gefunden", vbOKOnly)
End Sub

Kann mir irgendjemand dazu eine Lösung aufzeigen?
Vielen Dank schon mal im Voraus.
Gruß
Rainer
 

Lesen sie die antworten

#1 Bernhard Sander
06/07/2009 - 11:46 | Warnen spam
Hallo Rainer,

Das folgende kleine Testprogramm soll in einem bestimmten Bereich (in dem
Fall B8:B12) einen Wert suchen. Wenn dieser Wert gefunden wird soll die
entsprechende Zeile gelöscht werden und die Suche wiederholt werden bis
dieser Wert nicht mehr gefunden wird. Leider làuft das Programm nach dem
ersten Löschen in der Zeile mit dem FindNext Befehl auf einen Fehler.

Sub test()
Dim OBJ As Object
Dim A As String
Dim N, Z As Integer
N = 3
Set OBJ = Range("B8:B12").Find(N)
Do Until OBJ Is Nothing
OBJ.Select
Z = ActiveCell.Row
A = MsgBox(Z, vbOKOnly)
ActiveCell.EntireRow.Delete


hier wird OBJ gelöscht
Set OBJ = Range("B8:B12").FindNext(OBJ)


hier willst Du das gelöschte OBJ als Parameter von .FindNext wieder benutzen
kein Wunder, dass es kracht.
Loop
A = MsgBox("keine (mehr) gefunden", vbOKOnly)
End Sub



Der ursprüngliche Bereich B8:B12 kann durch das Rauslöschen von Zeilen
verkleinert werden, das ist in Deinem Programm nicht berücksichtigt.
Für den Makro-Lauf ist es normalerweise von Vorteil, SELECT, ActiveCell und
Konsorten NICHT zu verwenden.

Sub test()
Dim SuchBereich As Object, OBJ As Object
Dim A As String
Dim N As Integer, Z As Integer
'-- der Datentyp muss für jede Variable eigens angegeben werden!
'-- eine Variabel ohne Typ wird als Variant definiert.
N = 3
Set SuchBereich = Range("B8:B12")
Set OBJ = SuchBereich.Find(N)
Do Until OBJ Is Nothing
Z = OBJ.Row
A = MsgBox(Z, vbOKOnly)
OBJ.EntireRow.Delete
Set OBJ = SuchBereich.FindNext()
Loop
A = MsgBox("keine (mehr) gefunden", vbOKOnly)
End Sub

Gruß
Bernhard Sander

Ähnliche fragen