Microsoft Excel

Herbers Excel/VBA-Archiv

Range Bezüge in VBA von fix auf relativ umstellen | Herbers Excel-Forum


Betrifft: Range Bezüge in VBA von fix auf relativ umstellen von: Andreas Hanisch
Geschrieben am: 07.01.2010 20:57:36

Hallo Herber Fans,

ich ermittle einen Range:

Set rgGPTMember_Source = Intersect(rgGPTMemberAugmentation.Rows(1).Find("GPT Member", LookIn:=xlValues, LookAt:=xlWhole).EntireColumn, rgGPTMemberAugmentation)

Dessen Adresse lautet dann: $G$5:$G$34

Dieser Range wird nun in eine Namensdefinition geschrieben:
ActiveWorkbook.Names.Add Name:="rgGPT", RefersTo:=rgGPTMember_Source

Die Namensdefinition referenziert also auf: $G$5:$G$34

Frage: Wie kann ich bei der Erstellung des Ranges oder beim Erstellen der Namensdefinition die fixen Bezüge in relative umwandeln. Also: G5:G34

Mir fällt nichts Schlaues ein. Ich war schon im Forum, habe aber vermutlich Tomaten auf den Augen.

Vielen Dank für Eure Hilfe.

Grüße, Andreas Hanisch

  

Betrifft: rgGPTMember_Source.Address(0,0) _oT von: NoNet
Geschrieben am: 07.01.2010 21:06:12

_oT = "ohne Text"


  

Betrifft: AW: rgGPTMember_Source.Address(0,0) _oT von: Andreas Hanisch
Geschrieben am: 07.01.2010 21:12:44

Hi NoNet,

Ich nehme an, Du meintest, die Zeile solle dann so aussehen:

ActiveWorkbook.Names.Add Name:="rgGPT", RefersTo:=rgGPTMember_Source.Address(0, 0)

Die Namensdefinition in der Mappe referenziert dann aber auf: ="G5:G34"
Und das ist ein String und korrekter Bezug, mit dem ich weiterarbeiten kann.

Noch eine Idee?

Grüße, Andreas


  

Betrifft: Range(rgGPTMember_Source.Address(0,0)) von: NoNet
Geschrieben am: 07.01.2010 21:16:38

Hallo Andreas,

Mit etwas Phantasie kann man diesen String einfach in eine Range()-Anweisung einfügen ;-) :

ActiveWorkbook.Names.Add Name:="rgGPT", RefersTo:=Range(rgGPTMember_Source.Address(0,0))

Gruß, NoNet


  

Betrifft: AW: Range(rgGPTMember_Source.Address(0,0)) von: Andreas Hanisch
Geschrieben am: 07.01.2010 21:38:35

Hi NoNet,

erklär mich bitte nicht für bescheuert... gut es ist schon spät. Aber es klappt leider nicht. Anbei ein simples Beispiel:

https://www.herber.de/bbs/user/67062.xls

Im Code habe ich Kommentare hinterlegt. Der Debug.Print einer Adresse führt zum korrekten Verhältnis von Row/ Column Absolut. Aber wenn ich es über Range(Adress String) in die Namensdefiniton packe, habe ich wieder zwei Dollarzeichen.
Das Beispiel ist für eine Zelle. Genauso wie ich es brauche. Aber für einen ganze Range müßte es ja analog sein.

Vielen Dank, wenn Du noch einmal einen Blick reinwirfst.


Grüße, Andreas


  

Betrifft: Reative Namensdefinition - die nächste von: NoNet
Geschrieben am: 07.01.2010 22:29:14

Hall Andreas,

sorry - nein : Ich möchte niemanden für "bescheuert" erklären - tut mir leid, wenn das so rüberkam, war nicht meine Absicht :-(( !!

Mein Lösungsvorschlag war nicht ganz korrekt, da Excel mit RefersTo:=... den Bezug immer in absolute Adressen umwandelt.
Villeicht hilft dir jedoch folgende Syntax mit RefersToR1C1:=... weiter :

ActiveWorkbook.Names.Add Name:="clPID_2", RefersToR1C1:="=" & clPID_2.Address(0, 0, 0)

Das bewirkt eine relative Namensdefinition, was dann aber auch bedeutet, dass sich dieser Name in jeder Zelel auf einen unterschiedlichen (absoluten) Bereich bezieht (das wolltest Du vermutlich aber auch, oder ?) !

Gruß, NoNet


  

Betrifft: AW: Reative Namensdefinition - die nächste von: Andreas Hanisch
Geschrieben am: 08.01.2010 13:08:04

Hi NoNet,

das rockt!
Keine Angst. Das mit dem für bescheuert erklären war nicht ganz ernst gemeint :). Mir ist schon selber klar, daß bei solchen Detailfragen manchmal einfach der Knoten im Kopf nicht platzt. Es ist in einem solchen Fall wenig selbstironisch gemeint.
Ohne Deine Hilfe wäre ich aber vermutlich wirklich nicht drauf gekommen. Auf alle Fälle klappt es nun und ist genau das, was ich brauche.
Dir vielen Dank für Deine Hilfe!

Habe ein gutes Wochenende, Grüße aus Berlin, Andreas.


Beiträge aus den Excel-Beispielen zum Thema "Range Bezüge in VBA von fix auf relativ umstellen"