Zeile löschen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

RealmReborn
Beiträge: 8
Registriert: Mi, 25.06.2014 08:04

Zeile löschen

Beitrag von RealmReborn »

Hi nochma.
Brauch nochmal eure Hilfe bei nem Makro
Moderation: Gerne! Aber bitte in einem neuen Thread. → Allgemeinen Hinweise zur Forumsbenutzung—lorbass, Moderator


Das folgende Makro soll im Prinzip das selbe wie das obrige* machen aber statt die zeile umzufärben sie Löschen
Mein bisheriges Makro für das:

Code: Alles auswählen

Sub DeleteTest

oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet = oSheets.getbyName("Test")
oRows = oSheet.getRows
raus = 10

Do
i = 1
	
tmp = oSheet.getCellByPosition(3,i).FormulaLocal
  	if tmp = "x" Then
  		for j = 0 to 1
      oRows.removeByIndex(j,i)
	Next j
    	raus = 10
	Else
     raus = raus - 1
  End If
  i = i + 1
Loop While raus > 0

End Sub
Irgendwie scheint es bei If/then nen Konflikt zu geben aber ganz sicher bin ich mir nicht.

Ich bedanke mich schon ma für Vorschläge



_________________
Moderation:

* Gemeint ist das Thema Makroproblem
lorbass, Moderator
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Zeile löschen

Beitrag von Stephan »

Irgendwie scheint es bei If/then nen Konflikt zu geben aber ganz sicher bin ich mir nicht.
Naja, ich habe es jetzt nicht ausprobiert aber das Problem hängt doch typischerweise sicher damit zu tun das sich der Index der Zeilen ändert wenn Du Zeilen löscht, d.h. wenn Du mittendrin zwei Zeilen löscht wird in Folge z.B. aus Zeile 100 Zeile 98 und der Zähler i übersprint zwei zu bearbeitenden Zeilen.
Auch darf die ursprüngliche Wertzuweisung für i nicht in der Schleife stehen.

Also im Prinzip müsste es so lauten (nicht geprüft):

Code: Alles auswählen

raus = 10
i = 1

Do
tmp = oSheet.getCellByPosition(3,i).FormulaLocal
     if tmp = "x" Then
        for j = 0 to 1
      oRows.removeByIndex(j,i)
   Next j
       raus = 10
       i = i - 1
   Else
     raus = raus - 1
     i = i + 1
  End If
  
Loop While raus > 0

Auch bin ich nicht sicher ob Du wirklich tun willst was:

Code: Alles auswählen

for j = 0 to 1
      oRows.removeByIndex(j,i)
Next j
sagt, denn das löscht ja immmer die 2 ersten Zeilen, auch reichte dafür:

Code: Alles auswählen

oRows.removeByIndex(0,2) 
ich denke aber es soll doch das hier passieren:

Code: Alles auswählen

oRows.removeByIndex(i,2)
was dasselbe wäre wie:

Code: Alles auswählen

for j = 0 to 1
      oRows.removeByIndex(i,1)
Next j
Gruß
Stephan
RealmReborn
Beiträge: 8
Registriert: Mi, 25.06.2014 08:04

Re: Zeile löschen

Beitrag von RealmReborn »

Ich hab deinen Vorschlag mal umgesetzt und dies kam raus (für andere die das selbe Problem haben)

Code: Alles auswählen

oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet = oSheets.getbyName("Test")
oRows = oSheet.getRows
raus = 10
i = 1

Do
tmp = oSheet.getCellByPosition(3,i).FormulaLocal
     if tmp = "x" Then
   oRows.removeByIndex(i,1)
       raus = 10
       i = i - 1
   Else
     raus = raus - 1
     i = i + 1
  End If
 
Loop While raus > 0
Es funktioniert super ^-^
Danke nochmals Stephan. *imaginären Keks geb*
Damit ist das Problem gelöst.
Antworten