Aktualisieren von definierten Namen (Bereichen)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Aktualisieren von definierten Namen (Bereichen)

Re: Aktualisieren von definierten Namen (Bereichen)

von Karolus » So, 11.12.2016 22:49

Hallo
HKönig hat geschrieben:Ja, besten Dank. Es ist ja wirklich einfach, und tut was es soll. Mir fehlt einfach noch der richtige Durchblick. Ich war mal auf einer Seite, da wurden die Zusammenhänge der Klassen grafisch dargestellt. Finde das aber nicht mehr!

Viele Grüße
Helmut
Meinst du zufällig http://api.libreoffice.org/docs/idl/ref ... anges.html

Re: Aktualisieren von definierten Namen (Bereichen)

von HKönig » So, 11.12.2016 11:09

Ja, besten Dank. Es ist ja wirklich einfach, und tut was es soll. Mir fehlt einfach noch der richtige Durchblick. Ich war mal auf einer Seite, da wurden die Zusammenhänge der Klassen grafisch dargestellt. Finde das aber nicht mehr!

Viele Grüße
Helmut

Re: Aktualisieren von definierten Namen (Bereichen)

von Toxitom » Sa, 10.12.2016 18:30

Hallo HKönig,

falls Du es dennoch per Makro machen möchtest:

Der Code ist viel einfacher:

Code: Alles auswählen

sub chgCellRanges(LastRow)
'Definierte ZellBereiche an neue Größe anpassen
  dim oRanges, oCellRange, oRefCells, oRefAdr as object
  dim iEndRow as long
  dim sAdr as string
 
  oRanges    = oDocTN.namedRanges
  oCellRange = oRanges.getByName("Loeschen_T1")   'liefert das Objekt des Benannten Bereiches
  
  oCellRange.content = rString(oCellRange.Content,"$") + LastRow  'content liefert und setzt den Inhalt (Bereich) als String
  
  ' fertig.
  
  'oRefCells  = oCellRange.referredCells
 ' sAdr       = rString(oRefCells.absoluteName,"$") + LastRow
 ' oRefCells.setPropertyValue("AbsoluteName",sAdr)
 ' oRefAdr    = oRefCells.rangeAddress
  'iEndRow    = oRefAdr.EndRow
 ' oRefAdr.EndRow = LastRow
end sub
Alle anderen Objekte wie bspw. absoluteName oder referredCells werden intern berechnet und angepasst. Darum musst Du Dich gar nicht kümmern;)

Noch ein genereller Tipp:
Wenn Du ein Objekt aus einem Objekt extrahierst (bei Dir im Beispiel die referredCells) und innerhalb des extrahierten Objektes Eigenschaften veränderst (wie bei Dir die EndRow), dann musst Du das geänderte Objekt auch wieder zurückschreiben - das passiert nicht automatisch.

In dem Fall also:

Code: Alles auswählen

...
oRefCells  = oCellRange.referredCells
REM nun folgt die Manipulation des extrahierten Objektes 
...
oCellRange.referredCells = oRefCells   'Rückschreiben des Objektes
...
In deinem Fall hattest Du sogar zweimal ein Objekt extrahiert (2 Stufen) also müsstest Du es auch zweimal zurück schreiben. Spätestens da hättest Du eine Fehlermeldung erhalten - Objekt schreibgeschützt;)

Viele Grüße
Tom

Re: Aktualisieren von definierten Namen (Bereichen)

von F3K Total » Sa, 10.12.2016 16:52

Hallo,
warum brauchst du überhaupt ein Makro? Mit folgender Einstellung passt Calc die Bereiche selber an:
ref.png
ref.png (18.81 KiB) 4529 mal betrachtet
Gruß R

Aktualisieren von definierten Namen (Bereichen)

von HKönig » Sa, 10.12.2016 15:30

Liebe Leute,

ich habe folgendes Problem: Ich habe unter EINFÜGEN/NAMEN mehrere Bereiche festgelegt. So z.B. auch "Loeschen_T1". Diese Bereiche sind bis zu einer Ende/Summenzeile definiert. Über einen Dialog "Neuer Teilnehmer" füge ich dann einen neuen Datensatz in das Calc-Sheet ein. Dadurch verschiebt sich die Ende/Summenzeile, wodurch ich auch dort die entsprechenden Formeln um die Bereichsvergrößerung erweitere. Soweit ist alles gut.
Nun habe ich auch eben diese Bereichs-Namen definiert, die bis zu dieser Ende/Summenzeile reichen (dienen eigentlich nur zum schnellen Löschen bestimmter Datenbereiche). Nun möchte ich aber, dass auch diese Bereiche an den erweiterten Zellenbereich angepasst werden.
Nur das schaffe ich offenbar nicht. Was mache ich da falsch?

Der Code sieht dazu folgendermaßen aus:

Code: Alles auswählen

sub chgCellRanges(LastRow)
'Definierte ZellBereiche an neue Größe anpassen
  dim oRanges, oCellRange, oRefCells, oRefAdr as object
  dim iEndRow as long
  dim sAdr as string
  
  oRanges    = oDocTN.namedRanges
  oCellRange = oRanges.getByName("Loeschen_T1")
  oRefCells  = oCellRange.referredCells
  sAdr       = rString(oRefCells.absoluteName,"$") + LastRow
  oRefCells.setPropertyValue("AbsoluteName",sAdr)
  oRefAdr    = oRefCells.rangeAddress
  iEndRow    = oRefAdr.EndRow
  oRefAdr.EndRow = LastRow
end sub

function rString(pStr as string, sFind as string)
  dim iPos as integer
  
  for iPos = len(pStr) to 0 step -1
    if mid(pStr,iPos,1) = "$" then
      rString = left(pStr,iPos)
      exit function
    end if      
  next iPos
end function
rString() manipuliert die Adresse, sodass aus z.B. bei LastRow=214 aus $TN.$N$6:$AI$213 dann $TN.$N$6:$AI$214 wird, die ich in AbsoluteName dann einsetze, und dazu auch noch EndRow anpasse.

Aber wenn ich dann den Namen (im Beispiel "Loeschen_T1") wieder aufrufe, steht immer noch das Alte drinnen!? Der Bereich ist unverändert.

Viele Grüße
HKönig

Nach oben