Tabellenschutz und Cursorposition über mehrere Tabellen setzen

Guten Tag Listlinge,

in Calc möchte ich alle Tabellen auf den gleichen Stand bezüglich
Druckbereich und Cursorposition setzen.

Dazu gehe ich (versuche ich) mittels einer while- wend-Schleife
alle Tabellen durch und setze die entsprechenden Werte.

Die Messagebox innerhalb der Schleife zeigt mir auch einen
Durchlauf über alle Tabellen an. Es werden aber keine Werte
für die jeweiligen Tabellen gesetzt. Eine Fehlermeldung erhalte
ich auch nicht.

Ich weiss nicht mehr weiter. Vielleicht erkennt ja jemand von euch
den "Wurm".

'???
sub Druckbereiche ' ?
'???

' ???
' ? Deklaration der Variablen ?
' ???
        dim document as object
        dim dispatcher as object
        dim oSheet as object
        dim eSheets as object
        dim args1(3) as new com.sun.star.beans.PropertyValue ' für den Druckbereich
        dim args2(0) as new com.sun.star.beans.PropertyValue ' für die Cursorposition

' ???
' ? Definition der Variablen ?
' ???
        document = ThisComponent.CurrentController.Frame
        dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
        eSheets = ThisComponent.getSheets.createEnumeration

        'Druckbereich
   args1(0).Name = "PrintArea"
        args1(0).Value = "$A$1:$O$42;$A$43:$O$53"
        args1(1).Name = "PrintRepeatRow"
        args1(1).Value = "$A$1:$A$2"
        args1(2).Name = "PrintRepeatCol"
        args1(2).Value = ""
                
        'Cursorposition
   args2(0).Name = "ToPoint"
        args2(0).Value = "$D$5"
                
' ???
' ? Durchlauf aller Tabellen ?
' ???
        While eSheets.hasMoreElements
        oSheet = eSheets.nextElement()

                dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0, args1())

                dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
                
                MsgBox "Nächster Tabellenname ist: " & oSheet.getName & "."
        Wend
        
        MsgBox "Druckbereiche wurden definiert!" & CHR$(13) &_
                "Achten Sie auf eine Skalierung von 75% " & CHR$(13) &_
                "und einen Rand von 1,9cm ringsherum."
        
end sub

Hallo Jörg,

Dazu gehe ich (versuche ich) mittels einer while- wend-Schleife
alle Tabellen durch und setze die entsprechenden Werte.

Die Messagebox innerhalb der Schleife zeigt mir auch einen
Durchlauf über alle Tabellen an. Es werden aber keine Werte
für die jeweiligen Tabellen gesetzt.

Das Statement

dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0,
args1())

in Deiner Schleife betrifft stets das aktive Tabellenblatt. Du
durchläufst zwar eine Auflistung aller Tabellenblätter, machst das
jeweilige Blatt aber nicht aktiv, bevor Du den den Dispatcher anwendest.

Füge in der Schleife vor dem dispatcher-Statement folgendes
Statement ein:

ThisComponent.CurrentController.setActiveSheet(oSheet)

Damit müsste es klappen.

Gruß

Stefan

Guten Tag Stefan Weigel,

======================== Zitatanfang ========================

Hallo Jörg,

Dazu gehe ich (versuche ich) mittels einer while- wend-Schleife
alle Tabellen durch und setze die entsprechenden Werte.

Die Messagebox innerhalb der Schleife zeigt mir auch einen
Durchlauf über alle Tabellen an. Es werden aber keine Werte
für die jeweiligen Tabellen gesetzt.

Das Statement

dispatcher.executeDispatch(document, ".uno:ChangePrintArea", "", 0,
args1())

in Deiner Schleife betrifft stets das aktive Tabellenblatt. Du
durchläufst zwar eine Auflistung aller Tabellenblätter, machst das
jeweilige Blatt aber nicht aktiv, bevor Du den den Dispatcher anwendest.

Füge in der Schleife vor dem dispatcher-Statement folgendes
Statement ein:

ThisComponent.CurrentController.setActiveSheet(oSheet)

Damit müsste es klappen.

Gruß

Stefan

--
LibreOffice - Die Freiheit nehm' ich mir!

========================= Zitatende =========================

Wow: 23 Minuten vom Einstellen des Problems bis zur Lösung!
Und ich bastele schon Stunden daran ...

Danke! Genau so funktioniert es.