❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[gelöst] Eigene Funktionen mit Stadtartofficefunktionen nutzen
[gelöst] Eigene Funktionen mit Stadtartofficefunktionen nutzen
Hi
Ich versuche gerade heraus zu finden, wie man sich in LibreOffice Calc das Leben etwas einfacher gestalten kann. Hintergrund ist der, dass ich in einer relativ großen Tabelle mit mehreren Blättern einen Eintrag umschreiben muss, der sich immer wieder periodisch wiederholt. Als Minimalbeispiel zum Nachvollziehen, kann man sich meine Situation in etwa so vorstellen:
Ich habe eine Adressliste mit Name, Vorname, Straße, Stadt. Diese Liste will ich umschreiben in eine Liste Name, Vorname, Adresse. Zusätzlich habe ich eine Übersetzungsliste, über die ich zum Beispiel italienische Stadtnamen wie Roma zu Rom oder Bolzano zu Bozen umschreiben will und dazu SVerweis nutze. Die original Adressliste erstreckt sich über mehrere Tabellenblätter und hat mehrere hundert Einträge.
Ich habe mal ein Minimalbeispiel angehängt: Klar, ich kann mir einfach einmal schreiben, wie ein Eintrag umformatiert werden soll, dann die Region markieren und die Formel runterziehen, so dass sie auch in den anderen Zellen steht. Dann kopiere ich die Formeln in das nächste Tabellenblatt und so weiter. Problem ist nur, was ist wenn ich nachträglich etwas ändern will? Dann muss ich den ersten Eintrag umschreiben, wieder nach unten ziehen, kopieren und so weiter. Das würde ich gerne vermeiden. Meine Frage ist: Wie kann ich das vermeiden?
Mein Wunsch wäre es, dass ich zum Beispiel für die Adresse eine eigene Funktion schreibe mit dem Namen ADRESSE(STRASSE, STADT) und dann in der Zelle einfach reinschreibe "=ADRESSE(B12;B13)". Das kann ich dann runterziehen, und wenn ich nachträglich etwas ändern will, weil mir zum Beispiel die Formatierung der Adresse nicht gefällt und ich zuerst den Stadtnamen und dann die Straße haben will, dann kann ich einfach die Funktion umschreiben und habe automatisch in jeder Zelle die neue Formatierung ohne viel mit Copy-und-Paste arbeiten zu müssen.
Problem: Ich habe ein bisschen mit LibreOffice Basic herumgespielt, aber dort kann ich Funktionen wie SVERWEIS() nicht aufrufen. Da bekomme ich immer den Fehler "BASIC-Laufzeitfehler. Sub- oder Function-Prozedur nicht definiert." Eine andere Alternative habe ich noch nicht gefunden. Und die Funktion SVERWEIS nochmal komplett neu zu programmieren, kann ist ja auch nicht besonders zielführend. Gibt es irgend eine vernünftige Lösung für das was ich suche?
Liebe Grüße
Jojo
Ich versuche gerade heraus zu finden, wie man sich in LibreOffice Calc das Leben etwas einfacher gestalten kann. Hintergrund ist der, dass ich in einer relativ großen Tabelle mit mehreren Blättern einen Eintrag umschreiben muss, der sich immer wieder periodisch wiederholt. Als Minimalbeispiel zum Nachvollziehen, kann man sich meine Situation in etwa so vorstellen:
Ich habe eine Adressliste mit Name, Vorname, Straße, Stadt. Diese Liste will ich umschreiben in eine Liste Name, Vorname, Adresse. Zusätzlich habe ich eine Übersetzungsliste, über die ich zum Beispiel italienische Stadtnamen wie Roma zu Rom oder Bolzano zu Bozen umschreiben will und dazu SVerweis nutze. Die original Adressliste erstreckt sich über mehrere Tabellenblätter und hat mehrere hundert Einträge.
Ich habe mal ein Minimalbeispiel angehängt: Klar, ich kann mir einfach einmal schreiben, wie ein Eintrag umformatiert werden soll, dann die Region markieren und die Formel runterziehen, so dass sie auch in den anderen Zellen steht. Dann kopiere ich die Formeln in das nächste Tabellenblatt und so weiter. Problem ist nur, was ist wenn ich nachträglich etwas ändern will? Dann muss ich den ersten Eintrag umschreiben, wieder nach unten ziehen, kopieren und so weiter. Das würde ich gerne vermeiden. Meine Frage ist: Wie kann ich das vermeiden?
Mein Wunsch wäre es, dass ich zum Beispiel für die Adresse eine eigene Funktion schreibe mit dem Namen ADRESSE(STRASSE, STADT) und dann in der Zelle einfach reinschreibe "=ADRESSE(B12;B13)". Das kann ich dann runterziehen, und wenn ich nachträglich etwas ändern will, weil mir zum Beispiel die Formatierung der Adresse nicht gefällt und ich zuerst den Stadtnamen und dann die Straße haben will, dann kann ich einfach die Funktion umschreiben und habe automatisch in jeder Zelle die neue Formatierung ohne viel mit Copy-und-Paste arbeiten zu müssen.
Problem: Ich habe ein bisschen mit LibreOffice Basic herumgespielt, aber dort kann ich Funktionen wie SVERWEIS() nicht aufrufen. Da bekomme ich immer den Fehler "BASIC-Laufzeitfehler. Sub- oder Function-Prozedur nicht definiert." Eine andere Alternative habe ich noch nicht gefunden. Und die Funktion SVERWEIS nochmal komplett neu zu programmieren, kann ist ja auch nicht besonders zielführend. Gibt es irgend eine vernünftige Lösung für das was ich suche?
Liebe Grüße
Jojo
Zuletzt geändert von Don Jojo am Do 26. Okt 2017, 14:23, insgesamt 1-mal geändert.
Re: Eigene Funktionen mit Stadtartofficefunktionen nutzen
Hallo,
wenn ich dich richtig verstehe, hast du eine Art Datenbank mit
1) diversen Adressen (Name, Vorname, Ort, Straße)
2) einer "Übersetzungstabelle"
Dies soll auch so bleiben (ansonsten wäre das folgende ein einmaliger Akt).
Du möchtest eine Funktion, die dir aus der Straße und dem Ort (mit evtl. Übersetzung) eine "zusammengesetzte" Adresse baut.
Die Art der Zusammensetzung möchtest du aber variieren können.
Lösbar ist es auf alle Fälle per eigens programmierter Funktion:
wenn ich dich richtig verstehe, hast du eine Art Datenbank mit
1) diversen Adressen (Name, Vorname, Ort, Straße)
2) einer "Übersetzungstabelle"
Dies soll auch so bleiben (ansonsten wäre das folgende ein einmaliger Akt).
Du möchtest eine Funktion, die dir aus der Straße und dem Ort (mit evtl. Übersetzung) eine "zusammengesetzte" Adresse baut.
Die Art der Zusammensetzung möchtest du aber variieren können.
Lösbar ist es auf alle Fälle per eigens programmierter Funktion:
In der Schleife wird nach einer Übersetzung gesucht und zuletzt die Adresszeile nach Wunsch zusammengesetzt.Function Adresszeile_udf(strasse as string, ort as string, uebersetzung as array)
for i=1 to ubound(uebersetzung(),1)
if uebersetzung(i,1)=ort then
ort=uebersetzung(i,2)
i=ubound(uebersetzung(),1)
end if
next
adresszeile_udf=strasse & ", " & ort
End Function
- Dateianhänge
-
- minimalbeispiel.ods
- (16.49 KiB) 127-mal heruntergeladen
Gruß,
mikele
mikele
Re: Eigene Funktionen mit Stadtartofficefunktionen nutzen
Hallo Don Jojo, wenn du Calc-Tabellenfunktionen in einem Makro verwenden willst, musst du englischsprachige Funktionsnamen verwenden.
Siehe dazu diese Seite aus Michael Dannenhöfers Starbasic-Faq
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig229
sowie
http://www.dannenhoefer.de/faqstarbasic ... funktionen
Gruß Helmut
Siehe dazu diese Seite aus Michael Dannenhöfers Starbasic-Faq
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig229
sowie
http://www.dannenhoefer.de/faqstarbasic ... funktionen
Gruß Helmut
MX-Linux KDE + Linux-Mint Cinnamon
Re: Eigene Funktionen mit Stadtartofficefunktionen nutzen
Hallo
Vielen Dank für eure Antworten. Ich habe beide Lösungen ausprobiert und sie funktionieren beide super. Dankeschön
!
Welcher Lösung ich den Vorzug geben werde, werde ich in den nächsten Tagen ausprobieren.
Eine kurze Ergänzung noch. Ich wollte eigentlich fragen, wie man in Basic-Funktionen auf statische Array-Bereiche zugreifen kann. Die Lösung habe ich dann beim googlen (Treffer 1, Treffer 2) aber selber gefunden. Weil der folgende Code funktioniert zwar, hat aber einen Nachteil: Wenn ich die Übersetzungsliste "translations" jedesmal in den Funktionsaufruf packen muss und die Liste am Ende noch erweitern will, dann muss ich diesen Eintrag wieder in allen Zellen ändern. Das ist wieder mal so was unerwünschtes.
Die Lösung ist recht simpel und sieht so aus:
Funktioniert ebenfalls einwandfrei. Ich habe gedacht, ich ergänze das einfach noch, weil andere vielleicht auf die selbe Frage stoßen werden.
Vielen Dank für eure Hilfe. Ihr habt mir mit LibreOffice jetzt eine neue Dimension der Möglichkeiten eröffnet
Liebe Grüße
Jojo
Vielen Dank für eure Antworten. Ich habe beide Lösungen ausprobiert und sie funktionieren beide super. Dankeschön

