Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Troubleshooting zur Namenslöschung

Troubleshooting zur Namenslöschung
16.12.2022 15:17:27
Simon
Hallo zusammen,
ich habe folgendes Makro um alle Namensbezüge zu löschen: (ich hatte das immer verwendet, und jetzt kommt eine Fehlermeldung?!?!)
Folgende Fehlermeldung:1004, die Syntax des Namens ist nicht richtig, der Namen soll bitte geprüft werden.
Stehen bleibt das ganze bei varName.Delete.
Bei Dr. Google ist auch wirklich jeder code so ähnlich aufgebaut den ich gegoogelt habe, jetzt bin ich etwas sprachlos.
Ideen?

Option Explicit
Sub AlleNamenLoeschen()
Dim varName As Name
Dim intFrage As Integer
intFrage = MsgBox("Sollen alle Namen gelöscht werden?", _
vbYesNo, "wirklich?")
If intFrage = vbNo Then Exit Sub
For Each varName In ActiveWorkbook.Names
varName.Delete
Next varName
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Troubleshooting zur Namenslöschung
16.12.2022 15:28:10
onur
Dim varName As Name ?
AW: Troubleshooting zur Namenslöschung
16.12.2022 15:57:26
Daniel
Hi
Weise VBA an, bei einem Fehler nicht abzubrechen, sondern einfach weiter zu machen:

0n Error Resume Next
For Each varName In ActiveWorkbook.Names
varName.Delete
Next varName
On Error goto 0
Lass das Makro mal durchlaufen.
Kontrolliere dann die Namen.
Sind noch alle da, ist der Code falsch.
Sind einige weg und einige noch da, dann ist der Code korrekt, aber an den vorhandenenn Namen ist irgendwas besonderes, dass verhindert dass der Name gelöscht werden kann, Düse solltest du dir genauer anschauen.
Sind alle Namen weg, dann gibt es versteckte Namen, die Excel nicht löschen kann.
Um hier weiter zu forschen, solltest du den Code so erweitern:

0n Error Resume Next
For Each varName In ActiveWorkbook.Names
ERR = 0
varName.Delete
If ERR  0 then Debug.Print varName.Name
Next varName
On Error goto 0
Dann siehst du im Direktfenster die Namen, die das Problem verursachen.
Gruß Daniel
Anzeige
AW: Troubleshooting zur Namenslöschung
16.12.2022 16:24:39
Simon
Hi, jetzt funktioniert es wirklich super, wie kann ich eine Ausnahmeliste wie folgt hinterlegen:
(das sind die Namen)
balance_type
Bez_Monat
Bez_Quartal
calc
Finanz!DATA1
Finanz!DATA10
Finanz!DATA2
Finanz!DATA4
Finanz!DATA8
Act. 2021'!Print_Area
B22, 2022'!Print_Area
BWA!Print_Area
CF!Print_Area
Finance Scorecard'!Print_Area
Finanz!Print_Area
Input!Print_Area
Month!Print_Area
Oth. op. expenses - merch.'!Print_Area
P&L'!Print_Area
Quarter!Print_Area
Variance Analysis'!Print_Area
Print_Area
CF!Print_Titles
Finanz!Print_Titles
Anzeige
AW: Troubleshooting zur Namenslöschung
16.12.2022 17:18:11
Daniel
Ich würde das OnErrorResumeNext einfach drin lassen.
Gruß Daniel
AW: Troubleshooting zur Namenslöschung
19.12.2022 10:49:24
Simon
Genau diese Namen möchte ich ja explizit nicht löschen. Das bei Fehler weiter machen ist weiterhin enthalten.
Vermutlich geht das mit einer If schleife die eine Liste prüft (was ich wiederum nicht schreiben kann)? Für mehrere Prüfungen sind es ja doch etwas viele Ausnahmen.
Danke.
AW: Troubleshooting zur Namenslöschung
19.12.2022 11:34:44
Yal
Hallo Simon,
es gibt mehrere Wege, Ausnahme zu behandeln. In Fall einer Liste von Text, würde ich mit InStr arbeiten. Aus der Liste wird eine String gemacht und darin gesucht:

