Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Name einfügen.

VBA Name einfügen.
04.02.2013 09:57:30
Falk
Hallo zusammen,
folgendes Makro soll einer bestimmten Zelle eines jeden Tabellenblattes (z.B. A1) den gleichen Namen (z.B. Test1)mit dem Tabellenblattnamen (z.b. Tabelle1)geben.
Also für A1 in Tabelle1 wäre der Name dann Tabelle1_Test1, für A1 in Tabelle2 also Tabelle2_Test1.
Sub Namen_vergeben()
Dim SN As Worksheet
Dim x As Integer
x = ActiveWorkbook.Sheets.Count
For a = 1 To x
ActiveWorkbook.Worksheets(a).Select
Activesheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name &"_Test1", RefersToR1C1:= _
"Tabelle"&a&"! R1C1"
Next
End Sub
Irgendwo ist aber ein Fehler in dem Teil ReferstoR1C1 enthalten, wenn ich nämlich ReferstoToR1C1:="Tabelle1!R1C1" schreibe funktioniert das.
Und
Wenn ich Activebook verwende, gibt kommt es auch zu einer Fehlermeldung, warum? Ich brauch aber beide Versionen einmal mit Activesheet und ActiveBook.
Danke für die Hilfe im voraus ...
Gruß
Falk

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
ins blaue AW: VBA Name einfügen.
04.02.2013 10:12:24
Klaus
Hallo Falk,
a&"! R1C1"
Das Leerzeichen ist auch in deinem Code? Gehört da nicht hin.
Da du "eh" mit select arbeitest, könnte auch das funktionieren:
Activesheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name &"_Test1", RefersToR1C1:= activesheet.name & "!R1C1" 
beides ungetestet, daher noch offen.
Grüße,
Klaus M.vdT.

Anzeige
ins blaue AW: VBA Name einfügen.
04.02.2013 10:24:36
Falk
Hallo Klaus,
danke für die Antwort, bei a&"! R1C1" meckert er immer noch, warum auch immer!
Aber Deine
Activesheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name &"_Test1", RefersToR1C1:= activesheet.name & "!R1C1"
funktioniert.
Ich habe die Zeile jetzt mit Activebook angefangen, aber da funktioniert es nicht, Excel gibt mir immer Laufzeitfehler 424 Objekt erforderlich heraus ...?
Gruß
Falk

Anzeige
ins blaue AW: VBA Name einfügen.
04.02.2013 10:30:52
Klaus
Hi,
Ich habe die Zeile jetzt mit Activebook angefangen,
versteh ich nicht. Willst du sichergehen, im richtigen Workbook zu sein? Rufst du den Code aus einem anderem Workbook heraus auf?
Geraten: statt
Activesheet.Names.Add
hast du
activeworkbook.names.add
genommen? Das kann nicht gehen :-) versuch mal
activeworkbook.activesheet.names.add
a&"! R1C1" meckert er immer noch
activesheet.name & "!R1C1" funktioniert.
Ich frag wieder ganz doof: hast du das genau so im Code stehen? Um das & müssen Leerzeichen drum herum! a_&_"!R1C1"
Grüße,
Klaus M.vdT.

Anzeige
ins blaue AW: VBA Name einfügen.
04.02.2013 11:30:41
Falk
Hallo Klaus,
das unwichtige zuerst, ja ich habe das Leerzeichen beachtet, kleiner Fehler am Rande, an einer anderen Stelle war noch eins ... tja, da hat das Auge dann doch nicht so gearbeitet wie es sollte! Aber jetzt zu einem anderen Problem. Alle genannten Lösungen funktionieren, aber wenn ich jetzt mich auf die Namen beziehen mit =Tabelle1_Test1 bekomme ich den Wert Tabelle1!R1C1 zurück?
Normalerweise sollte ich doch den Zellenwert erhalten, oder?
Und wenn ich mit der Maus die Zelle markiere (Gleichheitszeichen schon gesetzt in der Zelle) dann sollte die Formel dort ja =Tabelle1_Test1 heißen und nicht =Tabelle1!A1 ...?
Im Namensmanger steht folgendes:
Name: Tabelle1_Test1
Wert: Tabelle1!R!C!
Bezieht sich auf: ="Tabelle1!R1C1"
Bereich: Tabelle1 (hier kann aber auch Arbeitsmappe stehen, hängt jetzt vom Makro ab!)
Da ist doch was grundsätzlich falsch oder?
anbei nochmal das Makro
Sub Namen_vergeben()
Dim SN As Worksheet
Dim x As Integer
x = ActiveWorkbook.Sheets.Count
For a = 1 To x
ActiveWorkbook.Worksheets(a).Select
'ActiveWorkbook.ActiveSheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name & " _
_Test1", RefersToR1C1:=ActiveSheet.Name & "!R1C1"
'ActiveSheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name & "_Test1",  _
RefersToR1C1:=ActiveSheet.Name & "!R1C1"
ActiveSheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name & "_Test1", RefersToR1C1: _
="Tabelle" & a & "!R1C1"
Next
End Sub
Gruß
Falk

