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
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