Sub Namen_löschen()
Dim varName As Name
Const cAusnahme = "balance_type;Bez_Monat;Bez_Quartal;calc;Finanz!DATA10;Finanz!DATA1;Finanz!DATA2"
On Error Resume Next
For Each varName In ActiveWorkbook.Names
If Not InStr(1, cAusnahme, varName, vbTextCompare) Then varName.Delete
Next varName
End Sub
VG
Yal
Anzeige
AW: Troubleshooting zur Namenslöschung
19.12.2022 14:34:10
Simon
Hallo,
also ich habe es jetzt mal auf das absolut wesentliche beschränkt, aber es wird trotzdem immer alles gelöscht, was mache ich falsch? Die Namen der jeweiligen Bezeichnungen stehen im String:

Sub NamenLoeschenFIPackage()
Dim varName As Name
Dim intFrage As Integer
Const cAusnahme = "aktueller_Monat;aktuelles_Quartal;Bez_Monat;Bez_Quartal"
intFrage = MsgBox("Sollen alle Namen gelöscht werden?", _
vbYesNo, "alle?")
On Error Resume Next
For Each varName In ActiveWorkbook.Names
If Not InStr(1, cAusnahme, varName, vbTextCompare) Then varName.Delete
Next varName
End Sub

Anzeige
AW: Troubleshooting zur Namenslöschung
19.12.2022 15:07:44
Yal
Moin,
Das Problem mit Löschen ist, dass es ziemlich umständlich ist, wieder alles in vorigen Zustand zu bringen, um ein zweiten Test zu machen. Es empfiehlt sich, mit einer "non destructiv" Methode zu testen:

Sub NamenLoeschenFIPackage()
Dim varName As Name
Dim intFrage As Integer
Const cAusnahme = "aktueller_Monat;aktuelles_Quartal;Bez_Monat;Bez_Quartal"
If MsgBox("Sollen alle Namen gelöscht werden?", vbYesNo, "Alle?") = vbNo Then Exit Sub
On Error Resume Next
For Each varName In ActiveWorkbook.Names
'        If Not InStr(1, cAusnahme, varName, vbTextCompare) Then varName.Delete
Debug.Print varName, Iif(InStr(1, cAusnahme, varName, vbTextCompare), "vorhanden, nicht löschen", "nicht vorhanden, löschen")
Next varName
End Sub
Ergebnisse werden in das Direktfenster abgegeben. Im VB-Editor, "Ansicht", "Direktfenster".
VG
Yal
Anzeige
AW: Troubleshooting zur Namenslöschung
19.12.2022 17:43:21
Simon
Kurzes Feedback: er gibt immer nicht vorhanden zurück? In der Ausgabe weißt er auch sowas wie =Inputf4 aus, wobei die Zellen heißen wie oben angegeben. Das hatte ich über ein Makro ausgelesen. Passt irgendwas mit der Liste nicht? Danke
AW: Troubleshooting zur Namenslöschung
19.12.2022 18:24:20
Yal
Hallo Simon,
wenn diesen Test ergibt, dass "varName" "=Inputf4" beinhaltet, dann gibt es eine Denkfehler.
varName ist dann ein Objekt vom Typ Name*. Was Du daraus brauchst, ist der Eigenschaft "Name". Also so:

    For Each varName In ActiveWorkbook.Names
Debug.Print varName.name
Next varName
Dementsprechend:

Sub NamenLoeschenFIPackage()
Dim varName As Name
Dim intFrage As Integer
Const cAusnahme = "aktueller_Monat;aktuelles_Quartal;Bez_Monat;Bez_Quartal"
If MsgBox("Sollen alle Namen gelöscht werden?", vbYesNo, "Alle?") = vbNo Then Exit Sub
On Error Resume Next
For Each varName In ActiveWorkbook.Names
'        If Not InStr(1, cAusnahme, varName.Name, vbTextCompare) Then varName.Delete
Debug.Print varName.Name, Iif(InStr(1, cAusnahme, varName.Name, vbTextCompare), "vorhanden, nicht löschen", "nicht vorhanden, löschen")
Next varName
End Sub
*: viele Objekt-Typ (man sagt "Klasse") hat ein Default-Eigenschaft, der zurückgegeben wird, wenn man das Objekt unspezifiziert anspricht. Die Klasse "Name" scheint "RefersTo" und nicht "Name" als Default-Eigenschaft zu haben.
Man kann den Test mit oder ohne beannte Eigenschaft machen:

Sub Test_defaultProperty()
Dim N
For Each N In Application.Names
Debug.Print N, N.Name, N.RefersTo 'Ohne Eigenschsft, Name-Eigenschaft, RefersTo-Eigenschaft
Next
End Sub
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige