Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

franky
*
Beiträge: 19
Registriert: Mi, 28.02.2007 19:06
Wohnort: Wunstorf

Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Beitrag von franky »

Hallo liebes Forum,

ich habe eine Datenbank mit mit mehreren Tabellen. In einer Calc-Datei habe ich zwei Auswahlfelder mit Haltestellen. Die holt er sich auch korrekt aus der Datenbank.
Ebenfalls sind zwei Felder mit Uhrzeiten der einzelnen Haltestellen.

Ich möchte jetzt mit dem Suchen-Button die richtige Uhrzeit herausfinden, wann der Bus an der Haltestelle A Abfährt und an der Haltestelle B ankommt. in eimem Writer-Document
funktioniert das Makro tadellos. In einem Calc-Dokument funktioniert es nicht. Er schreibt dann imer "Basic-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: drawpage

Was muß ich an diesem Makro ändern, damit es funktioniert. Die Datenbank und die Calc-Testtabelle habe ich mit hochgeladen.

Ich hoffe, Ihr könnt mir helfen.

Vielen Dank im Vorraus.

Franky
Dateianhänge
Testentfernungen.ods
(21.59 KiB) 76-mal heruntergeladen
Ruftaxi-2010.odb
(57.95 KiB) 64-mal heruntergeladen
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Beitrag von DPunch »

Aloha
franky hat geschrieben:In einem Calc-Dokument funktioniert es nicht. Er schreibt dann imer "Basic-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: drawpage
Ein Calc-Dokument hat nicht nur eine Drawpage, sondern jedes einzelne Sheet hat seine eigene.
Daher heisst die Methode nicht "getDrawpage" sondern "getDrawpages" (bzw. thisComponent.Drawpages statt thisComponent.Drawpage).

Um die gewünschte Drawpage anzusprechen, solltest Du vorher das Sheet identifizieren, dem die Drawpage zugeordnet ist, z.B. so

Code: Alles auswählen

oDrawpage = ThisComponent.CurrentController.ActiveSheet.Drawpage
oDrawpage referenziert dann die Drawpage des momentan aktiven Calcsheets.
Um die Drawpage eines anderen Sheets zu referenzieren, gehst Du prinzipiell nach dem gleichen Schema vor

Code: Alles auswählen

oDrawpage = ThisComponent.Sheets.getByName("meinTabellenblatt").Drawpage
Von dort aus kannst Du auf die Forms und Steuerelemente zugreifen wie in einem Writer-Dokument.
franky
*
Beiträge: 19
Registriert: Mi, 28.02.2007 19:06
Wohnort: Wunstorf

Re: Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Beitrag von franky »

Hallöle DPunch,

Danke für Deine Antwort. Aber irgendwie habe ich ein Brett vor dem Kopp. Kanst Du mir das mal in meinen beiden Dateien so hinbasteln
wie Du es meinst ?

Quasi als Anschauungsunterricht für mich. Ich versuche das dann nachzuvollziehen. Das kann ich irgendwie besser. Es ist halt immer
etwas schwierig für einen Dummi wie mich, da ich noch nicht lange damit arbeite und meine Literatur noch nicht da ist.

Danke nochmals

Franky
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Beitrag von DPunch »

Aloha
franky hat geschrieben:Danke für Deine Antwort. Aber irgendwie habe ich ein Brett vor dem Kopp. Kanst Du mir das mal in meinen beiden Dateien so hinbasteln
wie Du es meinst ?
Ich habe Open Office leider nicht (mehr) installiert, deshalb ist das etwas problematisch ;)
Ich kann also nur versuchen, es Dir möglichst plastisch zu erklären:
Ausgehend von Deiner Aussage
franky hat geschrieben:in eimem Writer-Document funktioniert das Makro tadellos. In einem Calc-Dokument funktioniert es nicht.
nehme ich mal an, dass der Code prinzipiell funktioniert und es nur um die Referenzierung der gewünschten Drawpage in einem Calc-Dokument geht.
Während Du im Writer-Dokument mit

Code: Alles auswählen

thisComponent.Drawpage
arbeiten kannst, um die Drawpage zu referenzieren (anzusprechen, zu benutzen), da ein Writer-Dokument prinzipiell eben nur eine Drawpage hat, musst Du in einem Calc-Dokument die gewünschte Drawpage gezielt ansprechen, da dort jedes Tabellenblatt eine eigene Drawpage hat.
"thisComponent" hat in diesem Fall also nicht die Pseudo-Eigenschaft "DrawPage" - weshalb der von Dir beschriebene Fehler auftritt - sondern nur die Pseudo-Eigenschaft "DrawPages". Mehrere Drawpages (eine pro Tabellenblatt) = Mehrzahl.
Nun musst Du die Drawpage identifizieren, die Du für Dein Makro benötigst.
Wenn Du Dir sicher bist, dass das Makro immer vom entsprechenden Tabellenblatt ausgeführt wird (über eine Schaltfläche o.Ä.), dann ersetzt Du einfach den funktionierenden Codeschnippsel

Code: Alles auswählen

thisComponent.Drawpage
aus dem Writer-Dokument mit

Code: Alles auswählen

thisComponent.CurrentController.ActiveSheet.Drawpage
Kann das Makro auch aus einem anderen Tabellenblatt ausgeführt werden, musst Du das Tabellenblatt und die anhängliche Drawpage noch gezielter ansprechen:

Code: Alles auswählen

thisComponent.Sheets.getByName("meinTabellenblatt").Drawpage
"meinTabellenblatt" ist dabei der Name des Tabellenblatts, in dem Deine Steuerelemente liegen.
Also kurz gesagt, überall, wo Du im Writer-Dokument mit

Code: Alles auswählen

thisComponent.Drawpage.machwasweissichwas
gearbeitet hast, musst Du im Calc-Dokument die gewünschte Drawpage gezielt raussuchen und ansprechen, z.B.

Code: Alles auswählen

thisComponent.CurrentController.ActiveSheet.Drawpage.machwasweissichwas
franky
*
Beiträge: 19
Registriert: Mi, 28.02.2007 19:06
Wohnort: Wunstorf

Re: Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Beitrag von franky »

Hallo DPunch,

sorry das ich mich nicht gemeldet hatte. lag aber krank danieder.. naja Grippe halt..
habe das mit dem Makro probiert. Hat leider nicht hingehauen. Er zeigt zwar jetzt keine
Fehlermeldung mehr, aber es bewegt sich in den feldern leider auch gar nichts.

Ich schreibe in meinem nächsten Post mal das Original-Makro.

Aber trotzdem ein riesne Danke für Deine Hilfe bis jetzt.

Franky

Hier ist das Original-Makro:

Sub uebernehmen

oForm = ThisComponent.drawpage.forms.getByName("Standard")
oForm.upDateRow () 'geänderten Datensatz speichern
oForm.reload() 'Formular neu einlesen

End Sub
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Macro funktioniert nicht. Was ist da falsch? Brauche Eure Hi

Beitrag von DPunch »

Aloha

Irgendwo auf dem Weg hast Du mich verloren, ich sehe gerade keinerlei Zusammenhang zwischen Deiner ursprünglichen Frage und meiner Antwort und der Problemstellung, die Du jetzt schilderst.
Insofern kann ich Dir da so nicht weiterhelfen.
Antworten