Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Bereich für Namen ändern per VBA

Bereich für Namen ändern per VBA
04.05.2013 17:57:59
Dietmar
Hallo zusammen,
habe eine Arbeitsmappe, für die ich Namen definiert habe.
Nun muss ich für einen Namen den zugewiesenen Bereich anpassen.
Das möchte ich gerne per VBA machen. Habe aber keine Ahnung ob das geht und wenn ja wie.
Hier mal die Daten für die Beispieldatei:
Arbeitsmappe = Testdatei
Sheet für den der Bereich definiert wurde = Einnahmen
Name = Euro_Brutto
Definierter Bereich derzeit = Einnahmen!$L$14:$L$21;Einnahmen!$L$33:$L$49
Das Makro soll nun den ersten Bereich um 10 Zellen nach unten erweitern also soll der Bereich dann lauten: Verkauf_!$L$14:$L$31
Vielen Dank!
Sonnige Grüße
Dietmar aus Aachen

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
... Korrektur
04.05.2013 17:59:38
Dietmar
...
natürlich soll der neue Bereich dann lauten: Einnahmen!$L$14:$L$31
LG Dietmar

Na, ist doch nicht schwer, ...
04.05.2013 18:30:22
Luc:-?
…Dietmar;
den Namen suchen unter Mappe oder Blatt, je nachdem wie er zugeordnet ist, und dann ändern, also etwa so …
Dim wbN As Name
For Each wbN In ActiveWorkbook[.Sheets("xyz")].Names
If wbN.Name = relevName Then wbN.Value = …: Exit For
Next wbN
Der Teil in [] entfällt bei Namen der Mappe (sonst nur die []). Statt .Value kann auch .RefersTo bzw .RefersToLocal benutzt wdn.
Gruß Luc :-?

Anzeige
... was mache ich falsch?
04.05.2013 19:09:25
Dietmar
Hallo Luc,
ich habs jetzt so umgesetzt.
Der Bereich wird nun geändert, aber die Werte in diesem Bereich werden nicht berechnet.
Im Namens-Manager wird mit angezeigt, dass der Wert nun auch "Tabelle1!B2:B20" sei,
was im Sheet natürlich zu einem #Wert führt.
Was mache ich falsch?
LG Dietmar

Sub NamenAendern()
'Aendern des Namens Zahlen, bisheriger Bereich = Tabelle1!B2:B10
Dim wbN As Name
For Each wbN In ActiveWorkbook.Names
If wbN.Name = "Zahlen" Then wbN.RefersTo = "Tabelle1!B2:B20": Exit For
Next wbN
End Sub

Anzeige
AW: ... was mache ich falsch?
04.05.2013 20:27:58
Matthias
Hallo Dietmar
Warum löschst Du nicht einfach den Namen und setzt/definierst ihn neu?
Gruß Matthias

... Frage ist logisch ... aber ...
04.05.2013 22:03:58
Dietmar
Hallo Matthias,
die Frage ist naürlich logisch :-)
Es ist so, dass die in Frage kommende Datei, bei der der Namensbereich zu ändern ist, von mehreren Leutchen verwendet wird, denen ich mit einem Update regelmäßig ganz bestimmte Inhalte ändere.
Es wäre ein zu großer Aufwand für mich, bei jedem einzelnen die Namensanpassung per Fernwartung vorzunehmen. Daher will ich es mit einem Makro machen :-) Mache ich immer so und klappt auch recht gut.
LG
Dietmar

Anzeige
Das meinte ich ja auch ... eben mit vba ...
04.05.2013 22:24:02
Matthias
Hallo Dietmar
Ist der alte Bereich "$L$14:$L$21,$L$33:$L$49"
so kannst Du doch auch per Makro den Bereich neu definieren, ich meinte das nicht händisch
Sub Dietmar()
On Error Resume Next
ActiveWorkbook.Names("Euro_Brutto").Delete
Sheets("Einnahmen").Range("$L$14:$L$31,$L$33:$L$49").Name = "Euro_Brutto"
End Sub
Gruß Matthias

Anzeige
STARK!
04.05.2013 23:22:19
Dietmar
Hallo Matthias,
herzlichen Dank!
Sieht wirklich einfach aus ... wenn man weiß wie es geht :-)
VG Dietmar

Löschen ist überflüssig
05.05.2013 12:00:09
Rudi
Hallo,
Sub Dietmar()
Sheets("Einnahmen").Range("$L$14:$L$31,$L$33:$L$49").Name = "Euro_Brutto"
End Sub

reicht.
Gruß
Rudi

Anzeige
besten Dank ...
05.05.2013 20:57:09
Dietmar
Hallo Rudi,
herzlichen Dank!
Das ist ja klasse!
LG
Dietmar

