Seite 1 von 1
Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Mi, 16.09.2020 11:13
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?
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Mi, 16.09.2020 16:22
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
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Do, 17.09.2020 09:54
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
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Do, 17.09.2020 12:26
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
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Do, 17.09.2020 16:21
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
der letzte Parameter liefert dir immer die aktuelle Tabellenblattnummer (hier beginnt die Zählung allerdings bei 1!)
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Do, 17.09.2020 16:27
von Stephan
Ich habe nur noch nicht verstanden wo Aufrufen gestartet wird
Extras-Anpassen:
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Do, 17.09.2020 20:38
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.
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Fr, 18.09.2020 08:13
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
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Fr, 18.09.2020 08:15
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
Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Fr, 18.09.2020 09:25
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!!

Re: Fehler currentcontroller bei Dynamischen Druckbereich
Verfasst: Fr, 18.09.2020 09:45
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