Fehler currentcontroller bei Dynamischen Druckbereich

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

Moderator: Moderatoren

mix2k1
Beiträge: 3
Registriert: Mi, 16.09.2020 11:08

Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von mix2k1 »

Hallo zusammen,

ich bin neu hier, war bislang nur stiller Mitleser und habe mich jetzt wegen dem nachfolgenden Problem angemeldet.
Zur Problemlösung habe ich auch schon hier im Forum gestöbert und auch gegoogelt, aber nicht so richtig was gefunden.

Zum Problem: Es geht um den dynamischen Druckbereich.

Ich habe eine Calc-Tabelle, welche aus einer anderen Anwendung geöffnet und dann mit Daten gefüllt wird. Grundsätzlich besteht das Problem aber auch ohne die externe Anwendung, wenn ich die Datei einfach nur selber öffne.

Ich habe diese Funktion bei meinen Recherchen gefunden unter Meine Makros -> Standard ->Module1 eingefügt:

Code: Alles auswählen

Function PRINTAREA(StartSpalte, StartZeile, EndSpalte, EndZeile)
    Dim Druckbereich(0) as new com.sun.star.table.CellRangeAddress
    Druckbereich(0).StartColumn = StartSpalte
    Druckbereich(0).StartRow = StartZeile
    Druckbereich(0).EndColumn = EndSpalte
    Druckbereich(0).EndRow = EndZeile
    
    if not isnull(ThisComponent.currentcontroller) then
        With ThisComponent.currentcontroller.activeSheet
            .setPrintareas(Druckbereich())
        End With
    end if
 End Function
Der Aufruf erfolgt aus dem Tabellenblatt „Test“. In der Zeile A2 steht =PRINTAREA(0;0;9;A1-1)
In A1 steht die Anzahl der Zeilen die gedruckt werden sollen.

Beim Öffnen der Datei(selber oder über die ex. Anwendung) erfolgt diese FM:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: currentcontroller.
Wenn ich die Funktion direkt in die Datei packe, also unter Dateiname.ods → Standard ->Module1 kommt zwar keine Fehlermeldung, aber der dynamische Druckbereich wird nicht gesetzt.

Wer kann mir kurz erklären, was ich falsch mache?

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Beim Öffnen der Datei(selber oder über die ex. Anwendung) erfolgt diese FM:
diese Melduzng kommt weil zum Zeitpunkt wo die Funktion versucht zu rechnen, die Datei noch nicht komplett geladen und CurrentController nicht verfügbar ist.
Wenn ich die Funktion direkt in die Datei packe, also unter Dateiname.ods → Standard ->Module1 kommt zwar keine Fehlermeldung, aber der dynamische Druckbereich wird nicht gesetzt.
Das dürfte damit zu tun haben das aus einer Zelle heraus aufgerufene benutzerdefinierte Funktionen nur Rückgaben liefern können, wie normale Funktionen, ebenfallss nur und nur ausnahmsweise bestimmte Aktionen ausführen können, solange diese Aktionen nicht 'zellnah' (so würde ich es formulieren) sind. Beispielsweise geht das Umbenennen einer Tabelle per benutzerdefinierter Funktion, aber nicht das aktive SChreiben eines WErtes in eine Zelle.

Naheliegenste Lösung dürfte sein ein Autostart-Makro zu verwenden, aber Achtung: Druckbereiche können in manchen OO/LO-Versionen nujr dann gesetzt werden wenn das entsprechende Tabellenblatt den Fokus hat (das ist ein Bux im Programm).


Gruß
Stephan

Gast

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Gast »

Danke Stephan für deine Antwort.

Das bedeutet ergo, dass es, wenn überhaupt, nur mit einem Autostart-Makro funktionieren würde? Bin mir nicht sicher, an welcher Stelle bei der externen Anwendung die Daten an das Dokument übermittelt werden und das Makro entsprechend berechnen kann. Versuch macht kluch....

