Seite 1 von 1
zeile mit bestimmten zellwerten löschen
Verfasst: Di, 25.04.2006 11:29
von kannenklaus
hallo ng,
mit dem folgenden makro will ich bestimmte zeilen löschen, wenn die zellen a1 bis a10 einen bestimmten wert haben. wird das makro ausgeführt, wird der löschvorgang nur in teilen vorgenommen. ist besser mit einer do/loop-schleife zu arbeiten?
Code: Alles auswählen
Sub SuWertLoescheZeile1
Dim oDoc, oSheet as Object
Dim str1 as String
Dim i as Integer
oDoc = ThisComponent
oSheet = oDoc.CurrentController.getActiveSheet
str1 = "wurst"
for i = 0 to 9
If oSheet.getCellByPosition(0, i).String = str1 then oSheet.Rows.removeByIndex(i,1)
'If oSheet.getCellByName("A"&i).string = str1 then oSheet.Rows.removeByIndex(i,1)
next i
end Sub
freue mich auf eine antwort
klaus
Verfasst: Di, 25.04.2006 13:11
von Stephan
wird der löschvorgang nur in teilen vorgenommen.
ja
ist besser mit einer do/loop-schleife zu arbeiten?
aber nicht wegen dem teilweisen Löschvorgang, obwohl mein Code nun in Do-Loop ist
Der Fehler ist das Du nicht beachtest das sich die Zählung beim Löschen ändert.
Beispiel:
A1 und A2 enthalten "wurst", beim ersten Durchlauf i = 0 wird "wurst" in A1 erkannt und Zeile 1 gelöscht, nun ist aber die ehemalige Zeile 2 plötzlich Zeile 1. Das "wurst" in der nun neuen Zeile 1 wird jedoch niemals gefunden weil garnicht danach gesucht wird denn im nächsten Schleifendurchlauf ist i bereits 1.
Probiere sowas:
Code: Alles auswählen
Sub SuWertLoescheZeile1
Dim oDoc, oSheet as Object
Dim str1 as String
Dim i as Integer
oDoc = ThisComponent
oSheet = oDoc.CurrentController.getActiveSheet
str1 = "wurst"
i = 0
j = 9
Do
If oSheet.getCellByPosition(0, i).String = str1 then
oSheet.Rows.removeByIndex(i,1)
j = j - 1
Else
i = i + 1
End If
Loop While j >= i
end Sub
Gruß
Stephan
Verfasst: Di, 25.04.2006 13:43
von kannenklaus
hallo stephan
Der Fehler ist das Du nicht beachtest das sich die Zählung beim Löschen ändert.
dass hier der fehler liegt war mir klar. dank deines tippes klappt es nun. besten dank dafür!
grüße
klaus
Verfasst: Di, 25.04.2006 14:17
von Stephan
dass hier der fehler liegt war mir klar.
Naja, OK. Aber mal zur Verdeutlichung das Du nicht glaubst es hinge an Do-Loop, es geht mit For-Next genauso gut:
Code: Alles auswählen
Sub SuWertLoescheZeile1
Dim oDoc, oSheet as Object
Dim str1 as String
Dim i as Integer
oDoc = ThisComponent
oSheet = oDoc.CurrentController.getActiveSheet
str1 = "wurst"
j = 9
for i = 0 to j
If oSheet.getCellByPosition(0, i).String = str1 then
oSheet.Rows.removeByIndex(i,1)
j = j - 1
i = i - 1
End If
next i
end Sub
Der Wert des Schleifenzählers ist innerhalb der Schleife grundsätzlich ganz irrelevant soweit es dessen Steuerfunktion bezüglich der Schleife betrifft, erst wenn die Next-Zeile kommt wird der Wert der Variablen um die gegebene Schrittweite (hier 1 da nicht spezifiziert) erhöht, dann zum For gegangen und dort geschaut ob die Variable noch innerhalb des Bereichs liegt, wenn ja der Inhalt der Schleife abgearbeitet, sonst nach der Schleife fortgesetzt.
Heißt also beispielsweise das im Folgenden das Makro nie beendet wird, weil i nach dem For immer 0 ist und vor dem Next -1.
Gruß
Stephan