eigene Funktion in Datei gespeichert
Moderator: Moderatoren
eigene Funktion in Datei gespeichert
Hallo Kenner und Könner,
wieso tut eine "eigene Funktion" nicht gleich nach dem Start von OO und öffnen der Datei,
wenn die Funktion in der Datei abgelegt ist?
Es gibt beim öffnen der Datei Fehlermeldungen "Objektvariable nicht belegt"
nach dem man die Meldungen weggedrückt hat und einem ctrl+sift+F9 gehts dann doch?
Meine Frage bezieht sich auf diese Beispieldatei
viewtopic.php?f=2&t=65982#p256898
und kann man das irgend wie diese Startprobleme verhindern?
Ja ich weiß eine Funktion gehört eigentlich in der Bibliothek Standard Funktion abgelegt, aber wieso klemmt es nur beim Start ?
wieso tut eine "eigene Funktion" nicht gleich nach dem Start von OO und öffnen der Datei,
wenn die Funktion in der Datei abgelegt ist?
Es gibt beim öffnen der Datei Fehlermeldungen "Objektvariable nicht belegt"
nach dem man die Meldungen weggedrückt hat und einem ctrl+sift+F9 gehts dann doch?
Meine Frage bezieht sich auf diese Beispieldatei
viewtopic.php?f=2&t=65982#p256898
und kann man das irgend wie diese Startprobleme verhindern?
Ja ich weiß eine Funktion gehört eigentlich in der Bibliothek Standard Funktion abgelegt, aber wieso klemmt es nur beim Start ?
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: eigene Funktion in Datei gespeichert
Scheint ein Fehler in AOO zu sein, mit LO funktioniert das beim Öffnen der Datei.
Anbei noch eine Variante mit WENNFEHLER (LO) und PYJOIN (ADDinn von mir***)
***pyjoin
update:
eine Formel die nur pyjoin benötigt:
als Matrixformel
Anbei noch eine Variante mit WENNFEHLER (LO) und PYJOIN (ADDinn von mir***)
***pyjoin
update:
eine Formel die nur pyjoin benötigt:
Code: Alles auswählen
=PYJOIN(WENN(ISTFEHLER(FINDEN(G$2:G$11;A2));"";G$2:G$11);"")
Zuletzt geändert von Karolus am Fr, 03.07.2015 09:21, insgesamt 1-mal geändert.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: eigene Funktion in Datei gespeichert
augenscheinlich weil das Referenzieren von .CurrentController nicht klappt.wieso tut eine "eigene Funktion" nicht gleich nach dem Start von
OO und öffnen der Datei,
wenn die Funktion in der Datei abgelegt ist?
und kann man das irgend wie diese Startprobleme verhindern?
Am Einfachsten indem Du das Blatt fest vorgibst:
Code: Alles auswählen
oSheet = ThisComponent.Sheets().getByIndex(0)
Um es flexibler zu machen könnte man die Information über das jeweils aktuelle Sheet irgendwo zwischenspeichern, alternativ wäre es wohl besser auf die Funktionen SUCHEN() oder FINDEN() im Makro zurückzugreifen:
http://www.dannenhoefer.de/faqstarbasic ... enden.html
Gruß
Stephan
Re: eigene Funktion in Datei gespeichert
Hallo Karolus,
erst einmal Danke, das du dich mit dem Problem beschäftigt hast.
Dann muss man unter AOO wohl zwingend in die Standard Bibliothek Funktionen speichern!?
Aber dein alternativ Vorschlag klemmt bei mir ebenfalls, deine Formel gibt "Name?" aus undd "iferror" ist kleingeschrieben,
wird also micht gefunden, obwohl ich deine Texttools installiert habe?
hmmm
erst einmal Danke, das du dich mit dem Problem beschäftigt hast.
Dann muss man unter AOO wohl zwingend in die Standard Bibliothek Funktionen speichern!?
Aber dein alternativ Vorschlag klemmt bei mir ebenfalls, deine Formel gibt "Name?" aus undd "iferror" ist kleingeschrieben,
wird also micht gefunden, obwohl ich deine Texttools installiert habe?
hmmm
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: eigene Funktion in Datei gespeichert
Ich schrieb WENNFEHLER (LO)
Die Funktion gibts nur in Libreoffice
Ich hab oben noch eine Variante ohne WENNFEHLER hinzugefügt.
Die Funktion gibts nur in Libreoffice
Ich hab oben noch eine Variante ohne WENNFEHLER hinzugefügt.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: eigene Funktion in Datei gespeichert
Hallo Stephan,
dir natürlich auch allerbesten Danke für deine Aktivität, werde gleich mal versuchen das umzusetzen
edit:
ich verwende diese nativen Funktionen wie InStr() von OOBasic im Glauben, das diese schneller sind, ist das ein Irrglaube?
dir natürlich auch allerbesten Danke für deine Aktivität, werde gleich mal versuchen das umzusetzen
worauf beziehst du das, auf INSTR() und warum?Stephan hat geschrieben:alternativ wäre es wohl besser auf die Funktionen SUCHEN() oder FINDEN() im Makro zurückzugreifen:
edit:
ich verwende diese nativen Funktionen wie InStr() von OOBasic im Glauben, das diese schneller sind, ist das ein Irrglaube?
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: eigene Funktion in Datei gespeichert
auf die Tabellenfunktionen gleichen Namens, weswegen ich ja sauch schon auf die STarBasic-FAQ verwiesen hatte wo die Anwendung solcher Funktionen in Makros beschrieben ist.worauf beziehst du das
nein.auf INSTR()
weil ich hoffe das, unter den gegebenen Rahmenbedingungen, mithilfe von SUCHEN() oder FINDEN() keine explizite Angabe des Tabellenblatts im Makro nötig ist, ausprobiert habe ich es nicht.und warum?
Ebenso kannst Du die Tabellenfunktion TABELLE() zur Parameterübergabe nutzen, wenn Du Deine Benutzerdefinierte Funktion umbaust:
Code: Alles auswählen
FUNCTION EXTRACTIF(tabelle As Integer LongText, Search as string)
'diese Funktion ermittelt ob ein Begriff aus dem Bereich Search im String LongText enthalten ist
oSheet = Thiscomponent.Sheets()getByIndex(tabelle-1)
sRange = oSheet.GetCellRangeByName(Search)
iScol = sRange.GetRangeAddress.StartColumn
iSrow = sRange.GetRangeAddress.StartRow
for i=0 to sRange.rows.count -1
if inStr(LongText,oSheet.GetCellByPosition(iScol,iSrow+i).string) > 0 then
EXTRACTIF = oSheet.GetCellByPosition(iScol,iSrow+i).string
exit function
end if
next
EXTRACTIF = ""
End FUNCTION
=EXTRACTIF(TABELLE();A2;"G2:G7")
Gruß
Stephan
Re: eigene Funktion in Datei gespeichert
Hallo Stephan,
erst einmal danke für deine weiteren Erläuterungen.
Auf Grund der Nachfrage im Ausgangsthread nach einer Tabellenblatt übergreifenden Lösung,
habe ich an einen benannten Bereich für die Liste gedacht.
Aber irgend wie verhedert sich AOO damit oder ich verwende es falsch?
Ich habe folgendes
das funktioniert
aber es funktioniert mit jeden beliebigen Namen als "search" der Name wird überhauptnicht ausgewertet ???
erst einmal danke für deine weiteren Erläuterungen.
Auf Grund der Nachfrage im Ausgangsthread nach einer Tabellenblatt übergreifenden Lösung,
habe ich an einen benannten Bereich für die Liste gedacht.
Aber irgend wie verhedert sich AOO damit oder ich verwende es falsch?
Ich habe folgendes
Code: Alles auswählen
sRange = thiscomponent.namedRanges(search).ReferredCells
oSheet = thiscomponent.namedRanges(search).ReferredCells.Spreadsheet
das funktioniert
aber es funktioniert mit jeden beliebigen Namen als "search" der Name wird überhauptnicht ausgewertet ???
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Re: eigene Funktion in Datei gespeichert
Moin clag,
Manchmal sollte man es sich nicht zu einfach machen, mit der vergabe von "Namen".
Was hällst Du denn von: "searching"?
gruß
balu
Na wenn das nur nicht mit "search" funktioniert, dann wird das wohl seine Gründe haben. Schon mal überlegt das "search" der *englische* Begriff für die Calc-Funktion =SUCHEN() ist?aber es funktioniert mit jeden beliebigen Namen als "search"
Manchmal sollte man es sich nicht zu einfach machen, mit der vergabe von "Namen".
Was hällst Du denn von: "searching"?
gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: eigene Funktion in Datei gespeichert
Auf Grund der Nachfrage im Ausgangsthread nach einer Tabellenblatt übergreifenden Lösung,
habe ich an einen benannten Bereich für die Liste gedacht.
es spricht nichts dagegen, nur erkenne ich auch keinen Vorteil, denn ob Du im Makro den Tabellennamen oder den Namen eines Bereichs angibst ändert doch nichts daran das Du überhaupt einen Namen fest angeben musst.
ich kenne zwar nicht den Inhalt der Variable search, aber ja, das scheint mit jedem Namen zu funktionieren, was ein Fehler in OO sein dürfte ... NUR sind doch beide Codezeilen ohnehin sinnfrei, denn wenn search den Namen des Bereiches enthält erfolgt doch der Zugriff mittels:Ich habe folgendes
Code: Alles auswählen
ThisComponent.NamedRanges.getByName(search)
(Im Übrigen würde ich einen Begriff wie "search" als Variablennamen meiden, zwar ist wohl im Konkreten "search" kein Schlüsselwort in StarBasic, aber mich würde das trotzdem nervös machen)
Gruß
Stephan
Re: eigene Funktion in Datei gespeichert
Hallo zusammen,
besten Dank für eure Unterstützung.
Ja "search" war sicherlich nicht besonders clever gewählt. Ich werde versuchen mich zu bessern.
Stephans Hinweis ist den auch gleich die Lösung für das "Problem"
ich hatte ja einen String an eine Anweisung übergeben die eine Index Angabe erwartet und jeder übergebene String
wurde scheinbar als 0 gewertet und somit wurde immer der erste verfügbare benannte Bereich angesprochen.
und wie so oft im Leben, kaum macht man etwas richtig, schon funktioniert es
so hier zur Endkontrolle der komplette Code
jetzt werden auch mehrspaltige Bereiche abgeabeitet und eventuelle leere Zellen übersprungen.
habe fertig
besten Dank für eure Unterstützung.
Ja "search" war sicherlich nicht besonders clever gewählt. Ich werde versuchen mich zu bessern.
Stephans Hinweis ist den auch gleich die Lösung für das "Problem"
ich hatte ja einen String an eine Anweisung übergeben die eine Index Angabe erwartet und jeder übergebene String
wurde scheinbar als 0 gewertet und somit wurde immer der erste verfügbare benannte Bereich angesprochen.
Code: Alles auswählen
falsch
sRange = thiscomponent.namedRanges(sName).ReferredCells
richtig
sRange = ThisComponent.NamedRanges.getByName(sName).ReferredCells
und wie so oft im Leben, kaum macht man etwas richtig, schon funktioniert es
so hier zur Endkontrolle der komplette Code
jetzt werden auch mehrspaltige Bereiche abgeabeitet und eventuelle leere Zellen übersprungen.
Code: Alles auswählen
FUNCTION EXTRACTIF(LongText as String, sRname as string)
' diese Funktion ermittelt ob ein Begriff aus einem benannten Bereich "sRname"
' im LongText String enthalten ist und gibt den Begriff ggf. aus, Leezellen werden ignoriert
sRange = ThisComponent.NamedRanges.getByName(sRname).ReferredCells
oSheet = ThisComponent.NamedRanges.getByName(sRname).ReferredCells.Spreadsheet
iScol = sRange.RangeAddress.StartColumn
iSrow = sRange.RangeAddress.StartRow
for ic=0 to sRange.Columns.count
for ir=0 to sRange.Rows.count -1
sCheck = oSheet.GetCellByPosition(iScol+ic,iSrow+ir).string
if inStr(LongText,sCheck) > 0 and sCheck <> "" then
EXTRACTIF = oSheet.GetCellByPosition(iScol+ic,iSrow+ir).string
exit function
end if
next
next
EXTRACTIF = "~"
End FUNCTION
LG
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
nutzt: WinXP SP3 / AOO 4.1.10 / Firefox