Wo muss dann das Makro abgelegt sein, damit es von dem Dokument, welches ja für mehrere Benutzer zugänglich ist, geladen werden kann?
Unter "Meine Makros" oder unter "Dateiname.ods"? Es müsste doch dann dem Dokument beigfügt werden oder?

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Das bedeutet ergo, dass es, wenn überhaupt, nur mit einem Autostart-Makro funktionieren würde?
Ja. Zumindest ich sehe keine anderen Möglichkeit.

Das entsprechende Makro sollte typischerweise im Dokument gespeichert werden, damit es beim Öffnen des Dokuments auch verlässlich zur Verfügung steht.
(Technisch ist das aber keine Pflicht, d.h. das Makro kann auch lokal gespeichert sein, wenn seine jederzeitige Verfügbarkeit gewährleistet ist, dieses Vorgehen ist aber eher unüblich.)

Das Makro muss dann, um als Autostartmakro aufgerufen zu werden, einem passenden EReignis zugeordnet werden, typischerweise dem EReignis "Dokument öffmnen" unter Extras-Anpassen-Ereignisse


Gruß
Stephan

Gast

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Gast »

Ich bin jetzt schonmal einen Schritt weiter.

Das Makro habe ich unter Dateiname.ODS/Standard/Module1 abgelegt.
Ich habe das Makro verschiedenen Ereignissen zugewiesen. Leider funktionierte keines der Ereignisse wie gewünscht.
Oft kam die Meldung, dass er Sheet nicht kennt.
Ich habe jetzt behelfsmäßig einen Button neben die Liste eingefügt und das Makro damit verknüpft. Das funktioniert schonmal mit der Dynamik.

Trotzdem bin ich weiter an einer Lösung ohne Button interessiert.
Das Makro muss sich doch irgendwie auch nach dem öffnen der Datei starten lassen und trotzdem auf das Sheet zugreifen können?
Hat hier vielleicht noch jemand eine Idee?
Hat jetzt zwar direkt nichts mehr mit dem ursprünglichen Problem zu tun, aber ich hoffe denoch auf Unterstützung :-)

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Oft kam die Meldung, dass er Sheet nicht kennt.
mutmaßlich weil die Sheet-Angabe beim DRuckbereich fehlt? ZUmindest fehlt sie bei der ursprünglichen Funktion.
Das Makro muss sich doch irgendwie auch nach dem öffnen der Datei starten lassen und trotzdem auf das Sheet zugreifen können?
natürlich. Genauso wie ich das beschrieben habe. Beispiel anhängend.


Gruß
Stephan
Dateianhänge
DruckbereichPerMakro.ods
(10.83 KiB) 17-mal heruntergeladen

Gast

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Gast »

Danke für die Bsp.Datei.
Ich habe nur noch nicht verstanden wo Aufrufen gestartet wird und wo ich das einstelle.
Wahrscheinlich habe ich es daher auch nicht selber hinbekommen ...

mikeleb
******
Beiträge: 950
Registriert: Fr, 09.12.2011 16:50

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von mikeleb »

Hallo,
du könntest der Funktion beim Aufruf aber auch das Tabellenblatt gleich mit übergeben:

Code: Alles auswählen

Function PRINTAREA(StartSpalte, StartZeile, EndSpalte, EndZeile, Tabnr)
    Dim Druckbereich(0) as new com.sun.star.table.CellRangeAddress
    Druckbereich(0).StartColumn = StartSpalte
    Druckbereich(0).StartRow = StartZeile
    Druckbereich(0).EndColumn = EndSpalte
    Druckbereich(0).EndRow = EndZeile
    Druckbereich(0).Sheet = Tabnr-1
    ThisComponent.Sheets(Tabnr-1).setPrintareas(Druckbereich())
 End Function
Der Aufruf erfolgt dann über

Code: Alles auswählen

