Hallo,
ganz verstehe ich Dein Makro nicht. Wenn Du das Makro als benutzerdefinierte Funktion planst und daher myString As String
als Parameter benötigst, wozu dann das oCalc=thisComponent
und myString = oCalc.CurrentSelection.String
?
Die Funktion LastWord bringt mir immer nur drei Pünktchen
Dazu kann man nichts sagen, wenn man keine Information über den Zellinhalt derjenigen Zelle, die zum Zeitpunkt der Makroausführung ausgewählt war, hat. Dein Makro überschreibt ja mit myString = oCalc.CurrentSelection.String
den an myString
übergebenen Wert mit dem Inhalt der aktuell ausgewählten Zelle. Und ich behaupte jetzt mal: Die endet mit 3 Pünktchen
Insofern ist das vermutlich die Antwort auf: Was mache ich falsch?
Wenn ich aber:
Function LastWord(myString As String)
arr = split(myString," ")
n = uBound(arr)
LastWord = arr(n)
End Function
schreibe und in eine Zelle =LASTWORD(A1)
klappt das ( Zelle A1
soll natürlich den String enthalten, dessen letztes Wort ermittelt werden soll).
Alternativ (zum Testen mit dem Argument als optionales Argument, wobei dann aber die Zelle A1
selektiert sein muss, wenn man das Makro innerhalb der IDE aufruft) geht das:
Function LastWord2(optional myString As String)
oCalc=thisComponent
myString = oCalc.CurrentSelection.String
arr = split(myString," ")
n = uBound(arr)
LastWord2 = arr(n)
print "Last Word: " & LastWord2
End Function
Getestet mit LibreOffice
Version: 7.1.1.2 / LibreOffice Community, Build ID: fe0b08f4af1bacafe4c7ecc87ce55bb426164676
CPU threads: 8; OS: Linux 5.3; UI render: default; VCL: kf5
Locale: en-US (en_US.UTF-8); UI: en-US, Calc: threaded
Ergänzung
Ich würde jetzt noch hinzufügen, dass man eigentlich keine Makros dafür benötigt:
erstes Wort: =REGEX(A1;"^[:alnum:]+\b")
letztes Wort: =REGEX(A1;"\b[:alnum:]+$")
Ref.: LibreOffice Hilfe - REGEX (auf Deutsch: REGAUS).
Ich hoffe das hilft etwas weiter.