In VBA Variable als [Name]-Bereich auslesen

Hallo ihr Excel-Spezis,

heute mal eine echte Herausforderung für euch wie ich hoffe :wink:

Generell geht es um das Arbeiten mit der ‚Name‘-Definition Funktion von Excel (Menü: „Einfügen“ - „Name“ - „Defnieren“). Den Feld-Namen möchte ich allerdings mittels einer Variablen in VBA ansprechen.

Also, ich habe mittels VBA einem Zellenbereich einen Namen zugewiesen. Das ganze funktioniert über Knopfdruck und sieht wie folgt aus:

Private Sub bu\_UpdateConsolidation\_Click()
' Variable definieren, aus denen sich die Definition 
' des Namensbereichs zusammensetzt
Dim varWeekSelection, weekSelectArea As String

' [fieldWeekSelection] ist ein bereits definierter Feld-Name
' im Tabellenblatt. Dessen Inhalt wird in der Variable varWeekSelection 
' gespeichert.
varWeekSelection = [fieldWeekSelection].Value

' ZIEL ist es, eine Formel in einen "benannten" Tabellenbereich, 
' der über die unten stehenden Befehle "benannt" wird zu schreiben. 
weekSelectArea = "=HoursView!" ' Name eines Tabellenblattes

' Zusammenkettung des Bereichs, der mittels der Name-Funktion 
' definiert wird
weekSelectArea = weekSelectArea & Cells(12, 27).Address & ":"
weekSelectArea = weekSelectArea & Cells(61, 27).Address

' Erzeugen des Namenbereichs "HoursView!$AA$12:blush:AA$61"
ActiveWorkbook.Names.Add Name:=varWeekSelection, RefersTo:=weekSelectArea

' SO, HIER ist nun der Knackpunkt! Normalerweise könnte ich den 
' Namens-Bereich, den ich mit Werten befüllen will z.B. mit eckiger
' Klammer und Name des Bereichs ansprechen (z.B. [NameArea].Formula...)
' ABER ich möchte hierzu die Variable varWeekSelection verwenden!
varWeekSelection.Formula = "=IF(...)"
' NUR schlägt dieser Befehl leider fehl :frowning:
' Excel ließt den Variablen-Namen nicht als [Name] aus. 
' Kennt jemand eine Möglichkeit, dass Excel die Variable als [Name] 
' ausließt?

End Sub

Hat vielleicht von euch jemand einen hilfreichen Tipp für mich.
Besten Dank schon mal im Voraus.

schau mal da nach , eval ist wohl was du willst /t/vba-code-als-variable-ausfuehren/555851

’ SO, HIER ist nun der Knackpunkt! Normalerweise könnte ich
den
’ Namens-Bereich, den ich mit Werten befüllen will z.B. mit
eckiger
’ Klammer und Name des Bereichs ansprechen (z.B.
[NameArea].Formula…)
’ ABER ich möchte hierzu die Variable varWeekSelection
verwenden!
varWeekSelection.Formula = „=IF(…)“

Hi Mario,
ich kam da auf keinen grünen Zweig, habe auch Evaluate durch Rakon angeregt ausprobiert, mit eckigen Klammern geht es nicht, habe da auch wo anderst nachgefragt.

Nimm Range(), dann geht es.

Und, als ich nachfragte hat „Rudi“ auch netterweise gleich was getestet, eckige Klammern sind langsamer als Cells():

*******************************
for i=1 to 5000
[a1]=pi*i
[a1]=sqr[a1]
next

dauert bei mir ca. 0,7 Sekunden länger als

for i=1 to 5000
cells(1,1)=pi*i
cells(1,1)=sqr(cells(1,1))
next
*********************************
Klar, ich weiß jetzt nicht welche CPU usw. aber dies jetzt hochgerechnet auf 1 Million Zeilen bei XL2007 macht schon was aus *find*

Also laß die eckigen Klammern einfach weg.

Gruß
Reinhard

Hallo Reinhard,

danke für die Hinweise. ABER(!) Range hat leider (in meinen Augen) den Nachteil, dass sich der Bereich, der z.B. mit Werten befüllt werden soll in dem GLEICHEN Sheet angezeigt werden muss, dass gerade aktiv ist. Ich kann also kein Range auf das Sheet2 machen, wenn gerade das Sheet1 aktiv ist, ohne in das Sheet2 selbst reinzugehen.

Ich möchte allerdings nicht extra in das Sheet reinspringen, das geändert werden soll, um darin die Zellen zu befüllen. Statt dessen möchte ich direkt aus irgendeinem Tabellenblatt die Werte in den definierten Namensraum eintragen. Der [Name]-Befehl ist, im Gegensatz zu Range in der Lage. Allerdings kenne ich die Syntax nicht, um mit [Name] eine Variable auszulesen… Das ist das Problem.

schau mal da nach , eval ist wohl was du willst
/t/vba-code-als-variable-ausfuehren/555851

Na das ist doch mal ein hilfreicher Hinweis :smile:
In VBA heißt der Befehl eval übrigends Evaluate().

Also, hier die Auflösung wens interessiert:

Sub Method1()
VariableName = "Namensraum"
MyArea = "='Sheet2'!A1:A20"
ActiveWorkbook.Names.Add Name:=VariableName, RefersToR1C1:=MyArea
Evaluate(VariableName).Value = "A" 
End Sub

Schönen Tag noch…