Frage stellen
0

Mehrere Zellbereiche beim "Doppelklick"

gefragt 2020-02-06 20:40:07 +0100

H-J-B Gravatar-Bild

updated 2020-02-06 21:34:41 +0100

Lupp Gravatar-Bild

Hallo zusammen,

Ich möchte mit Hilfe des Doppelklick, in mehreren Zellbereichen, ein "X" eintragen.

sub schreib_x(ereignis)
oDoc=thiscomponent
oBereich = ereignis.Spreadsheet.getCellRangeByName("F27:AP550;AR27:BC550")
'oBereich=oDoc.Jahr.getCellRangeByName("b3:f150;j3:av150")
if oBereich.queryIntersection(ereignis.rangeaddress).count=0 then exit sub
If ereignis.String = "X" Then
   ereignis.String = ""
Else
   ereignis.String = "X"
End If
end sub

Wenn ich nur einen Bereich angebe, funktioniert das Makro. Sobald ich den zweiten Bereich hinzufüge erscheint beim Ausführen eine Fehlermeldung: Bildbeschreibung

Was muss ich ändern? Vielleicht auch noch warum.

Danke und einen schönen Abend HJB

(Für bessere Lesbarkeit geringfügig editiert durch @Lupp.
Vorformatierten Text kann man nicht kursiv machen.)

Bearbeiten Tags ändern Melden schließen vereinen löschen

1 Antwort

1

geantwortet 2020-02-06 22:27:55 +0100

Lupp Gravatar-Bild

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
Bearbeiten Melden löschen Link mehr
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2020-02-06 20:40:07 +0100

Angesehen: 16 Mal

Aktualisiert: Feb 06