Anzeige
Versteh ich nicht.
04.02.2013 11:44:31
Klaus
Hi Falk,
sorry - ich verstehe nicht was / warum du da mit den Namensmanager anstellen möchtest.
Grüße,
Klaus M.vdT.

AW: Versteh ich nicht.
04.02.2013 11:52:44
Falk
Hi Klaus,
die Info aus dem Namensmanager sind reiner informeller Natur, falls notwendig.
Es geht sich darum, dass die Namen die mit dem Makro erstellt worden sind für die einzelnen Zellen, nicht so funktionieren als wenn ich die Namen per Hand erstelle.
Also wenn ich per Hand und oben links in der Ecke für A1 den Namen Test1 eintrage und ich dann in B10 jetzt auf die Zelle A1 mich beziehe, steht in der Formel in B10 "=Test1" und in der Wert aus der Zelle A1.
Mit den aus dem Makro erstellten Namen sieht es so aus, B10 "=A1" bzw. "=Tabelle1!A1" und gibt den Wert Tabelle1!R!C!" zurück ...
Gruß
Falk

Anzeige
geht viel einfacher
04.02.2013 11:49:27
Rudi
Hallo,
Sub aaa()
Dim wks As Worksheet
For Each wks In Worksheets
wks.Cells(1, 1).Name = wks.Name & "_test1"
Next
End Sub

Gruß
Rudi

Code spricht Bände ...
04.02.2013 11:51:41
Klaus
Hallo Rudi,
nachdem ich deinen Code gesehen habe, begreife ich auch was Falk erreichen wollte :-)
Danke fürs erleuchten,
Grüße,
Klaus M.vdT.

Anzeige
man könnte natürlich auch ...
04.02.2013 12:07:30
Rudi
Hallo,
auf jedem Blatt einen lokalen Namen einfügen.
z.B. Test1 auf jedes Blatt:
Sub aaa()
Dim wks As Worksheet
For Each wks In Worksheets
wks.Cells(1, 1).Name = "'" & wks.Name & "'!test1"
Next
End Sub

Muss man dann in den Tabellen entsprechend referenzieren: =Tabelle1!test1
Gruß
Rudi

Anzeige
AW: man könnte natürlich auch ...
04.02.2013 13:35:14
Falk
Hallo Rudi,
danke für Deinen Hinweis, am Anfang hatte ich es auch so, aber da die Dateien für die ich dieses Makro verwende immer ca. 10-15 Tabellenblätter haben und auf jedem Tabellenblatt die entsprechenden Zellen (ca. 20) den gleichen Namen haben sollten und eine Differenzierung über den Tabellennamen stattfinden sollte habe ich nach einer flexiblen Lösung gesucht ...
Nochmals Danke an alle für die Hilfe
Gruß
Falk

Anzeige
AW: geht viel einfacher
04.02.2013 11:58:27
Falk
Hallo Rudi,
ja, vielen Dank für Deine Hilfe, natürlich auch die von Klaus und Danke für Deine Zeit und Nerven :-)
Rudi Dein Code funktioniert super, den nehm ich, Danke!!
Aber was ist an meinem falsch, ausser das er umständlich ist? Jetzt habe ich schon versucht durch die Netzgemeinde mir meinen Code zu stricken und fühle mich gegen die Wand gelaufen ...
Gruß
Falk
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA Namen in Excel einfügen


Schritt-für-Schritt-Anleitung

