🍀 Das LibreOffice Forum braucht HEUTE Ihre Hilfe! 🍀
❤️ Spenden Sie jetzt und sichern Sie die Zukunft unseres LibreOffice-Forums ❤️
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen lieben Dank!
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig und kostenlos ihr Wissen teilen.<<
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) 142-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 FunctionCode: 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 FunctionVielen 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:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das laufende.
Einfach per Kreditkarte oder PayPal. Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️