Excel 2003: Dyn.Namen Makro

Hakaori

Ensign
Registriert
Mai 2009
Beiträge
225
Hallo Leute,

mal wieder ein verzwacktes Problem.
Ich möchte gerne dynamische Namen per Makro erzeugen und habe in Spalte B1 die Namen
der zu erstellenden Namen und in Spalte G1 die Funktion, die dieser Name haben soll.

Code:
Sub DynamicNames()

  Dim LastCol As Long, _
      LabelRow As Long, _
      Col As Long
  Dim sName As String
  Dim c As Range
  Dim Sht As String

  'assign row and column parameters
  '**adjust for the row containing your headings
  LabelRow = 1
  LastCol = Range("IV1").End(xlToLeft).Column

  'grab sheet name
  Sht = "'" & ActiveSheet.Name & "'"

  For Each c In Range(Cells(LabelRow, 1), Cells(LabelRow, LastCol))
    Col = c.Column
    sName = c.Value
    If Len(sName) > 1 Then
      'replace spaces with underscores
      sName = Replace(sName, " ", "_", 1) 
      'create the name
      ActiveWorkbook.Names.Add Name:=sName, RefersToR1C1:= _
        "=OFFSET(" & Sht & "!R2C" & Col & ",0,0,COUNTA(" & Sht & "!C" & Col & ")-1,1)"
    End If
  Next c
End Sub

Die folgende Funktion habe ich im Internet gefunden zum Thema dynamische Namen.
Sie funktioniert, aber ich krieg es nicht hin, dass er die Zeilen A2 - A17 mit den Namen / Funktionen
in B2 und G2 befüllt.

Hat jemand eine Idee?


Mein eigener Versuch sah ganz anders aus und bringt einen Fehler leider:

Code:
Sub Dyn_Namen_erstellen()

    Dim rCell As Range, DName As String, Funktion As String
     
    For Each rCell In Worksheets("Tabelle1").Range("A2:A17")
     
    DName = rCell.Offset(0, 1).Value
    Funktion = rCell.Offset(0, 6).Value
    
    
      ActiveWorkbook.Names.Add Name:=DName, RefersToR1C1:= _
        Funktion

    Next rCell
     
    End Sub

Liebe Grüße
 
Zuletzt bearbeitet:
Ich hoffe dein Problem richtig verstanden zu haben...

Dein "Dyn_Namen_erstellen" macht nichts anderes als die Namen und den Bezug zur Formel/Funktion zu definieren (vgl. "Namens-Manager", so heißt das zumindest im Excel 2010), sodass du später über den Namen die Formel/Funktion wieder aufrufen/verwenden kannst. Ich denke das ist dir soweit klar.

Im zweiten Step musst du dann eigentlich nur noch den Namen in A2-A17 zuweisen, damit die Formel/Funktion gezogen wird.

Ich hab's jetzt mal so gemacht...


Code:
Sub Dyn_Namen_erstellen()
Dim rCell As Range, DName As String, Funktion As String

For Each rCell In Worksheets("Tabelle1").Range("B1:B99")
    DName = rCell.Offset(0, 0).Value
    Funktion = rCell.Offset(0, 5).Value
    
    If DName <> "" Then
        ActiveWorkbook.Names.Add Name:=DName, RefersToR1C1:=Funktion
    End If
Next rCell

End Sub

Sub Namen_zuweisen()
Dim rCell As Range, DName As String
DName = Range("B2")

For Each rCell In Worksheets("Tabelle1").Range("A1:A17")
    rCell.Value = "=" & DName
Next rCell

End Sub

Sub Start()
    Dyn_Namen_erstellen
    Namen_zuweisen
End Sub
 
Danke für deinen Post. Leider kriege ich eine Fehlermeldung mit deinem Makro,
nämlich bei: ActiveWorkbook.Names.Add Name:=DName, RefersToR1C1:=Funktion
Müsste man nicht auch noch von Zell Bezügen auf Makrobezüge (Row und Column)
umwandeln?

Code:
    Sub Dyn_Namen_erstellen()
    Dim rCell As Range, DName As String, Funktion As String
     
    For Each rCell In Worksheets("Tabelle1").Range("B2:B99")
    DName = rCell.Offset(0, 0).Value
    Funktion = rCell.Offset(0, 5).Value
    If DName <> "" Then
    ActiveWorkbook.Names.Add Name:=DName, RefersToR1C1:=Funktion
    End If
    Next rCell
     
    End Sub
     
    Sub Namen_zuweisen()
    Dim rCell As Range, DName As String
    DName = Range("B2")
     
    For Each rCell In Worksheets("Tabelle1").Range("B2:B17")
    rCell.Value = "=" & DName
    Next rCell
     
    End Sub
     
    Sub Start()
    Dyn_Namen_erstellen
    Namen_zuweisen
    End Sub
 
Code:
Sub Namen_zuweisen()
Dim rCell As Range, DName As String
DName = Range("B2")
     
For Each rCell In Worksheets("Tabelle1").Range("B2:B17")
    rCell.Value = "=" & DName
Next rCell

Wieso hast du hier jetzt Spalte B stehen? Du willst doch, dass von A2-A17 die Werte auf die bzw. den zuvor definierten Namen gesetzt wird?
 
Die Namen für die Bereichsnamen stehen in Spalte B, nicht in Spalte A. Hab ich was falsch verstanden?
 
Ja, die Bereichsnamen stehen in B.
Aber ich glaube wir reden aneinander vorbei bzw. ich verstehe nicht was du möchtest. Ein konkretes Beispiel wäre hilfreich. Meins ist im Anhang. Anhang anzeigen Mappe1.zip
 
Ah danke vielmals dafür.

Ich kriege einen "400" Fehler, wenn ich das Makro mit folgender Funktion in Spalte G starte.

"=INDEX(Argentinien!$GC$24:$GM$85;Argentinien!$B$12;Argentinien!$B$11-2007):INDEX(Argentinien!$GC$24:$GM$85;Argentinien!$B$13;Argentinien!$B$11-2007)"

Kommt der Fehler durch die Bezüge? D.h. weil ich nicht vorher auf R8C9 gewandelt habe? Gibt es dafür
einen einfacheren weg als per Hand?

Liebe Grüße
 
Zurück
Oben