Deiner Frage war nicht zwingend zu ...
05.05.2013 14:20:35
Luc:-?
…entnehmen, dass der neue Namensinhalt nun statt Einnahmen!$L$14:$L$21;Einnahmen!$L$33:$L$49 Einnahmen!$L$14:$L$31;Einnahmen!$L$33:$L$49 sein sollte, Dietmar;
warum du dann jetzt Tabelle1!B2:B20 verwendet hattest, ist mir schleierhaft. Matthias hat dann das gemacht, was du hier schon hättest tun sollen, auch ganz ohne vorheriges Löschen.
Der PgmZyklus in meinem Bsp sollte übrigens nur sicherstellen, dass der Name auch wirklich existiert. Entsprd ausgebaut hätte so auch nach einem Namensbestandteil über alle Namensbezugsmöglichkeiten gesucht wdn können, falls nicht genau bekannt wäre, wie der Name exakt lautet u/o wie er zugeordnet ist. Ist hingg alles bekannt, erübrigt sich das natürlich.
Gruß + schöSo, Luc :-?

Anzeige
... ok ...
05.05.2013 21:01:02
Dietmar
Hallo Luc,
vielen Dank.
Werde beim nächsten Mal etwas sorgfältiger formulieren.
Wünsche Dir noch einen schönen Rest-Sonntag :-)
LG
Dietmar

Wußte ich auch noch nicht ...
05.05.2013 21:16:52
Matthias
Hallo alle zusammen (Rudi, Luc, Dietmar)
... das man den Namen nicht löschen muss.
Aber das ist das Schöne am Forum, man gibt und nimmt.
und ich habe jetzt wieder was gelernt.
Danke
Gruß Matthias
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Bereich für Namen ändern per VBA


Schritt-für-Schritt-Anleitung

Um den Bereich eines benannten Namens in Excel per VBA zu ändern, folge diesen Schritten:

  1. Öffne die Excel-Arbeitsmappe, die den benannten Bereich enthält.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.

  4. Füge den folgenden VBA-Code ein:

    Sub BereichAendern()
       On Error Resume Next
       ActiveWorkbook.Names("Euro_Brutto").Delete
       Sheets("Einnahmen").Range("$L$14:$L$31,$L$33:$L$49").Name = "Euro_Brutto"
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro über Entwicklertools > Makros aus und wähle BereichAendern.

Das Makro löscht den alten Namen und definiert den neuen Bereich.


Häufige Fehler und Lösungen

  • Fehler: Der neue Bereich wird nicht berechnet.

    • Lösung: Stelle sicher, dass der neue Bereich korrekt definiert ist. Verwende RefersTo anstelle von Value, um den Bereich korrekt zu ändern.
  • Fehler: Der Name existiert nicht.

    • Lösung: Überprüfe, ob der Name im Namensmanager korrekt angezeigt wird. Du kannst die vorhandenen benannten Bereiche mit ActiveWorkbook.Names auslesen.

Alternative Methoden

Eine Alternative zum Löschen und Neudefinieren des Namens ist die direkte Änderung des Namens ohne Löschung:

Sub NamensbereichAendern()
    Sheets("Einnahmen").Range("$L$14:$L$31,$L$33:$L$49").Name = "Euro_Brutto"
End Sub

Diese Methode ist effizienter, da sie den benannten Bereich direkt ändert, ohne den Namen vorher zu löschen.


Praktische Beispiele

Hier sind einige praktische Beispiele, um die Verwendung des Namensmanagers in VBA zu verdeutlichen:

  1. Benannten Bereich anzeigen:

    Sub BenannteBereicheAnzeigen()
       Dim wbN As Name
       For Each wbN In ActiveWorkbook.Names
           Debug.Print wbN.Name & ": " & wbN.RefersTo
       Next wbN
    End Sub
  2. Namensfeld ändern:

    Sub NamensfeldAendern()
       ActiveWorkbook.Names("Zahlen").RefersTo = "Tabelle1!B2:B20"
    End Sub

Tipps für Profis

  • Nutze das On Error Resume Next, um Fehler zu ignorieren, wenn ein Name nicht existiert.
  • Verwende RefersToLocal, um den Bezug in der lokalisierten Sprache zu erhalten.
  • Überprüfe regelmäßig die benannten Bereiche, um sicherzustellen, dass sie aktuell und korrekt sind.

FAQ: Häufige Fragen

1. Wie finde ich den Namen eines benannten Bereichs?
Du kannst den Namensmanager über Formeln > Namensmanager öffnen, um alle benannten Bereiche anzuzeigen.

2. Was passiert, wenn ich einen benannten Bereich lösche?
Der Bezug auf diesen Bereich wird in allen Formeln ungültig, die diesen Namen verwenden.

3. Kann ich den Namen eines benannten Bereichs einfach ändern?
Ja, das ist möglich, ohne den gesamten Bezug zu löschen. Verwende dazu die Methode zur direkten Änderung des Namens.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige