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

Ungültige Namen in ActiveWorkbook.names

Forumthread: Ungültige Namen in ActiveWorkbook.names

Ungültige Namen in ActiveWorkbook.names
31.07.2014 11:16:59
Johannes
Hallo,
vielleicht kann mir hier jemand helfen.
Ich habe mehrere hundert Excel-Dateien mit zum Teil verhunzten Namen. Entweder enthält refersTo einen Fehler oder der Name selbst ist irgendwie ungültig. Das macht mir bei anderen VBA Aktionen mit diesen Dateien Probleme.
Also wollte ich ein VBA schreiben, welches jede Datei öffnet und alle Namen aus der Datei rauslöscht und dann die Datei speichert. Habe dazu verschiedenste Code-Schnipsel gefunden, die aber alle nur bedingt funktionieren. Z.B. dieses
For y = ActiveWorkbook.Names.Count To 1 Step -1
Set n = ActiveWorkbook.Names(y)
n.Delete
Next y
Das rennt wie alle anderen Schnipsel am Ende in einen Makro-Fehler:
Der eingegebene Name ist ungültig.
Mögliche Gründe:
-Der Name beginnt nicht mit einem Buchstaben oder einem Unterstrich
-Der Name enthält ein Leerzeichen oder sonstige ungültige Zeichen
-Der Name steht in Konflikt mit einem integrierten Excel-Namen oder dem Namen eines anderen Objekts in der Arbeitsmappe
Wenn ich mit obigen Code in Einzelschritten debugge, durchläuft das Makro von hinten nach vorn die Namensliste bis zum Fehler. Die Variable n enthält seltsamerweise nicht den Namen des Namens sondern den Bezug. Beim Auftreten des Fehlers hat n den Wert "=NAME?".
Wenn ich den Namensmanager der bearbeiteten Datei an diesem Punkt aufrufe sind alle Namen (viele mit Referenzfehlern etc.) weg, einer ist übrig:
Name: Drucktitel
Wert: #BEZUG!
Bezug: ='H:\GVM\...\[Beispiel.xls]TestTab'!#BEZUG!
Ist das der den Fehler auslösende Name? Ein direktes Löschen dieses Namens per
ActiveWorkbook.Names("Print_Title").Delete
läuft jedenfalls auch in einen Makro-Fehler.
Es scheint so, dass alleine das "Ansprechen" dieses Namens zu einem Fehler führt.
Seltsamer weise klappt das Löschen aller Namen manuell im Namensmanger ohne Probleme. Alles markieren - Löschen - OK
Was kann ich tun?
Danke im Voraus.
Johannes

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ungültige Namen in ActiveWorkbook.names
31.07.2014 11:31:01
Hajo_Zi
Hallo Johannes
lösche die Zeile Set n = ActiveWorkbook.Names(y)
oder

If InStr(UCase(n.Name), "#BEZUG!") > 0 Then
n.delete
end if

Du willst ja alle Namen löschen.

AW: Ungültige Namen in ActiveWorkbook.names
31.07.2014 12:20:32
Johannes
Hallo HAJO,
zunächst danke für die Rückmeldung.
Das einfache Weglassen der Zeile
Set n = ActiveWorkbook.Names(y)
führt zum Fehler: Objektvariable oder With-Blockvariable nicht festgelegt
Ich habe deinen Code nun verbaut wobei das mit "n.Name" nicht ging, daher mit "n.refersToLocal":
For y = ActiveWorkbook.Names.Count To 1 Step -1
Set n = ActiveWorkbook.Names(y)
If InStr(UCase(n.RefersToLocal), "#BEZUG!") > 0 Then
n.Delete
End If
Next y
Das führt zunächst zu keinem Fehler, Makro löscht alle Namen die "#BEZUG!" im Bezug stehen haben. Aber beim Drucktitel klappt das nicht. Er wird nicht gelöscht, es tritt auch kein Fehler auf. Wenn ich den Namensmanager nach Makro-Durchlauf öffne ist Drucktitel noch da obwohl wie in erstem Post geschrieben der Bezug von Drucktitel auch die Zeichenfolge "#BEZUG!" enthält.
Es wäre ja ok, wenn ein gültiger Drucktitel gesetzt werden könnte. Also wenn n.Name.Local = "Drucktitel" dann n.value = nothing und n.referstolocal = nothing. Geht das? Wie müsste das aussehen?
Danke

Anzeige
AW: Ungültige Namen in ActiveWorkbook.names
31.07.2014 13:38:07
Rudi
Hallo,
versuch mal:
Sub NamenRaus()
Dim n As Name
For Each n In ActiveWorkbook.Names
n.Delete
Next
End Sub

Gruß
Rudi

AW: Ungültige Namen in ActiveWorkbook.names
31.07.2014 14:15:30
Johannes
Sorry,
auch dieser Code liefert Makro-Abbruch mit Meldung:
Der eingegebene Name ist ungültig.
Mögliche Gründe:
-Der Name beginnt nicht mit einem Buchstaben oder einem Unterstrich
-Der Name enthält ein Leerzeichen oder sonstige ungültige Zeichen
-Der Name steht in Konflikt mit einem integrierten Excel-Namen oder dem Namen eines anderen Objekts in der Arbeitsmappe
Siehe auch Ursprungspost.

Anzeige
AW: Ungültige Namen in ActiveWorkbook.names
31.07.2014 15:04:10
Adis
Hallo
Wenn alle gelöscht werden sollen verwende ich gerne die Zahl 1 anstatt i
Er löscht somit immer den ersten Namen, bis die Liste leer ist.
Vorher lege ich mir aber gerne zuerst eine Liste aller Namen + Referenzen an
Darin kann man schön den ganzen Müll sehen. Diese Liste wird bei "#REF"(Bezug) Fehler
nicht immer mit der sichtbaren xlDialog Namens-Liste über die Menüleiste übereinstimmen!!
Gültige Wb-Namen kann man übrigens per Makro wieder in die Mappe zurückladen.
Manchmal muss man mehrfach löschen bis die ganze Liste leer ist. Ausprobieren.
On Error Resume Next
For i = 1 to ActiveWorkbook.Names.Count
ActiveWorkbook.Names(1).Delete '1 nicht i!!
Next i
Sheets("Tabelle1").Select
For i = 1 To ActiveWorkbook.Names.Count
Cells(i + 3, 2) = ActiveWorkbook.Names(i).Name
Cells(i + 3, 3) = " ' " & ActiveWorkbook.Names(i).RefersToLocal
Next i
Gruss Adis

Anzeige
AW: Ungültige Namen in ActiveWorkbook.names
01.08.2014 08:49:01
Johannes
Der erste Code Schnipsel läuft ebenfalls in den genannten Error sobald er Drucktitel erreicht. Wie gesagt allein das "Ansprechen" des Namens führt bereits zum Fehler.
Habe mal den 2. Code verwendet um die Namen auszulesen. Beim Drucktitel steht als Name
"_xlfn.IFERROR".
Sofort habe ich
ActiveWorkbook.Names("_xlfn.IFERROR").Delete
probiert.
Leider wieder der Fehler.
Weiß noch jemand Rat?
Kann man theoretisch Excel per VBA so fern steuern, dass man sozusagen mit der Maus auf Formeln klickt, alle Bereichsnamen markiert, dann Löschen anklickt und bestätigt?
Denn manuell funktioniert das ja.
Danke!

Anzeige
AW: Ungültige Namen in ActiveWorkbook.names
01.08.2014 15:41:00
fcs
Hallo Johannes,
es gibt auch interne unsichtbare Namen die Excel direkt vergibt.
Diese kann man zum Teil nicht löschen, weil sie angelegt werden, um die Kompatibilität zu älteren Excelversionen herzustellen. dazu gehört zum Beispiel auch die Funktion "_xlfn.IFERROR", Deutsch: WENNFEHLER.
Deshalb solltest du die ausgeblendeten nicht versuchen zu löschen.
Es gibt zwar auch weniger kritische Namen, wie zum Beispiel solche für den Autofilter, aber ich würde an deiner Stelle trotzdem die Finger davon lassen.
Ansonsten ist es meist günstiger, wenn man die Objekte vom Ende der AUflistung her löscht, also rückwärts zählend Richtung 1.
Gruß
Franz
Sub NamenLoeschen()
Dim wkb As Workbook
Dim objName As Name, intC As Integer
Set wkb = ActiveWorkbook
For intC = wkb.Names.Count To 1 Step -1
Set objName = wkb.Names(intC)
With objName
If .Visible = True Then
If InStr(1, .RefersToLocal, "#BEZUG!") > 0 Or InStr(1, .RefersTo, "#REF!") > 0 Then
.Delete
End If
Else
If Left(.Name, 6) = "_xlfn." Then
'Namen mit Verweise auf Excelfunktionen nicht löschen
ElseIf InStr(1, .Name, "!_FilterDatabase") > 0 Then
'Namen mit Verweis auf Autofilterbereiche nicht löschen
Else
.Delete
End If
End If
End With
Next
End Sub

Anzeige
AW: Ungültige Namen in ActiveWorkbook.names
01.08.2014 20:49:54
Adis
Hallo
ich weiss nicht wie ernst das Problem mit den Namen ist. Ob es sinnvoll ist es zu belassen.
Haben Dateien mich so genervt das ich nicht mehr weiter wusste, gab es unerwartete Fehler oder
unerklaerliche Phaenomene das Excel die Datei abbrach und zumachte gabs bei mir nur eine Lösung.
Datei verwerfen, eine neue Mappe anlegen, alles rüber kopieren, und mit neuer Mappe weitermachen.
Bei privaten kleinen Dateien kein Problem. Bei geschaftlichen Dateien muss man sorgfaeltig abwaegen!
Gruss Adis
Anzeige
;
Anzeige

