Vielen Dank für Deine Infos, Gerhard
Wunderbar, nun werden beide Dokumente bei der Änderung des einen
Dokuments aktualisiert.
Ja, hier die Grundstrukter. Ja, richtig: Die Feinheiten, wie
Repositionieren, sind als nächster Schritt erforderlich.
Grüße
Gerhard
Der Makro in seiner Grundstruktur, wie er nun läuft.
SUB Reload_aAnmeldung
DIM oDoc1 AS OBJECT 'Document 1
DIM oDoc2 AS OBJECT 'Document 2
DIM oDrawpage AS OBJECT
DIM oDATEN AS OBJECT
DIM oForm AS OBJECT
oDATEN = thisComponent.Drawpage.Forms.DATEN
oDATEN.reload() 'reload Document 1
oForm = thisComponent.Parent.FormDocuments
oDoc2 = oForm.getByName("aAnmeldung_Tab").open 'Document 2
oDATEN = oDoc2.Drawpage.Forms.DATEN 'reload Document 2
oDATEN.reload() 'reload Document 2
WAIT 50
oForm.getByName("aAnmeldung").open 'Document 1 wieder als aktives
Document auf dem Bildschirm als unmittelbare Ansicht
End Sub
Am 21.06.2017 um 22:43 schrieb Gerhard Weydt:
Hallo Gerhard, > > Schnipsel sind insbesondere in Base nicht ganz einfach zu liefern,
> weil da doch die Daten- und Dokumentstruktur mit reinspielt. Ich habe
> den folgenden Code an einem Beispiel, das ich sowieso hatte, >
ausprobiert. Das enthielt zwei nahezu identische Formular-Dokumente. >
Ich nenne so, um Missverständnisse zumindest zu erschweren, das, was >
man als "Formular" im Base-Dokument aufruft - in Übereinstimmung mit >
der Nomenklatur in UNO: FormDocuments - und was, je nach dem, was man >
dann definiert, sich auf viele Tabellen beziehen kann, im Gegensatz >
zum Formular innerhalb eines Formular-Dokuments, das genau auf eine >
Tabelle (Ansicht, Abfrage) bezogen ist. In diesem Sinn willst du ein >
zweites Formular-Dokument aktualisieren, wenn ein erstes verwaltet >
wird (was natürlich, wie in deinem Fall, nur sinnvoll ist, wenn es >
Überschneidungen in den angezeigten Tabellen gibt). Meine zwei >
Formular-Dokumente haben mehrere Formulare, die in einer Hierarchie >
zueinander stehen, aber das ist für den Effekt unerheblich, ich habe >
nur die Änderung des obersten Formulars (das ein >
Tabellen-Kontrollelement für die zugehörige Tabelle enthält) >
behandelt, die durch den Code die erneuerte Anzeige des obersten >
Formulars des anderen Formulardokuments auslöste (was im Beispiel >
wiederum ein formal identisches Tabellenkontrollelement ist). Das >
Makro habe ich mit dem Ereignis "Nach der Datensatzaktion" des >
obersten Formulars verknüpft. > > Sub RefreshSecondForm (evt as object)
> > dim oDoc as object, oDBDoc as object, oSecondFormDoc as object, >
mainForm as object > > oDoc = ThisComponent oDBDoc = oDoc.Parent
oSecondFormDoc = > oDBDoc.FormDocuments.getByName("???1").open
'activates form doc, if > already open mainForm =
oSecondFormDoc.DrawPage.Forms.getByIndex(0) > 'or getByName("???2")
mainForm.reload > > end sub > > Der Parent des Formular-Dokuments, in
dem die Änderung passiert, ist > das Base-Dokument, das weitere
Formular-Dokumente enthält, aus denen > wir dasjenige wählen, das wir
aktualisieren wollen. Das Dok. wird > "geöffnet", was bei einem bereits
geöffneten nur die Auswahl des > Objekts bedeutet. Dann können wir wie
gewohnt das Fomular wählen - im > Code über den Index, weil es nur ein
oberstes gibt. reload erneuert > die Anzeige. Da gibt es sicher noch ein
paar Dinge zu überlegen, die > aber von der konkreten Struktur deiner
beiden Formular-Dokumente > abhängen, die ich ja nicht kenne.
Beispielsweise könnte bei einem > aufwändigeren Formular-Dokument die
Änderung auch nur in einem > Unterformular passieren, dann müsste da
beim gleichen Ereignis im > Unterformular ein ähnlicher Code aufgerufen
werden, der aber dann > wohl ein anderes Formular im sekundären
Formular-Dokument reloaden > müsste. Der Befehl reload beginnt mit der
Anzeige wieder beim ersten > Satz, egal wie im sekundären
Formular-Dokument gerollt war und wo der > Cursor stand. Man könnte,
denke ich, das Formular auch wieder so > positionieren wie vor dem
Reload, wenn man sich die Position merkt, > aber das habe ich nicht
ausprobiert. Es könnte auch einen Unterschied > bedeuten, wenn das
Formular im sekundären Formular-Dokument nur einen > einzelnen Satz
anzeigt, da könnte das Repositionieren noch wichtiger > sein. Das wirst
du sicher selber lösen können, du scheinst ja doch > einiges auf diesem
Gebiet zu wissen. Übrigens: dein > > oDATEN =
thisComponent.Drawpage.Forms.DATEN > > kann ja wohl kein echter Befehl
sein, sondern nur exemplarisch > gemeint. DATEN gibt es unter ...Forms
nicht, und wenn, müsste es ja > wohl eine einzelne Form sein, zu der es
Daten gibt. > > Wenn du das Beispiel-Dokument haben willst, melde dich,
ich schicke > es dir dann direkt, in der Liste kann man keine Anhänge
verwenden. > > Gruß > > Gerhard > > Am 21.06.2017 um 13:44 schrieb
Gerhard Dittrich: >> Vielen Dank, Gerhard für Deine Hinweise! >> >> Hast
Du vielleicht ein Code-Schnipsel parat, so dass ich versuchen >> kann,
den "Weg" anhand des Code-Schnipsels zu rekonstruieren? >> >> Grüße
Gerhard >> >> >> >> Am 21.06.2017 um 11:21 schrieb Gerhard Weydt: >>>
Hallo Gerhard, >>> >>> was ich vergessen habe: anschließend das
Formulardokument mit >>> getByName("xxx").open aktivieren, dann hast du
den Zugriff. >>> >>> Am 21.06.2017 um 10:36 schrieb Gerhard Weydt: >>>>
Hallo Gerhard, >>>> >>>> über ThisComponent.Parent.FormDocuments kannst
du auf die >>>> anderen Formulardokumente zugreifen. Ich benutze immer
Xray, um >>>> so etwas zu finden, und probiere einfach vielversprechende
>>>> Eigenschaften und Methoden aus. >>>> >>>> Gruß >>>> >>>> Gerhard
>>>> >>>> Am 21.06.2017 um 09:02 schrieb Gerhard Dittrich: >>>>> Guten
Morgen, >>>>> >>>>> ich arbeite mit Base. >>>>> >>>>> Zwei Formulare
sind geöffnet. Diese beiden Formulare greifen >>>>> auf den selben
Datenbestand zu, nur anders dargestellt. >>>>> >>>>> Ändere ich in dem
einen (ERSTEN) Formular Daten, und klicke >>>>> in der Menü-Leiste ich
auf das andere (ZWEITE) bereits in der >>>>> Anwendung geöffnete
Formular, rückt es als aktives in den >>>>> Vordergrund). Die Daten
werden jedoch nicht aktualisiert >>>>> dargestellt. (Ich müsste also
zusätzlich einen >>>>> AKTUALISIEREN-BUTTON im ZWEITEN Formular
klicken). Einfach >>>>> wäre es, wenn ich im Rahmen der
Datenmanipulation im ERSTEN >>>>> Formular (diese läuft über ein
Dialogfenster) zugleich per >>>>> Makro anweisen könnte, dass das nicht
aktive Formular >>>>> ebenfalls aktualisiert wird. >>>>> >>>>> Dazu
müsste ich aber das NICHT-AKTIVE ZWEITE Formular >>>>> ansteuern können.
>>>>> >>>>> Ich kenne aber nur den Befehl "thisComponent". Dieser führt
>>>>> natürlich nur auf das aktive ERSTE Formular. >>>>> >>>>> Bei mir
zum Beispiel: oDATEN = >>>>> thisComponent.Drawpage.Forms.DATEN >>>>>
>>>>> Natürlich könnte ich das ZWEITE Formular per Makro schließen
>>>>> lassen und dann wieder öffnen. Dann würde das ZWEITE Formular
>>>>> automatisch aktualisiert. Diesen Weg möchte ich aber nicht >>>>>
beschreiten. >>>>> >>>>> >>>>> Grüße Gerhard Dittrich >>>>> >>>> >>>>
>>> >>> >> >> > >
e
--
Liste abmelden mit E-Mail an: users+unsubscribe@de.libreoffice.org
Probleme? http://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: http://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: http://listarchives.libreoffice.org/de/users/
Alle E-Mails an diese Liste werden unlöschbar öffentlich archiviert
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.