Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Makro Search and Destroy

Betrifft: Makro Search and Destroy von: Deniz
Geschrieben am: 23.10.2014 10:48:29

Hallo,

ich habe hier ein Problem vorliegen und komme einfach nicht mehr weiter.

Was ich möchte :
Das Makro soll in S:S den Wert von AE1 suchen und überall wo er ihn findet soll die ganze Zeile gelöscht werden.

ich hoffe ihr könnt mir helfen, ich komme nich mehr weiter o.O

  

Betrifft: AW: Makro Search and Destroy, ohne Test. ... von: MCO
Geschrieben am: 23.10.2014 11:06:11

For each cl in range("S:S")

if cl.value = Range("Ae1") then rows(cl.row).delete
next cl


Es gibt allerdings einige sinnvolle Verbesserungen:
z.B. den Bereich auf den bisher genutzten zu begrenzen
... in Range("S1:S" & activesheet.usedrange.rows.count)

Gruß, MCO


  

Betrifft: AW: Makro Search and Destroy von: Deniz
Geschrieben am: 23.10.2014 11:31:02

Also erstmal danke für deine schnelle Hilfe, diese funktioniert eigentlich auch, aber sobald ich diesen Befehl ausführe "hängt" sich Excel auf und es dauert und dauert. Kann nicht am Rechner liegen da ich andere ähnliche Befehle habe die aber nach einem festen Wert suchen und löschen und die gehen sofort.

mfg


  

Betrifft: AW: Makro Search and Destroy von: MCO
Geschrieben am: 23.10.2014 12:01:57

Hallo!

Ich nehme an, du hast die Range nicht begrenzt, wie ich es dir geraten habe....

Weiteres Problem ist, dass die Zeilen VORWÄRTS durchgegangen werden, wenn also Zeile 9 gelöscht wird , ist Zeile 10 plötzlich Zeile 9,d.h. dass bei 2 aufeinanderfolgenden Zeilen nur die erste gelöscht wird. Darum hab ich eingebaut, dass der Durchlauf so lange erfolgt, wie noch Zeilen gelöscht wurden (=true)

Hier also der neue Code:

Sub test_sss()

Anfang:
nochmal = False

For Each cl In Range("S1:S" & ActiveSheet.UsedRange.Rows.Count)
    If cl.Value = Range("Ae1") Then
        Rows(cl.Row).Delete
        nochmal = True
    End If
Next cl

If nochmal = True Then GoTo Anfang
MsgBox "fertig"

End Sub
Gruß, MCO