names(i).delete klappt nicht?!?
15.05.2021 22:38:08
Norman
bin gerade irritiert.
Habe 2 Namen:
a = Tabelle1!A1 --> Für komplette Mappe
a = Tabelle1!B2 --> Nur für Tabelle1 (sozusagen ein "lokales" a).
Jetzt will ich mit VBA da "globale" a (das auf Tebelle1!A1 zeigt) löschen. Weils noch mehr Namen geben kann, suche ich über names(i).name (bzw. For Each) nach a. NIcht nach 'Tabelle1'!a, sondern nur nach a. Finde ich auch. Ist auch die richtige Stelle. Dann mache ich names(i).delete (bzw. in diesem Falle nameItem.delete, weil ich schon gedacht habe, dass Excel hier nen anderen Index hat). Tja, was soll ich sagen, Excel löscht den "falschen" Namen. Excel löscht den lokalen, nicht den globalen.
Lustiger Weise passiert das nur bei gleichnamigen Namen, die lokal / global sind. Bei anderen Namen gehts.
Habe die Datei mal angehängt, vielleicht bin ich ja auch blöd. Bitte einfach mal WBRemoveTags starten. https://www.herber.de/bbs/user/146211.xlsm
Hier ist der Code
Private Sub PrintTags()
Dim nameItem As Excel.Name
Dim i As Long
If ThisWorkbook.Names.Count > 0 Then
For i = 1 To ThisWorkbook.Names.Count
Debug.Print ThisWorkbook.Names(i).Index & " - " & ThisWorkbook.Names(i).Name & " - " & ThisWorkbook.Names(i).RefersTo & " - " & ThisWorkbook.Names(i).Visible & " - " & ThisWorkbook.Names(i).Comment
Next i
End If
End Sub
Private Sub WBRemoveTags()
Dim nameItem As Excel.Name
Debug.Print "---- Vor Löschen ----"
PrintTags
If ThisWorkbook.Names.Count > 0 Then
For Each nameItem In ThisWorkbook.Names
If nameItem.Name = "a" Then
Debug.Print "---- Löschen ----"
Debug.Print nameItem.Index & " - " & nameItem.Name & " - " & nameItem.RefersTo & " - " & nameItem.Visible & " - " & nameItem.Comment
nameItem.Delete
End If
Next nameItem
End If
Debug.Print "---- Nach Löschen ----"
PrintTags
End Sub
Das kommt bei mir dabei raus:---- Vor Löschen ----
1 - Tabelle1!a - =Tabelle1!$B$2 - Wahr - nur auf Tabelle
2 - a - =Tabelle1!$A$1 - Wahr - Auf Mappe
---- Löschen ----
2 - a - =Tabelle1!$A$1 - Wahr - Auf Mappe
---- Nach Löschen ----
1 - a - =Tabelle1!$A$1 - Wahr - Auf Mappe
Die letzte Zeile hätte aber wie folgt heißen müssen:
1 - Tabelle1!a - =Tabelle1!$B$2 - Wahr - nur auf Tabelle
? Was übersehe ich?
Vielen Dank, Norman