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