in Tabelle mit Marco Zeilen löschen

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

Moderator: Moderatoren

Felixcate
Beiträge: 6
Registriert: Di, 04.04.2006 14:09

in Tabelle mit Marco Zeilen löschen

Beitrag von Felixcate »

Hallo

ich möchte in meiner Tabelle mit einen VB Macro alle Zeilen löschen wo in Spalte F nicht der String "Scheck" steht.

Wie kann ich das anstellen???

Danke schonmal!! :D
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

ich möchte in meiner Tabelle mit einen VB Macro alle Zeilen löschen wo in Spalte F nicht der String "Scheck" steht.
VBA geht in OOo nicht (VB hingegen erzeugt keine Makros). In OOoBasic bzw. StarBasic geht es wenn die Tabellen den Namen "meineTabelle" hat so:

Code: Alles auswählen

Sub Main
Doc = ThisComponent
oSheet = Doc.Sheets("meineTabelle")
oCellCursor = oSheet.createCursor() 
i=0
Do
	if oSheet.getCellByPosition(5,i).String = "Scheck" Then
			oSheet.Rows.removeByIndex(i,1)
		Else
			i=i+1
	End if
	oCellCursor.GotoEndOfUsedArea(True) 
	letzte_Zeile = oCellCursor.getRangeAddress.EndRow
Loop While i-1 < letzte_Zeile
End Sub

Gruß
Stephan
Felixcate
Beiträge: 6
Registriert: Di, 04.04.2006 14:09

Beitrag von Felixcate »

hey danke funktioniert !! wie kann ich den bezug auf das aktuelle document machen also die tabelle welche gerade offen ist? Doc.Sheets( ???? )
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Code: Alles auswählen

Sub Main
Doc = ThisComponent
oSheet = Doc.Sheets(Doc.currentcontroller.activeSheet.Name)
oCellCursor = oSheet.createCursor() 
i=0
Do
	if oSheet.getCellByPosition(5,i).String = "Scheck" Then
			oSheet.Rows.removeByIndex(i,1)
		Else
			i=i+1
	End if
	oCellCursor.GotoEndOfUsedArea(True) 
	letzte_Zeile = oCellCursor.getRangeAddress.EndRow
Loop While i-1 < letzte_Zeile
End Sub

Gruß
Stephan
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

hallo stephan,

bei diesem code-fragment wird immer nur ein und nicht das jeweils aktive blatt angesteuert

Code: Alles auswählen

oSheet = Doc.Sheets(Doc.currentcontroller.activeSheet.Name) 
wenn man ".Name" rausnimmt wird ein laufzeitfehler erzeugt. wie muß der code geändert werden, damit "Scheck" imm jeweils aktiven blatt gelöscht wird.?

grüße

klaus
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Klaus,
...wie muß der code geändert werden...

Code: Alles auswählen

oSheet = Doc.getSheets().getByName(Doc.currentcontroller.activeSheet.Name)
So erhälst du das aktuelle Blatt - ist aber riesig umständlich ???

Code: Alles auswählen

oSheet = oDoc.currentController.getAktiveSheet()
liefert das gleiche Objekt - und zwar direkt.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Beitrag von kannenklaus »

halllo thomas,

danke für den tipp; klappt wunderbar getActiveSheet ohne k.

danke nochmals

grüße klaus
Antworten