Base -> Formular -> Datenfeld per Makro auslesen

Hallo *,

Ausgangslage:
1) In Base ist ein Formular erstellt.
2) Dieses Formular liest Daten aus einer Abfrage und besteht aus drei Spalten und 40 Reihen.
3) Dieses Formular wird gefiltert, so dass nur noch ein Reihe erscheint.
4) Der Filter wird in der Spalte A durchgeführt.

Ziel:
Auslesen des Eintrages in der Spalte B per Makro (nach Durchführung der Filterung).

Problem:
Ich schaffe es nicht die gewünschte Zelle anzusprechen bzw. den Wert auszulesen. Zelle ist quasi "B1" (Spalte B und Reihe 1).

Frage:
Hat jemand eine Idee für einen Makrocode?
oTable1 = thisComponent.drawpage.forms.getByName("FormularName")
...
sInhaltB1 = ....

LO: LibreOffice 3.5.3
OS: Windows 7 Prof 64 Bit

Gruß

Jochen

Hallo Jochen,

Problem:
Ich schaffe es nicht die gewünschte Zelle anzusprechen bzw. den Wert
auszulesen. Zelle ist quasi "B1" (Spalte B und Reihe 1).

Frage:
Hat jemand eine Idee für einen Makrocode?
oTable1 = thisComponent.drawpage.forms.getByName("FormularName")

Die Tabelle ist nicht das Formular. Die Variable oben ist oForm.
oTable = oForm.getByName("Tablecontrolname")

An die Spalten geht es nur per Index; die sind über den Namen nicht
verfügbar. Du siehst ja auch die Spaltenbezeichnungen nicht im
Formularnavigator.

Also
oInhaltB1 = oTabele.getByIndex(1)
(Jetzt nicht weiter getestet...)

Gruß

Robert

Hallo Robert,

Die Tabelle ist nicht das Formular. Die Variable oben ist oForm.
oTable = oForm.getByName("Tablecontrolname")

Ich kann mit "Tablecontrolname" nichts anfangen.
Ich bin davon ausgegangen, dass folgendes meinst:
Formular bearbeiten -> gewünschtes Formular anklicken -> rechte Maustaste -> "Kontrollfeld..." -> eingetragener Name im Textfeld "Name".
Dies funktioniert aber nicht.

Auch folgendes funktioniert nicht:
Formular bearbeiten -> gewünschtes Formular anklicken -> rechte Maustaste -> "Formular..." -> eingetragener Name im Textfeld "Name".

Was meinst Du mit "Tablecontrolname": einen der beiden oben aufgeführten Namen oder etwas anderes?

Gruß

Jochen

Hallo Jochen,

Die Tabelle ist nicht das Formular. Die Variable oben ist oForm.
oTable = oForm.getByName("Tablecontrolname")

Ich kann mit "Tablecontrolname" nichts anfangen.

Wenn Du den Formularnavigator öffnest siehst Du die Namen der Formulare
und Kontrollfelder.

oDoc=thisComponent
oDrawpage=oDoc.Drawpage
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName("Formular")
oFeld=oForm.getByName("Tabellenkontrollfeld")

... und weiter kannst Du im Formularnavigator nichts sehen. Du kannst
also die einzelnen Spalten des Kontrollfeldes nicht über einen Namen
ansteuern.

oSpalte=oFeld.getByIndex(1)

dürfte die 2. Spalte auswählen.

Versuche doch einfach einmal
msgbox oFeld.dbg_properties
msgbox oFeld.dbg_methods

mit dem Tabellenkontrollfeld zu starten. Da werden die alle
Zugriffsmöglichkeiten aufgezeigt.

Gruß

Robert

Hallo Jochen,

oDoc=thisComponent
oDrawpage=oDoc.Drawpage
REM Lage des Feldes in dem entsprechenden Formular aufsuchen
oForm=oDrawpage.Forms.getByName("Formular")
oFeld=oForm.getByName("Tabellenkontrollfeld")

... und weiter kannst Du im Formularnavigator nichts sehen. Du kannst
also die einzelnen Spalten des Kontrollfeldes nicht über einen Namen
ansteuern.

oSpalte=oFeld.getByIndex(1)

Diese Information stammt noch aus vor-LO-Zeiten. Ich erhalte auch mit
dem Namen Kontakt zu der Spalte.
Also
  oSpalte=oFeld.getByname("Spaltenbezeichnung"

dürfte die 2. Spalte auswählen.

mit
  msgbox oSpalte.getCurrentValue()
bekommst Du den aktuellen Wert angezeigt

Versuche doch einfach einmal
msgbox oFeld.dbg_properties
msgbox oFeld.dbg_methods

Die sind zu lang zur Ansicht auf dem Bildschirm. Da musst Du dann etwas
tricksen.

gruß

Robert

Hallo Robert,

Die Tabelle ist nicht das Formular. Die Variable oben ist oForm.
oTable = oForm.getByName("Tablecontrolname")

Ich kann mit "Tablecontrolname" nichts anfangen.

ACHTUNG: diese Mail überschneidet sich mit Deiner nächsten Mail, in der Du eine andere Variablenbezeichnung wählst. Bei meinen weiteren Mails werde ich Deine Variablenbezeichnung übernehmen.

Ich glaube zu wissen, was Du meinst. Der Code ist nun so aufgebaut:
oForm2 = thisComponent.drawpage.forms.getByName("NameImFormular")
oTable = oForm2.getByName("NameImKontrollfeld")
oInhaltB1 = oTable.getByIndex(1)
msgbox oInhaltB1

Das Makro läuft so durch.

Problem macht die Zeile
oInhaltB1 = oTable.getByIndex(1)

Problem: oInhaltB1 ist ohne Inhalt.

Hast Du noch eine Idee?

Gruß

Jochen

Hallo Robert,

ich glaube, dass ich das Problem gelöst habe.

msgbox oSpalte.getCurrentValue()
bekommst Du den aktuellen Wert angezeigt

Das war der Knackpunkt. Damit kann ich den Wert jetzt auslesen.

Versuche doch einfach einmal
msgbox oFeld.dbg_properties
msgbox oFeld.dbg_methods

Die sind zu lang zur Ansicht auf dem Bildschirm.

Ja. Ich verwende deswegen routinemäßig "xray". Kennst Du dieses Tool? Dieses Tool ermöglicht das, was Du mit "msgbox XXX.dbg_YYY" angesprochen hast, auf eine elegante Weise.

Gruß

Jochen

Hallo Jochen,

Ja. Ich verwende deswegen routinemäßig "xray". Kennst Du dieses Tool?
Dieses Tool ermöglicht das, was Du mit "msgbox XXX.dbg_YYY" angesprochen
hast, auf eine elegante Weise.

Hatte ich auch einmal. Das war mir dann zu undurchschaubar.
Ich habe mir von Thomas Krumbein einen für mich recht durchschaubaren
Inspektor laufen (zwei Funktionen, drei Prozeduren, ein Dialog) - den
ich dennoch selten benutze.

Ich arbeite einfach lieber direkt mir Base und tüftele so lange, bis ich
mit möglichst wenig Makro-Gedöns auskomme.

Gruß

Robert