Datenbereich: Sverweise gesucht

Hallo Ihr Experten :smile:

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. :wink:

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 :smile: o.w.T
o.w.T = ohne weiteren Text *g

Hallo Ihr Experten :smile:

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