LO Macro: wie lösche oder re-definiere ich NamedRanges

Hello again,

mit Pitonyaks code [Listing 423] kann ich NamedRanges setzen, die auch nach Ablauf des Macros 'dableiben':

Sub AddNamedRange()
   Dim oRange ' The created range.
   Dim oRanges ' All named ranges.
   Dim sName$ ' Name of the named range to create.
   Dim oCell ' Cell object.
   Dim s$
   sName$ = "MyNRange"
   oRanges = ThisComponent.NamedRanges
   If NOT oRanges.hasByName(sName$) Then
     Dim oCellAddress As new com.sun.star.table.CellAddress
     oCellAddress.Sheet = 0 'The first sheet.
     oCellAddress.Column = 1 'Column B.
     oCellAddress.Row = 2 'Row 3.
     s$ = "$Sheet1.$B$3:$D$6"
     oRanges.addNewByName(sName$, s$, oCellAddress, 0)
   End If
   oRange = ThisComponent.NamedRanges.getByName(sName$)
   oCell = oRange.getReferredCells().getCellByPosition(0,0)
   Print oCell.getString()
End Sub

Aber, was mach ich, wenn ein NamedRange solchen Namens schon existiert und womöglich falsch (weil alt) dimensioniert ist? Wie kann ich den löschen oder ändern?

Es gelingt mir nicht einmal einen existierenden NamedRange im Namenfeld des Sheets selber löschen, d.h., ich kann auch nicht mit Macro-Recording mal eine Lösung erzeugen.

Herzlichen Dank schon mal,
Gooly

Hello again,

mit Pitonyaks code [Listing 423] kann ich NamedRanges setzen, die auch nach Ablauf des Macros 'dableiben':

Sub AddNamedRange()
  Dim oRange ' The created range.
  Dim oRanges ' All named ranges.
  Dim sName$ ' Name of the named range to create.
  Dim oCell ' Cell object.
  Dim s$
  sName$ = "MyNRange"
  oRanges = ThisComponent.NamedRanges
  If NOT oRanges.hasByName(sName$) Then
    Dim oCellAddress As new com.sun.star.table.CellAddress
    oCellAddress.Sheet = 0 'The first sheet.
    oCellAddress.Column = 1 'Column B.
    oCellAddress.Row = 2 'Row 3.
    s$ = "$Sheet1.$B$3:$D$6"
    oRanges.addNewByName(sName$, s$, oCellAddress, 0)
  End If
  oRange = ThisComponent.NamedRanges.getByName(sName$)
  oCell = oRange.getReferredCells().getCellByPosition(0,0)
  Print oCell.getString()
End Sub

Aber, was mach ich, wenn ein NamedRange solchen Namens schon existiert und womöglich falsch (weil alt) dimensioniert ist? Wie kann ich den löschen oder ändern?

Hallo hier spricht dein privat-Programmierer Frieder :slight_smile:
Hier ein Makro von mir , mit dem du Benannte Bereiche wieder Löschen kannst.:
Sub RemoveNamedRange()
   Dim oRanges ' All named ranges.
   Dim sName$ ' Name of the named range to create.
   sName$ = "MyNRange"
   oRanges = ThisComponent.NamedRanges
   If oRanges.hasByName(sName$) Then
       oRanges.removeByName(sName$)
       MsgBox "Der Zellbereich " & sName$ & " wurde entfernt." ,0 , "Hallo"
   End If
End Sub

Es gelingt mir nicht einmal einen existierenden NamedRange im Namenfeld des Sheets selber löschen, d.h., ich kann auch nicht mit Macro-Recording mal eine Lösung erzeugen.

Den Makrorekorder solltest du dir sowieso schnell abgewöhnen, wenn du zuverlässige Makros haben willst.

Gruß Frieder

Hallo Frieder,

Hier ein Makro von mir , mit dem du Benannte Bereiche wieder Löschen
kannst.:
Sub RemoveNamedRange()
Dim oRanges ' All named ranges.
Dim sName$ ' Name of the named range to create.
sName$ = "MyNRange"
oRanges = ThisComponent.NamedRanges
If oRanges.hasByName(sName$) Then
oRanges.removeByName(sName$)
MsgBox "Der Zellbereich " & sName$ & " wurde entfernt." ,0 , "Hallo"
End If
End Sub

Ich würde mich gerne in den Thread einklinken bzw. ich habe eine Verständnisfrage:

Ich verstehe nicht, was ""MyNRange" bedeutet.
Wo ist "MyNRange" definiert?
Wo wird "MyNRange" wieder verwendet bzw. für was wird "MyNRange" überhaupt verwendet?

Gruß

Jochen

Hallo Frieder!

Vielen, vielen Dank meinem 'Privatprogrammierer', ich werd's gleich probieren.

Aber zu Dir Jochen, in Frieders Code ist MyNRange ein von ihm gewählter Name für eine Zellauswahl. Du solltest diesen nach dem Lauf des Makros in einer Tabelle oben links im 'Namenfeld' (Untendreieck anklicken und die Optionen fallen 'raus').
So kann Du immer wieder ganz schnell erneut diesen Zellbereich auswählen z.B. um zu sortieren, löschen, ...

LG, Gooly

Hallo Jochen

"MyNRange" ist in meinem Makro ein benannter Zellbereich, der mit dem Name: MyNRange .
Mein Makro Löscht einen solche Zellbereich in einem Calc Dokument.
Benannte Zellbereiche können entweder für Formeln, oder aber für Makros verwendet werden.

Gruß
Frieder

Hallo Gooly
Wenn du all Benanten bereiche Löschen möchtest, so hab ich hier noch ein anderes Makro.:

Sub RemoveAllNamedRange
Dim oRanges As Object
oRanges = ThisComponent.NamedRanges
n=oRanges.getCount-1
  For i=0 To n
        sName$=oRanges(0).Name
     oRanges.removeByName(sName$)
   Next
End Sub

Gruß Frieder