BASIC-Makro @ CALC - Cursor-Positionierung

Hallo,

folgendes kleines Problem im Kontext von BASIC-Makro @ CALC:

[1] Ein Standard ODS-Dokument wird geladen.
[2] Im "Hidden"-Modus wird ein Tabellenblatt beschrieben.
[3] Das Tabellenblatt wird sichtbar gemacht.
[4] Der Cursor wird auf die letzte Spalte der Zeile positioniert.
[5] Die befüllten Spalten belegen gerade mal die halbe Seitenbreite der CALC-Tabelle-Ansicht bei 100%-Zoom.

Funktioniert alles bestens, bis auf einen kleinen Schönheitsfehler:

Durch das Positionieren des Cursors wird die horizontale ScrollBar aktiviert, so dass alle Spalten nach links verschoben werden und nur die Zelle mit Eintrag "E" sichtbar ist.
Gibt es eine Möglichkeit, dieses (automatische) Verschieben der Zellen nach links zu unterbinden ?
Habe ich gegebenenfalls zur Cursor-Positionierung ein falsches Sprachkonstrukt genutzt ?

Arbeitet man nicht im "Hidden"-Modus, sondern im "Visible"-Modus mit "ThisComponent, tritt dieser Effekt nicht auf.

Anbei zwei Makros

+ Sub SetCursor_loadComponent =>"Hidden"-Modus-Beispiel
+ Sub SetCursor_ThisComponent => "Visible"-Modus-Beispiel

zum Nachvollziehen.

Hat jemand eine Idee, wo das Problem liegen und wie man es lösen könnte ?

Danke schon mal im Voraus,
Gruß
Hans-Werner ;-))

Sub SetCursor_loadComponent

Dim oD as Object
Dim oTB as Object
Dim aB() as String
Dim X as Integer

aB = Array("A","B","C","D","E")

Const P1 = "private:factory/scalc"
Const P2 = "_blank"
Const P3 = 0
Dim aPV(0) as New com.sun.star.beans.PropertyValue
aPV(0).name = "Hidden"
aPV(0).value = True

oD = StarDesktop.loadComponentFromURL(P1,P2,P3,aPV())
oTB = oD.sheets(0)
For X=0 To UBound(aB) Step 1
oTB.getCellByPosition(X,0).String = aB(X)
Next X
oD.getCurrentController().getFrame().getContainerWindow().setVisible(True)
oD.CurrentController.Select(oTB.getCellByPosition(4,0))

End Sub

Sub SetCursor_ThisComponent

Dim oD as Object
Dim oTB as Object
Dim aB() as String
Dim X as Integer

aB = Array("A","B","C","D","E")

oD = ThisComponent
oTB = oD.sheets(0)
For X=0 To UBound(aB) Step 1
oTB.getCellByPosition(X,0).String = aB(X)
Next X
oD.CurrentController.Select(oTB.getCellByPosition(4,0))

End Sub

Hallo Hans-Werner,

ohne es zu testen:

ein "hidden" geladenes Dokument hat zunächst keinen eigenen View-Controller. Der wird erst erzeugt, wenn es "visible" gestellt wird. Dann wird die aktive Zelle als Startzelle genommen. Die ist bei Dir E1 - also ist das die linke obere Ecke.  Aktiv deswegen, weil Du dort die letzte Eingabe gemacht hast.

Das "Select" anschliessend hat damit gar nicht zu tun.

Wähle lieber vorher die Zelle A1 - setzte dann das Sheet visible uns selektiere anschliessend die gewünschte Zelle.

Dann sollte es passen.

VG

Thomas

Hallo Thomas,

danke für Deinen Hinweis, hat aber leider nicht funktioniert.
Habe vor dem "setVisible" die Zeile »oTB.getCellByPosition(0,0).String = "Cursor"« eingefügt.
In "A1" steht auch "Cursor", aber der beschrieben Effekt ist noch immer vorhanden.

Gruß
Hans-Werner

Sub SetCursor_loadComponent

Dim oD as Object
Dim oTB as Object
Dim aB() as String
Dim X as Integer

aB = Array("A","B","C","D","E")

Const P1 = "private:factory/scalc"
Const P2 = "_blank"
Const P3 = 0
Dim aPV(0) as New com.sun.star.beans.PropertyValue
aPV(0).name = "Hidden"
aPV(0).value = True

oD = StarDesktop.loadComponentFromURL(P1,P2,P3,aPV())
oTB = oD.sheets(0)
For X=0 To UBound(aB) Step 1
oTB.getCellByPosition(X,0).String = aB(X)
Next X
oTB.getCellByPosition(0,0).String = "Cursor"
oD.getCurrentController().getFrame().getContainerWindow().setVisible(True)
oD.CurrentController.Select(oTB.getCellByPosition(4,0))

End Sub

------ Originalnachricht ------

Hei Hans-Werner,

sicher? hab dein Makro grad mal getestet...  und so sieht es bei mir auch:

http://prntscr.com/kgaoqb

Eigentlich wie Du es wolltest, oder?

VG

Thomas

Ach ja: Win 10, LO 5.3.1  64bit

Hallo Thomas,

ja, so hätte ich das auch gern, aber leider ...

Was mir noch eingefallen ist:

Bis gestern hatte ich "LO 5.3.7.2 (x64)" installiert, und da trat dieser Effekt nicht auf.

Nach der gestrigen (Neu-) Installation von "6.0.6.2 (x64)" trat dieser Effekt das erste Mal auf. Natürlich habe ich einen Gegen-Test mit einer Parallel-Installation von "LO 5.3.7.2 (x64)" gemacht und da trat dieser Effekt auch auf. Das klingt zwar erst mal widersprüchlich zu meiner obigen Aussage, muss es aber nicht sein, da ich nicht weiß, ob die "LO 5.3.7.2 (x64)"-Parallel-Installation das selbe Build beinhaltet wie meine alte "LO 5.3.7.2 (x64)"-Installation.

Ich werde morgen mal mein vorheriges Windows-Systemabbild einspielen mit meiner alten "LO 5.3.7.2 (x64)"-Installation, und dann schaun mer mal ... vielleicht hätte ich doch vor der gestrigen Neu-Installation nicht die Registry manuell bereinigen sollen :open_mouth: ... aber egal, nach dem Einspielen des vorherigen Systemabbildes sind alle meine gestrigen Aktivitäten eh "Schnee von gestern".

Erst mal Danke für Deine Bemühungen,
Grüße
Hans-Werner :-))

------ Originalnachricht ------

Hallo Hans-Werner,

hab die Zeile auch mal auskommentiert - keine Änderung. Alles wie gewünscht.

Wenn es bei der 6er anders ist, bedarf es sicher intensiverer Tests und neue Strategien. Sorry, da kann ich dann jetzt auch nicht helfen.

VG

Thomas

Hallo Thomas,

da bin ich aber froh, dass es mit auskommentierter Zeile bei Dir auch funktioniert, so ist meine Erinnerung an Gestern wohl doch ganz richtig.

Ich teste morgen erst mal mit meiner alten zurück gespielten Version und dann werden ich die neue LO-Version ganz normal installieren und dann wird man sehen. Ich werde berichten, wenn ich mehr weiß ...

Nochmals Danke für Deine Tests,
Gruß
Hans-Werner ;-))

------ Originalnachricht ------