🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Makro zum Einfügen von Kontonummer aus Datenbank

Alles zur Programmierung im LibreOffice.
Antworten
silence0100
Beiträge: 8
Registriert: Do 10. Okt 2013, 11:05

Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von silence0100 » Do 10. Okt 2013, 12:55

Ich habe eine Calc Tabelle in der in einer Spalte Kontonummern stehen. Diese Nummern mit der dazugehörigen Kontenbezeichnung habe ich in eine Base Datenbank eingetragen und kann diese Datenbank mit F4 in Calc aufrufen. So weit so gut. Nun möchte ich gerne in Zukunft die jeweiligen Kontonummern aus der Datenbank in die entsprechende Spalte der Calc Tabelle einfügen. Was ich also mache ist, Datensatz suchen, dort die Kontenbezeichnung eingeben und die dazugehörige Kontonummer kopieren, um sie in die Calc Tabelle einzufügen. Mit einem Makro müsste das doch zu automatisieren sein, oder? Also habe ich ein Makro aufgezeichnet. Führe ich dies aus, so fügt er allerdings, logischerweise, immer die gleiche Kontonummer ein. Ich möchte das Makro so bearbeiten, dass ich die Datenbank nach einer (variablen?) Kontenbezeichnung durchsuchen kann und die dazugehörige Kontonummer dann in die richtige Spalte eingefügt wird. Ist das überhaupt Möglich oder habe ich da jetzt einen Denkfehler gemacht?
Vielleicht einmal hier das Makro:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

End Sub




sub Kontoauswahl
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())


end sub
Nachdem ich Calc geschlossen und wieder geöffnet habe, scheint das Makro gar nicht mehr zu funktionieren.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von F3K Total » Do 10. Okt 2013, 20:00

Hi,
dein Makro tut nichts weiter, als bereits in der Zwischenablage befindlichen Inhalt an der Stelle, wo sich der Cursor befindet, einzufügen. So geht das also nicht.
Es gibt sicherlich eine komfortable Lösung für dein Problem, allein, aus deiner Beschreibung ist nicht eindeutig zu verstehen, was du genau erreichen möchtest.
silence0100 hat geschrieben:Mit einem Makro müsste das doch zu automatisieren sein, oder?
Klar!
silence0100 hat geschrieben:... dann in die richtige Spalte eingefügt wird.
Eine Spalte hat in Calc etwa 1000000 Zeilen, wo genau soll die Kontonummer denn eingetragen werden?
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

silence0100
Beiträge: 8
Registriert: Do 10. Okt 2013, 11:05

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von silence0100 » Fr 11. Okt 2013, 09:44

danke für die Antwort. Mit richtiger Spalte meine ich die Spalte für die Kontonummern. Dort dann jeweils in der aktuellen Zeile, in der sich der Cursor befindet. Ich fülle ja immer eine Zeile aus und gehe dann weiter in die nächste.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von F3K Total » Fr 11. Okt 2013, 17:27

Hi,
anbei ein Beispiel, es enthält 2 Dateien
  • Konten.odb, die Datenbank mit den Konten
  • Kontonummern.ods, die Calc Datei, mit einer Listbox und einem Makro
Folgendes ist zu tun
  • Melde die Datenbank Konten.odb unter Extras/Optionen/LibreOffice Base/Datenbanken -> neu ... an
  • Makrosicherheit: Stelle unter Extras/Optionen/LibreOffice.org/Sicherheit/Makrosicherheit mindestens die Stufe "Mittel" ein, dann wirst du beim Öffnen von Dokumenten gefragt, ob du Makros ausführen möchtest.
Wenn Du nun die Calc-Datei öffnest, mit dem Cursor eine Zeile anklickst und dann im Listenfeld ein Konto wählst, wird die Kontonummer in die Spalte C eingetragen.

