2017-05-17 4 views
1

Also im Grunde habe ich eine Vermächtnis Exzellenz von meinem Vorgänger, um eine Reihe von Daten zu verarbeiten. Er nennt im Grunde jeden Datenpunkt und verarbeitet sie entsprechend. Das Problem ist, dass seine Codes die alten verwendeten Namen nicht wegräumen, was dazu führt, dass sich Namen im Laufe der Jahre ansammeln. Im Moment habe ich 100k + Namen in meinem Excel-Blatt, die ich nicht löschen kann.VBA Entfernen 100k + benannte Bereiche

Ich habe versucht, mit:

Sub dlname 

    Dim nm as name 

    For each nm in activeworkbook.names 

    nm.delete 

    Next nm 

End sub 

Es gibt mir immer Laufzeitfehler 7, aus dem Speicher.

Irgendwelche Lösungen zu diesem?

+1

Sehen Sie diese [Beitrag] (http://stackoverflow.com/questions/14396998/how-to-clear-memory-zu verhindern-out-of-memory-fehler-in-excel-vba) (dh speichern Sie die Arbeitsmappe in regelmäßigen Abständen). – Amorpheuses

+0

Ich habe activeworkbook.save nach nm.delete hinzugefügt. es zeigt mir immer noch denselben Fehler. (mache ich das richtig?) Ich denke, Excel starb beim Laden der Namensliste. Gibt es eine Möglichkeit, die Namensliste aufzulösen und Stück für Stück zu löschen? – adam

Antwort

0

ich Ihnen vorschlagen, tun es in Stücke mit (wie Amorpheuses sagt) eine sparen zwischen

Sub dlname 

    Dim j as long 

    For j=20000 to 1 step -1 
    if j<=activeworkbook.names.count then 
     activeworkbook.names(j).delete 
    end if 
    Next j 
    activeworkbook.save 
    End sub 
+0

ich werde es versuchen. wusste nicht, dass die Namen in Excel indiziert wurden. Vielen Dank! – adam

+0

arbeitete wie ein Charme. Vielen Dank! – adam

+0

Code-Logik ist falsch: 'j 'wird inkrementiert und mit einer fallenden Grenze verglichen, da' .names.count' dynamisch ist. Von 'n' Namen werden' (n-1)/2' Namen nicht gelöscht. Außerdem wird die Schleife nur einmal durchlaufen, also gibt es nur 1 Chunk. @ areklipnos Code verwendet '.names.count' korrekt und sollte als Antwort markiert sein. – user1016274

1

versuchen Sie dies:

Do While (ActiveWorkbook.Names.Count > 0) 

ActiveWorkbook.Names.Item(1).Delete 

Loop 
Verwandte Themen