Hallo,

> -----Original Message-----
> From: Wolfgang Jäth [mailto:jawo.ml.hams...@arcor.de] 
> Sent: Friday, June 26, 2020 6:56 PM
> To: users-de@openoffice.apache.org
> Subject: [Basic] getCellRangeByName & Teilbereich ausschließen
> 
> Hi,
> 
> ich hab folgendes Problemche: In einem Makro möchte ich einen 
> bestimmten
> Zellbereich löschen, davon jedoch ein paar Zellen innerhalb dieses
> Bereiches ausnehmen. Bislang hab ich folgendes:
> 
> | Dim oSheet, oCellRange As Object
> | oSheet = thisComponent.getCurrentController.getActiveSheet
> | oCellRange = oSheet.getCellRangeByName ("M2:X13")
> | oCell.clearContents (com.sun.star.sheet.CellFlags.VALUE +
> com.sun.star.sheet.CellFlags.STRING)
> 
> Das klappt soweit auch, nur dass ich halt gerne den Inhalt 
> des Bereichs
> M2:O4 (statische Informationen) stehen lassen möchte.
> 
> Bei der direkten Bedienung kann ich ja auch den Bereich M2:X13 mit der
> Maus mmarkieren, und dann mit gedrückter Tastenkombination STRG-SHIFT
> [1] den Bereich M2:O4 wieder aus der Markierung heraus 
> nehmen. Genau so
> was stelle ich mir vor, nur im Makro. Geht das, bzw. kann mir jemand
> sagen, wie?

z.B. ginge:

Dim x(1)
bereiche = ThisComponent.CreateInstance("com.sun.star.sheet.SheetCellRanges")
blatt = ThisComponent.CurrentController.ActiveSheet
x(0) = "P2:X13"
x(1) = "M5:O13"
For i = LBOUND(x()) To UBOUND(x())
        
bereiche.addRangeAddress(blatt.getCellRangeByName(x(i)).getRangeAddress(), 
False)
Next i
bereiche.clearContents(com.sun.star.sheet.CellFlags.VALUE + 
com.sun.star.sheet.CellFlags.STRING)

Ich kann Dir hingegen nicht sagen, wie Du von "M2:X13" den Bereich "M2:O4" 
quasi abziehst, weil es zwar die Methode .removeRangeAddress gibt, aber es bei 
mir zu einem Fehler führt wenn ich versuche von einem CellRange-Objekt ein 
(quasi beinhaltetes) CellRange-Objekt 'abzuziehen' - augenscheinlich wird ein 
passendes CellRange*s*-Objekt erwartet.

> Als allerletzter Ausweg könnte ich mir zwar ne Lösung vorstellen, bei
> der ich den auszusparenden Bereich vorher kopiere, und nachher wieder
> einfüge,

in jedem Falle geht doch:

alle = Array("P2:X13", "M5:O13")
oSheet = thisComponent.getCurrentController.getActiveSheet
For i = 0 To 1
  oCellRange = oSheet.getCellRangeByName(alle(i))
  oCellRange.clearContents (com.sun.star.sheet.CellFlags.VALUE + 
com.sun.star.sheet.CellFlags.STRING)
Next i

schreib es so, dann ist es schön kompakt:

alle = Array("P2:X13", "M5:O13")
tcas = ThisComponent.CurrentController.ActiveSheet
For i = 0 To 1
  tcas.getCellRangeByName(alle(i)).clearContents(5)
Next i

> [1] ist etwas tricky, denn zuerst darf man nur STRG drücken, dann die
> Maustaste, dann SHIFT, und dann kan man mit der Maus 
> markieren (nur wers
> nachvollziehen möchte)

Du kannst den gewünschten Selektionsmodus auch in der Statusleiste per 
Mausklick umschalten (an der Stelle wo per Default "STD" steht)


Gruß
Jörg



---------------------------------------------------------------------
To unsubscribe, e-mail: users-de-unsubscr...@openoffice.apache.org
For additional commands, e-mail: users-de-h...@openoffice.apache.org

Antwort per Email an