Infobox / Tutorial

Ungültige Namen in ActiveWorkbook.names beheben


Schritt-für-Schritt-Anleitung

  1. Öffne die Excel-Datei, in der du die ungültigen Namen entfernen möchtest.

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

  3. Füge ein neues Modul hinzu:

    • Rechtsklick auf "VBAProject (deinDateiname)" > Einfügen > Modul.
  4. Kopiere und füge den folgenden Code ein:

    Sub NamenLoeschen()
       Dim wkb As Workbook
       Dim objName As Name, intC As Integer
       Set wkb = ActiveWorkbook
       For intC = wkb.Names.Count To 1 Step -1
           Set objName = wkb.Names(intC)
           With objName
               If InStr(1, .RefersToLocal, "#BEZUG!") > 0 Or InStr(1, .RefersTo, "#REF!") > 0 Then
                   .Delete
               ElseIf Left(.Name, 6) = "_xlfn." Then
                   ' Namen mit Verweise auf Excelfunktionen nicht löschen
               ElseIf InStr(1, .Name, "!_FilterDatabase") > 0 Then
                   ' Namen mit Verweis auf Autofilterbereiche nicht löschen
               Else
                   .Delete
               End If
           End With
       Next
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro aus:

    • Drücke ALT + F8, wähle NamenLoeschen und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: Der eingegebene Name ist ungültig.

    • Lösung: Überprüfe, ob der Name mit einem Buchstaben oder Unterstrich beginnt. Namen dürfen keine Leerzeichen oder ungültige Zeichen enthalten.
  • Fehler: Objektvariable oder With-Blockvariable nicht festgelegt.

    • Lösung: Stelle sicher, dass die Variable objName korrekt zugewiesen wird.
  • Fehler: Excel #name error bei bestimmten Namen.

    • Lösung: Manchmal sind bestimmte interne Namen wie _xlfn.IFERROR nicht löschbar. Diese Namen sind für die Kompatibilität mit älteren Excel-Versionen gedacht.

Alternative Methoden

  • Manuelles Löschen: Öffne den Namensmanager (Formeln > Namensmanager) und lösche die ungültigen Namen manuell.
  • Namen auflisten: Erstelle eine Liste aller Namen und ihrer Referenzen. Dies hilft dir, ungültige Namen zu identifizieren. Beispielcode:

    Sub NamensListe()
       Dim n As Name
       Dim i As Integer
       i = 1
       For Each n In ActiveWorkbook.Names
           Cells(i, 1).Value = n.Name
           Cells(i, 2).Value = n.RefersToLocal
           i = i + 1
       Next n
    End Sub

Praktische Beispiele

  • Beispiel 1: Löschen aller Namen mit Bezug auf #REF!:

    If InStr(1, .RefersToLocal, "#REF!") > 0 Then
       .Delete
    End If
  • Beispiel 2: Löschen eines bestimmten Namens:

    On Error Resume Next
    ActiveWorkbook.Names("Drucktitel").Delete
    On Error GoTo 0

Tipps für Profis

  • Verwende On Error Resume Next: Damit kannst du Fehler ignorieren, die durch ungültige Namen entstehen, wenn du versuchst, diese zu löschen.
  • Sichere deine Datei: Bevor du Makros ausführst, speichere ein Backup deiner Datei, um Datenverlust zu vermeiden.
  • Kompatibilität prüfen: Sei vorsichtig mit Namen, die durch Excel für die Kompatibilität erstellt wurden, wie _xlfn.IFERROR.

FAQ: Häufige Fragen

1. Warum kann ich bestimmte Namen nicht löschen?
Einige Namen sind intern und für die Kompatibilität mit älteren Excel-Versionen gedacht. Diese sollten nicht gelöscht werden.

2. Was ist der Fehler "#NAME?"?
Dieser Fehler tritt auf, wenn Excel einen Namen oder eine Formel nicht erkennen kann. Überprüfe die Namen auf Ungültigkeiten.

3. Kann ich ungültige Namen mit VBA einfach ignorieren?
Ja, du kannst On Error Resume Next verwenden, um Fehler zu ignorieren und das Makro weiterlaufen zu lassen.

4. Wie kann ich sicherstellen, dass alle ungültigen Namen gelöscht werden?
Nutze einen Code, der alle Namen rückwärts durchläuft und überprüft, ob sie ungültig sind, bevor sie gelöscht werden.

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