Microsoft Excel

Herbers Excel/VBA-Archiv

Ungültige Namen in ActiveWorkbook.names

Betrifft: Ungültige Namen in ActiveWorkbook.names von: Johannes
Geschrieben am: 31.07.2014 11:16:59

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

  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Hajo_Zi
Geschrieben am: 31.07.2014 11:31:01

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.
GrußformelHomepage


  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Johannes
Geschrieben am: 31.07.2014 12:20:32

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


  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Rudi Maintaire
Geschrieben am: 31.07.2014 13:38:07

Hallo,
versuch mal:

Sub NamenRaus()
  Dim n As Name
  For Each n In ActiveWorkbook.Names
    n.Delete
  Next
End Sub

Gruß
Rudi


  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Johannes
Geschrieben am: 31.07.2014 14:15:30

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.


  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Adis
Geschrieben am: 31.07.2014 15:04:10

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


  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Johannes
Geschrieben am: 01.08.2014 08:49:01

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!


  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: fcs
Geschrieben am: 01.08.2014 15:41:00

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



  

Betrifft: AW: Ungültige Namen in ActiveWorkbook.names von: Adis
Geschrieben am: 01.08.2014 20:49:54

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