Hallo Ihr Experten 
Ich habe eine Exceldatei, die im Laufe der Jahre recht angewachsen ist (ca 20 Tabellenblätter und bis zu 60 Spalten)
Nun sind im Laufe der Jahre für Datenbereiche Namen vergeben worden, auf die dann Sverweise zugreifen.
Wie kann man feststellen, ob nun manche dieser „Namen“ gar nicht mehr gebraucht werden, d.h. kein Sverweis der Datei mehr darauf zugreift??
Hat jemand eine Idee??
Lieben Gruß und schon mal Dankeschön
Suse
Hallo, Suse!
Wie kann man feststellen, ob nun manche dieser „Namen“ gar
nicht mehr gebraucht werden, d.h. kein Sverweis der Datei mehr
darauf zugreift??
Ich würde per Makro über alle Tabellen rüberrennen und nach Deiner Formel suchen. Die müsste dann entsprechend geparst werden und eben auf die verwendeten Namen untersucht werden. Einfacher, wenn auch nicht unbedingt sicher, wäre es wohl, wenn Du vorher über alle Namen rüberläufst, diese wohin speicherst und schaust, ob die Namen in der Formel enthalten sind.
Hier mal ein ungetestetes sniplet, was die Suche abbildet:
' SVerweis heißt "VLOOKUP"
Dim rngFind As Range
Dim strAddresse1 As String
With Tabelle1.Cells
Set rngFind = .Find("=VLOOKUP", , xlFormulas)
If Not rngFind Is Nothing Then
strAddresse1 = rngFind.Address
Do
Debug.Print rngFind.Formula
Set rngFind = .FindNext(rngFind)
Loop Until rngFind Is Nothing Or (rngFind.Address = strAddresse1)
End If
End With
Wenn Du Dir dann den Inhalt Deines Direktfensters ansiehst, siehst Du die gefundenen Formeln. Diese müssen dann halt entsprechend verarbeitet werden…
Gruß, Manfred
Ich habe eine Exceldatei, die im Laufe der Jahre recht
angewachsen ist (ca 20 Tabellenblätter und bis zu 60 Spalten)
Nun sind im Laufe der Jahre für Datenbereiche Namen vergeben
worden, auf die dann Sverweise zugreifen.
Wie kann man feststellen, ob nun manche dieser „Namen“ gar
nicht mehr gebraucht werden, d.h. kein Sverweis der Datei mehr
darauf zugreift??
Hi Suse,
habe dir was gebastelt, was alle nicht genutzten Namen löscht.
Sub tt()
Dim n As String, anz As Long
For Each n In ThisWorkbook.Names
gefunden = False
For Each Zelle In ActiveSheet.UsedRange.Cells
If InStr(Zelle.Formula, n.Name) \> 0 Then gefunden = True
Next Zelle
If gefunden = False Then ActiveWorkbook.Names(n.Name).Delete
Next n
End Sub
Gruß
Reinhard
Hallo, Reinhard!
For Each Zelle In ActiveSheet.UsedRange.Cells
Sollte das nicht über alle Sheets laufen?
Gruß, Manfred
hast Recht
Hallo, Reinhard!
For Each Zelle In ActiveSheet.UsedRange.Cells
Sollte das nicht über alle Sheets laufen?
Gruß, Manfred
Hi Manfred,
hab das mit heisser Nadel gestrickt da ich weg musste. Neuer Versuch, ungetestet:
Sub tt()
Dim n, anz As Long
For Each n In ThisWorkbook.Names
gefunden = False
For Each blatt In ThisWorkbook.Worksheets
For Each Zelle In blatt.UsedRange.Cells
If InStr(Zelle.Formula, n.Name) \> 0 Then gefunden = True
Next Zelle
Next blatt
If gefunden = False Then ActiveWorkbook.Names(n.Name).Delete
Next n
End Sub
Keine Ahnung warum ich bei „Dim n as string“ ne Fehlermeldung bekomme. Fehlermeldung sagt, n sollte als variant oder object definiert werden…
Gruß Reinhard
Hallo, Reinhard!
Hi Manfred,
hab das mit heisser Nadel gestrickt da ich weg musste. Neuer
Es wird halt Zeit für den Online-Debugger. 
Keine Ahnung warum ich bei „Dim n as string“ ne Fehlermeldung
bekomme. Fehlermeldung sagt, n sollte als variant oder object
definiert werden…
Weil n in Deiner Schleife ein Name-Objekt ist.
Gruß, Manfred
Merci
o.w.T
o.w.T = ohne weiteren Text *g
Hallo Ihr Experten 
Hast du schon mal daran gedacht Excel durch Access zu ersetzen. Dieses Excel kann doch keiner mehr vernünftig pflegen.
Scheint ein klassischer Fall für das falsche Programm zu sein.
Nicht alles was machbar ist mit Excel macht auch Sinn.
Gruß Hans