Aloha
Auf den ersten Blick ist das Problem ganz einfach gelagert (und war es anscheinend auch schon bei Deinem letzten Problem dieser Art):
Die Verwendung von "oDoc" bzw "thisComponent".
Stell es Dir so vor (vereinfacht und unter der Annahme, dass oDoc ausserhalb einer Prozedur definiert wurde und somit mindestens Modulweit bekannt ist)
Du hast ein Formular A.
Mit >>oDoc = thisComponent<< weist Du der Variable "oDoc" eine Referenzierung auf das OOo-Dokument zu, aus dem das Makro ausgeführt wurde - in diesem Fall Formular A.
Wenn Du dem Programm von nun also irgeneine Anweisung gibst, die im Zusammenhang mit "oDoc" steht, erkennt das Programm, dass das ja eine Referenzierung von Formular A ist.
oDoc ist also gleich Formular A.
Nun machst Du dies und jenes und öffnest dann ein neues Formular - nennen wir es Formular B.
In diesem neuen Formular versuchst Du dann, über z.B. "oDoc.getTextTables().getByName("TabRezept")" auf eine Tabelle zuzugreifen.
Das Programm kennt die Variable oDoc - das ist schliesslich Formular A.
Dementsprechend sucht es in Formular A nach der Tabelle "TabRezept". Dort gibt es diese Tabelle aber nicht, sondern nur in Formular B.
Ich hoffe, das war einigermassen verständlich.
Im Endeffekt musst Du dem Programm nur sagen, dass die Tabelle nicht in Formular A (oDoc) ist, sondern in Formular B.
Code: Alles auswählen
oForm = StarDesktop.CurrentComponent.getParent.getFormDocuments().loadComponentFromURL(aFormulare(i), "", 0, Arg())
Rem Tabelle Füllen
DruckFormFuell(iRezeptID)
Der Code beinhaltet schon alles notwendige - die Variable "oForm" beinhaltet von diesem Zeitpunkt an eine Referenzierung auf das neu geöffnete Formular.
Wenn Du der Prozedur "DruckFormFuell" noch diese Referenzierung mitgibst, also
Code: Alles auswählen
oForm = StarDesktop.CurrentComponent.getParent.getFormDocuments().loadComponentFromURL(aFormulare(i), "", 0, Arg())
Rem Tabelle Füllen
DruckFormFuell(iRezeptID, oForm)
(Dementsprechend muss die Prozedur natürlich anders deklariert werden, z.B.)
Code: Alles auswählen
Sub DruckFormFuell(RezID as Integer, newDoc as Object)
kannst Du in der Prozedur nun mit "newDoc.getTextTables().getByName("TabRezept")" auf die Tabelle zugreifen.
Das übergebene Object "newDoc" ist schliesslich eine Referenzierung auf das Formular B. Dort gibt es die Tabelle.
In diesem Zusammenhang ist es kein Wunder, dass Dein Makro soweit funktioniert, wenn Du es vom "Zielformular" aus ausführst - denn dort ist oDoc entsprechend der obigen Ausführung Formular B.