Wie funktioniert das?
  • Das Listenfeld ist über ein Formular an die Datenbank Konten.odb gebunden.
  • Die Datenbank enthält zwei Tabellen
    • Konten
    • CurrentAccount
  • In Konten stehen die Konten, CurrentAccout dient als einzeilige Tabelle nur als Zwischenspeicher für den gerade gewählten Eintrag des Listenfeldes.
  • Der Inhalt des Listenfeldes ist dieses SQL-Statement,

    Code: Alles auswählen

    SELECT "Bank", "Kontonummer" FROM "Konten"
    d.h. angezeigt wird der Name der Bank (1.Eintrag von links, vor dem FROM), in die Tabelle CurrentAccount wird aber die Kontonummer (2. Eintrag von links vor dem FROM) beim Auswählen eines Eintrages eingtragen.
  • Beim Betätigen des Listenfeldes (Ereignis: Aktion ausführen) wird das Makro insert_account_number

    Code: Alles auswählen

    Sub insert_account_number (event)
        oselection = thiscomponent.currentselection
        if  oselection.supportsservice("com.sun.star.sheet.SheetCell") then
         olstbox = event.source.model
         ocelladdress = oselection.celladdress
         nrow = ocelladdress.row
         nsheet =  ocelladdress.sheet
         otargetcell = thiscomponent.sheets(nsheet).getcellbyposition(2,nrow)'Spalte mit Index 2: 0 = A, 1 = B, 2 = C ... usw.
         otargetcell.Value = olstbox.ValueItemList(olstbox.selectedItems(0))
        end if
    End Sub
    ausgeführt.
  • Das Makro ermittelt über

    Code: Alles auswählen

    .currentselection
    die aktuell selektierte Zelle im Calcdokument, daraus wiederum die Zeile und die Tabellenblattnummer, liest dann die Kontonummer aus dem gewählten Listenfeldeintrag in die Spalte C (Index 2) des Blattes ein.
HTH
Gruß R
Dateianhänge
Kontonummern.zip
(10.23 KiB) 230-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

silence0100
Beiträge: 8
Registriert: Do 10. Okt 2013, 11:05

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von silence0100 » Mo 14. Okt 2013, 09:57

Sorry, dass ich mich erst jetzt wieder melde. Von zu Hause aus konnte ich das ganze nicht testen. Jetzt habe ich es aber gerade probiert. Beim Registrieren der Datenbank hat er sich gleich beschwert, weil die bereits Registrierte DB schon Konten heißt. Ich hab die neue dann Konten1 genannt. Öffne ich die Kontonummern.ods nun, kommt die Meldung zum Makros Aktivieren. Wähle ich dies aus, so erscheint allerdings die Fehlermeldung "Die Dateninhalte konnten nicht geladen werden. Es existiert keine Tabelle "CurrentAccount".
Ich habe die odb mit Base geöffnet. Dort sehe ich die Tabelle CurrentAccount allerdings. :?:
Kann es sein, dass er die beiden Datenbanken irgendwie verwechselt oder die neue nicht richtig registriert hat, weil bereits eine mit derselben Bezeichnung registriert war?

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von F3K Total » Mo 14. Okt 2013, 13:51

Hi,
die angemeldete DB mit CurrentAccount muß Konten heißen, erst die alte entfernen, dann die neue anmelden, kannst Du später wieder zurückändern.
Oder, Du öffnest die Calc-Datei, gehst in den Formular-Entwurfsmodus
Entwurfsmodus.png
Entwurfsmodus.png (4.71 KiB) 5297 mal betrachtet
Rechtsklick auf das Listenfeld -> Formular -> Reiter Daten und änderst Konten zu Konten1.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

silence0100
Beiträge: 8
Registriert: Do 10. Okt 2013, 11:05

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von silence0100 » Di 15. Okt 2013, 10:15

ahja, jetzt klappt's. Vielen Dank. Ich passe mir das mal noch etwas an und schaue, ob es dann noch den gewünschten Effekt erzielt.

silence0100
Beiträge: 8
Registriert: Do 10. Okt 2013, 11:05

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von silence0100 » Fr 18. Okt 2013, 09:16

ich habe jetzt die Datenbank angepasst und mein Calc Dokument mit der Formularfeld Lösung versehen. Klapptauch alles wie vorgesehen. Allerdings ist meine Tabellete in Calc ziemlich bald lang genug, dass ich immer hochscrollen muss, um etwas aus dem Formular zu wählen. Gibt es eine Möglichkeit, dass das Formular immer sichtbar bleibt? Ich habe nach "dynamisches Formularfeld" und "modeless" gesucht, aber nichts in der Richtung gefunden. Ich befürchte, beides hat nichts mit dem zu tun, was ich erreichen möchte.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von karolus » Fr 18. Okt 2013, 13:04

Hallo
wähle eine Zelle unterhalb des "Formulars" und gehe ins Menü →Fenster→[x]fixieren

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

silence0100
Beiträge: 8
Registriert: Do 10. Okt 2013, 11:05

Re: Makro zum Einfügen von Kontonummer aus Datenbank

Beitrag von silence0100 » Mi 23. Okt 2013, 08:59

Hervorragend. Sehr praktisch. Vielen Dank für all die Hilfe.


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.



Antworten