Yes, two controllers. But the toFront method doesn’t work (Ubuntu) because the windows don’t overlap. Focus does not move. Nothing happens.
So, here is the final code. @sokol92, thanks again.
REM ***** BASIC *****
Option Explicit
Sub ArrangeTwoWindowsVertical()
''' Open two windows of the same document,
''' displaying the first and second sheets in their windows (left and right).
'''
''' Calls: ActivateCell
''' Remarks:
''' ⁈ • The height of each window was simply increased significantly
''' (without calculation, by a factor of 2), and only then did they fill
''' the entire height space. Bug, maybe. See: .Height * 2
''' • Const: com.sun.star.awt.PosSize.POSSIZE = 15: Flags the x- and y-coordinate, width and height.
On Local Error GoTo HandleErrors
Dim oDoc, oDisp, oWin1, oWin2
Dim oPosSize As New com.sun.star.awt.Rectangle 'maximized window possize
Dim nWidthHalved& 'oWin1 width halved
Dim nRemainder% 'remainder after division by 2
oDoc = ThisComponent
oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
' 1st Controller.
With oDoc.CurrentController
.ActiveSheet = oDoc.Sheets(0)
Call ActivateCell(.ActiveSheet.getCellByPosition(0, 1))
oWin1 = .Frame.ContainerWindow
With oWin1
.IsMaximized = True
Wait 100: oPosSize = .PosSize
nWidthHalved = oPosSize.Width \ 2: nRemainder = oPosSize.Width - nWidthHalved * 2
.IsMaximized = False
End With
Wait 100
With oPosSize
Rem oWin1.setPosSize .X, .Y, nWidthHalved, .Height * 2, 15
oWin1.setPosSize .X, .Y, nWidthHalved + nRemainder, .Height * 2, 15
End With
oDisp.executeDispatch(.frame, ".uno:NewWindow", "", 0, Array())
End With
' 2nd Controller
With oDoc.CurrentController
oWin2 = .Frame.ContainerWindow
oWin2.IsMaximized = False
Wait 100
With oPosSize
Rem oWin2.setPosSize .X + nRemainder + nWidthHalved, .Y, nWidthHalved, .Height * 2, 15
oWin2.setPosSize .X + nWidthHalved, .Y, nWidthHalved + nRemainder, .Height * 2, 15
End With
.ActiveSheet = oDoc.Sheets(1)
Call ActivateCell(.ActiveSheet.getCellByPosition(0, 1))
End With
oWin1.toFront
Exit Sub
HandleErrors:
Msgbox "Error " & Err & " in line " & Erl & ": " & Error _
, MB_ICONEXCLAMATION, "macro:ArrangeWindowsVertical"
End Sub
Sub ActivateCell(oCell As Object)
Dim oRanges As Object
With ThisComponent
.CurrentController.select(oCell)
' NOTE: Same with .SheetCell or .SheetCellRange doesn’t work.
oRanges = .createInstance("com.sun.star.sheet.SheetCellRanges")
' Remove the highlight by passing the empty range collection.
.CurrentController.select(oRanges)
End With
End Sub
Well, I’m a perfectionist, so I took into account one pixel lost from division (nRemainder).
My screen width is 1853 = 926 + 1 + 926. OS Linux makes so: 927 + 927, with an overlap of 1 pixel in the middle of the screen. However, the windows are glued (stuck together) there.