Um in Excel VBA einen Namen für eine bestimmte Zelle in jedem Tabellenblatt zu vergeben, kannst du das folgende Makro verwenden. Dieses Beispiel zeigt, wie du in jedem Blatt den Zellenwert A1 mit einem spezifischen Namen versiehst. Der Name wird als Kombination aus dem Tabellennamen und einem festen Suffix erstellt.

Sub Namen_vergeben()
    Dim SN As Worksheet
    Dim x As Integer
    x = ActiveWorkbook.Sheets.Count
    For a = 1 To x
        ActiveWorkbook.Worksheets(a).Select
        ActiveSheet.Names.Add Name:=ActiveWorkbook.Worksheets(a).Name & "_Test1", RefersToR1C1:="Tabelle" & a & "!R1C1"
    Next
End Sub

Achte darauf, dass im RefersToR1C1-Teil die Bezeichnung der Zelle korrekt angegeben ist, ohne überflüssige Leerzeichen.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler 424 - Objekt erforderlich

    • Ursache: Dieser Fehler tritt häufig auf, wenn du versuchst, auf Objekte zuzugreifen, die nicht existieren oder nicht korrekt referenziert sind. Stelle sicher, dass du ActiveWorkbook und ActiveSheet korrekt verwendest und dass das richtige Workbook aktiv ist.
  • Leerzeichen in der Referenz

    • Wenn du das Leerzeichen in der Zeile a & "! R1C1" hast, verursacht das einen Fehler. Es sollte korrekt a & "!R1C1" ohne Leerzeichen sein.
  • Namen funktionieren nicht wie erwartet

    • Wenn du einen Namen wie =Tabelle1_Test1 verwendest und den Wert Tabelle1!R1C1 zurückbekommst, dann ist der Name möglicherweise nicht korrekt referenziert. Überprüfe die Zuweisung im Makro.

Alternative Methoden

Eine einfachere Methode, um einen Namen für jede Zelle in jedem Tabellenblatt zu vergeben, könnte so aussehen:

Sub EinfacherNamen()
    Dim wks As Worksheet
    For Each wks In Worksheets
        wks.Cells(1, 1).Name = wks.Name & "_test1"
    Next
End Sub

Diese Methode ist einfacher und macht es unnötig, die aktive Zelle oder das aktive Blatt explizit zu referenzieren. Du kannst sogar lokale Namen verwenden, um die Lesbarkeit zu erhöhen.


Praktische Beispiele

Wenn du beispielsweise eine Arbeitsmappe mit mehreren Tabellenblättern hast und für jede Zelle A1 den Namen TabelleX_Test1 vergeben möchtest, kannst du das oben genannte Makro verwenden. Das Ergebnis wäre, dass du in jedem Blatt den Namen der Zelle als Referenz verwenden kannst, um in anderen Formeln darauf zuzugreifen.

Ein Beispiel für die Verwendung wäre:

=B10+Tabelle1_Test1

Hier wird mit dem Namen Tabelle1_Test1 auf den Wert in Zelle A1 zugegriffen.


Tipps für Profis

  • Nutze den Namensmanager: Überprüfe regelmäßig den Namensmanager in Excel, um sicherzustellen, dass keine doppelten oder nicht mehr benötigten Namen vorhanden sind.
  • Verwende aussagekräftige Namen: Wenn du Namen vergibst, achte darauf, dass sie aussagekräftig sind. So wird die Wartung deiner Excel-Modelle einfacher.
  • Makros testen: Teste deinen VBA-Code in einer Kopie deiner Arbeitsmappe, um unerwünschte Änderungen zu vermeiden.

FAQ: Häufige Fragen

1. Warum funktioniert mein Makro nicht?
Überprüfe, ob das korrekte Workbook aktiv ist und dass du die richtigen Objekte in deinem Code verwendest.

2. Was ist der Unterschied zwischen ActiveSheet und ActiveWorkbook?
ActiveSheet bezieht sich auf das aktuell aktive Arbeitsblatt, während ActiveWorkbook sich auf die aktuelle Arbeitsmappe bezieht.

3. Wie kann ich die Namen auch für andere Zellen anpassen?
Du kannst die Zelle in deinem VBA-Code ändern, indem du Cells(1, 1) durch die gewünschte Zellenreferenz ersetzt, z.B. Cells(2, 1) für Zelle A2.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige