Seite 1 von 1

Makroprogrammierung in Calc

Verfasst: So 6. Jan 2013, 10:20
von 5kyy
Morgen,

da ich seit fast 3 Jahren zu 100% auf Linux unterwegs bin, möchte ich auch langsam gewisse Anforderungen und Makros in Calc schreiben.
Zu meinen Windows Zeiten hatte ich keinerlei Probleme mit Excel und VBA, allerdings der Einstieg in die Makroprogrammierung von LibreOffice komme ich absolut nicht klar.

Ich habe hier schonmal etwas probiert aber hätte gerne noch ein paar zusätzliche Funktionen.
Bisher habe ich eine Tabelle mit Zahlen in der Spalte A (einfach 1 - 20).
Das Script prüft den Wert und sofern er kleiner 10 ist wird die Zelle grün gefährt und dahinter GLEICH geschrieben. Am Ende erhalte ich die Total-Errors.

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Check

	osel			=	thisComponent.currentselection
	ncolumnscount	=	osel.columns.count
	
	' check that only one column is selected
	if ncolumnscount <> 1 then
  		msgbox ("Es wurden "+ncolumnscount+" Spalten ausgewählt, bitte nur Zellen einer Spalte wählen!",48,"Fehler!")
  		exit sub
	endif
	
	osheet			=	thiscomponent.sheets(osel.rangeaddress.sheet)
	naktiveColumn	=	osel.rangeaddress.StartColumn
	ocursor			=	osheet.createCursor
	ocursor.gotostartofusedarea(false)
	nStartRow		=	ocursor.rangeaddress.StartRow
	ocursor.gotoendofusedarea(false)
	nEndRow			=	11

	count			=	0

	for i = nStartRow to nEndRow
		ocell = osheet.getcellbyposition(naktiveColumn,i)
		if ocell.value < 10 then
			ocelltochange			=	osheet.getcellbyposition(naktiveColumn+1,i)
			ocelltochange.string	=	"gleich"
			oCell.CellBackColor		=	32768
		else
			ocelltochange			=	osheet.getcellbyposition(naktiveColumn+1,i)
			ocelltochange.string	=	"ungleich"
			oCell.CellBackColor		=	16711680
			count					=	count+1
		endif
	next i
	
	ocelltochange = osheet.getcellbyposition(naktiveColumn+1,i)
	ocelltochange.string = "total errors"
	ocelltochange = osheet.getcellbyposition(naktiveColumn,i)
	ocelltochange.string = count
	
End Sub
Was ich hier gerne anders hätte, wäre:
1. EndRow sollte ich gar nicht vergeben müssen, erst recht nicht mit RANGEADDRESS, da hier dann der Gesamte Bereich verwendet wird. Stattdessen hätte ich gerne, dass jede Zeile durchlaufen wird und er erst bei einer LEERZEILE stoppt
2. Ich möchte gerne die Zelle nicht nach einem Wert <10 Prüfen, sondern die Länge des Inhalts. In meinem Beispiel also statt VALUE < 10 dann LENGTH < 2
3. weiterhin würde ich gerne die Zelle auf einen bestimmten Inhalt prüfen. z.b. wenn die Zelle "Hallo123" ist und ich auf "llo1" prüfe, soll es Wahr sein

Sind sicherlich keine großen Sachen und wäre mit VBA ruck zuck umgesetzt, aber hier nervt mich die Sache nach 2h Misserfolg langsam.
Hoffe ich finde hier die Lösung.

LG
5ky

Re: Makroprogrammierung in Calc

Verfasst: So 6. Jan 2013, 10:30
von 5kyy
Hey,

okay Anforderung 1 konnte ich nun mit einer WHILE-Schleife lösen. Bei den anderen Beiden häng ich aber noch.

LG

Re: Makroprogrammierung in Calc

Verfasst: So 6. Jan 2013, 10:35
von 5kyy
Ach Gott...

len(ocell.value)

Hat doch Vorteile wenn man nach den Richtigen Sachen sucht.

SORRY. Der Thread ist gelöst.

Hier steht alles klipp und klar.
http://www.dannenhoefer.de/faqstarbasic ... itung.html