Welcher Lösung ich den Vorzug geben werde, werde ich in den nächsten Tagen ausprobieren.
Eine kurze Ergänzung noch. Ich wollte eigentlich fragen, wie man in Basic-Funktionen auf statische Array-Bereiche zugreifen kann. Die Lösung habe ich dann beim googlen (Treffer 1, Treffer 2) aber selber gefunden. Weil der folgende Code funktioniert zwar, hat aber einen Nachteil: Wenn ich die Übersetzungsliste "translations" jedesmal in den Funktionsaufruf packen muss und die Liste am Ende noch erweitern will, dann muss ich diesen Eintrag wieder in allen Zellen ändern. Das ist wieder mal so was unerwünschtes.
Code: Alles auswählen
Function Stadt(location as string, translations as array)
Dim args( 3 ) As Variant
args(0) = location
args(1) = translations
args(2) = 2
args(3) = 0
Fct = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Stadt = Fct.callFunction("VLOOKUP",args())
End Function
Code: Alles auswählen
Function Stadt(location as string)
Doc = ThisComponent 'das Dokumentenobjekt
Sheet = Doc.sheets(0) ' das erste Tabellenblatt
translations = Sheet.getCellRangeByName("A5:B6") 'die Zellen A5 bis B6
Dim args( 3 ) As Variant
args(0) = location
args(1) = translations
args(2) = 2
args(3) = 0
Fct = createUnoService( "com.sun.star.sheet.FunctionAccess" )
Stadt = Fct.callFunction("VLOOKUP",args())
End Function
Vielen Dank für eure Hilfe. Ihr habt mir mit LibreOffice jetzt eine neue Dimension der Möglichkeiten eröffnet

Liebe Grüße
Jojo
Re: [gelöst] Eigene Funktionen mit Stadtartofficefunktionen nutzen
Hallo,
Das Problem kannst du am einfachsten dadurch umgehen, indem du dem Übersetzungsbereich (aktuell A5:B6) einen Namen gibst, z. B. translations. Dann kannst du den Funktionsaufruf mit dem Namen machen.hat aber einen Nachteil: Wenn ich die Übersetzungsliste "translations" jedesmal in den Funktionsaufruf packen muss und die Liste am Ende noch erweitern will, dann muss ich diesen Eintrag wieder in allen Zellen ändern.
Gruß,
mikele
mikele
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.