=PRINTAREA(0;0;1;10;ZELLE("Sheet"))
der letzte Parameter liefert dir immer die aktuelle Tabellenblattnummer (hier beginnt die Zählung allerdings bei 1!)
Gruß,
mikeleb

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Ich habe nur noch nicht verstanden wo Aufrufen gestartet wird
Extras-Anpassen:
Dateianhänge
Extras-Anpassen.gif
Extras-Anpassen.gif (34.2 KiB) 1264 mal betrachtet

mix2k1
Beiträge: 3
Registriert: Mi, 16.09.2020 11:08

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von mix2k1 »

Hallo mikeleb, vielen dank für deinen Ansatz, den werde ich auch gleich noch testen. Ich werde berichten.
EDIT: Diese Variante funktioniert genau so, wie ich es mir vorstelle bzw. auch vom "großen" Excel kenne. Besten Dank!


Nochmal zu dem Screenshot von Stephan:
Dieses Fenster unter Extras/Anpassen kannte ich auch, aber in dem Dropdownfeld unten steht nur OpenOffice.org und nichts weiter.
Keine *.ods wie bei dir. Ich habe auch nur deine Datei geöffnet.
Was mache ich hier anders als du? Liegt es vielleicht an irgendwelchen Rechten/Einstellungen? Bei mir ist Makrosicherheit schon auf Niedrig eingestellt.

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Was mache ich hier anders als du?


Mutmaßlich rufst Du Extras-Ampassen auf wärend Du Dic in der Basic-IDE befindest. ES muss jedoch aufgerufen werden während das Dokument bzw. ein Tabellenblatt sichtbar ist (den Fukus hat)
Liegt es vielleicht an irgendwelchen Rechten/Einstellungen?
Nein.

Gruß
Stephan

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Diese Variante funktioniert genau so, wie ich es mir vorstelle
Verwunderlich nur das dann die ganze Zeit vom aktiven Tabellenblatt die REde war, denn die Variante mit dem fixen Tabellenblatt hätte ich Dir auch nennen können.


Stephan

mix2k1
Beiträge: 3
Registriert: Mi, 16.09.2020 11:08

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von mix2k1 »

Mutmaßlich rufst Du Extras-Ampassen auf wärend Du Dic in der Basic-IDE befindest. ES muss jedoch aufgerufen werden während das Dokument bzw. ein Tabellenblatt sichtbar ist (den Fukus hat)
Genau das war tatsächlich der Fehler. Ich doof *grummmel*
Verwunderlich nur das dann die ganze Zeit vom aktiven Tabellenblatt die REde war, denn die Variante mit dem fixen Tabellenblatt hätte ich Dir auch nennen können.
Ich habe doch auch nichts gegenteiliges dazu angegeben oder? Naja egal, sei es drum.

Ich danke euch jedenfalls sehr für eure Unterstützung! Weiter so!! 8)

Stephan
********
Beiträge: 11803
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Fehler currentcontroller bei Dynamischen Druckbereich

Beitrag von Stephan »

Ich habe doch auch nichts gegenteiliges dazu angegeben oder?
Was ja auch nicht nötig war. Wenn ich ein Autohaus hätte und Du kommst und mir sagst "Ich möchte einen Diesel kaufen. Was können Sie mir anbieten?" würde ich Dir jedenfalls keinen Benziner anbieten.

Der 'Zirkus' hier im Forum ist praktisch immer Derselbe, Wenn man Vorschläge macht die über die Frage hinausgehen wird man dafür verbal abgestraft (Motto 'kannst Du meine Frage nicht lesen'), wenn man hingegen die Frage so nimmt wie sie dasteht wird man dafür kritisiert ...

Ach und damit wir uns nicht missverstehen, meine Aussage bezog sich auf DEine Aussage "genau so", denn hättest Du dort etwas geschrieben wie 'ja, das erfüllt auch meine Anforderungen" hätte ich nichts gesagt.


Stephan

Antworten