Ich kann mir nicht vorstellen, wie man mit einer Mehrfachselektion das Doppelklickereignis produzieren könnte.
Wie auch immer man die Subroutine aufruft:
-1- Wenn die CurrentSelection eines Rechenblattdokuments bearbeitet werden soll, nuss man bedenken, dass sie sich grundsätzlich anders verhält als im Writer: Sie ist nicht immer ein Objekt, das mehrere Ranges enthalten kann (im Rechenblatt: SheetCellRanges
; beachte den Plural!), sondern nur wenn tatsächlich eine Multi-Selektion vorliegt. Andernfalls wird sie als einzelner SheetCellRange
(Singular!) übergeben, das allerdings auch, wenn dazu nur eine einzelne Zelle gehört. Wenn beides zulässig sein soll, muss man also entweder die Unterscheidung durchziehen, oder vorab aus dem einzelnen SheetCellRange
ein einelementiges SheetCellRanges
-Objekt erzeugen.
-2- Die Zelleigenschaft .String
ist nicht als “Gruppeneigenschaft” eines Zellbereichs handhabbar. Du musst entweder jede einzelne Zelle (SheetCell
) als Objekt greifbar machen und die Zuweisung an cell.String
vornehmen, oder mit der Arrayeigenscahft .DataArray
von Zellbereichen arbeiten. Auch im zweiten Fall ist freilich eine eigene Zuweisung je Element nötig.
Sub onWhatever()
REM Working on the currentSelection assumed to be a selection (probably multiselection) of cell rabges.
doc = ThisComponent
cSel = doc.CurrentSelection
If cSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
rgs = cSel
Else
If cSel.supportsService("com.sun.star.sheet.SheetCellRange") Then
rgs = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
rgs.addRangeAddress(cSel.RangeAddress, False)
Else
Exit Sub
End If
End If
For Each rg In rgs
'rg.String = "X" REM Cannot work as .String only is accesible for single cells.
With rg.RangeAddress
For c = .StartColumn To .EndColumn
For r = .StartRow To .EndRow
crCell = rg.spreadsheet.getCellByPosition(c, r)
crCell.String = "X"
Next r
Next c
End With
Next rg
End Sub
Sub onWhateverSecond()
REM Working on the currentSelection assumed to be a selection (probably multiselection) of cell rabges.
doc = ThisComponent
cSel = doc.CurrentSelection
If cSel.supportsService("com.sun.star.sheet.SheetCellRanges") Then
rgs = cSel
Else
If cSel.supportsService("com.sun.star.sheet.SheetCellRange") Then
rgs = doc.createInstance("com.sun.star.sheet.SheetCellRanges")
rgs.addRangeAddress(cSel.RangeAddress, False)
Else
Exit Sub
End If
End If
For Each rg In rgs
'rg.String = "X" REM Cannot work as .String only is accesible for single cells.
rgDA = rg.getDataArray
u1 = Ubound(rgDA)
u2 = Ubound(rgDA(0))
For r = 0 To u1
For c = 0 To u2
rgDA(r)(c) = "y"
Next c
Next r
rg.setDataArray(rgDA)
Next rg
End Sub