2017-05-17 8 views
1

基本的に私は、前任者から、一連のデータを処理するための遺産を得ています。 彼は基本的に各データポイントに名前を付け、それに応じて処理します。 問題は、彼のコードが古い使用された名前を消去しないため、年々名前が蓄積されるということです。 今、私はエクセルシートに100k +の名前があります。私はそれをクリアできません。VBA 100k +名前付き範囲を削除する

私が使用して試してみた:

Sub dlname 

    Dim nm as name 

    For each nm in activeworkbook.names 

    nm.delete 

    Next nm 

End sub 

それは常にメモリ不足、私のランタイムエラー7を与えるでしょう。

これに対する解決策はありますか?

+1

この[記事](http://stackoverflow.comを参照してください。/questions/14396998/how-to-clear-memory-to-prevent-out-of-memory-error-in-excel-vba)(つまり、ブックを定期的に保存する)。 – Amorpheuses

+0

nm.deleteの後にactiveworkbook.saveを追加しました。それでも私には同じエラーが表示されます。 (私はこれをやっていますか?) 名前リストを読み込む際にExcelがうまくいったと思います。名前リストを分解してそれらを少々削除する方法はありますか? – adam

答えて

0

私はこれを試してみてください

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

私はそれを打つつもりです。その名前がどこで索引付けされているかはわかりませんでした。ありがとう! – adam

+0

は魅力的に働いた。ありがとう! – adam

+0

コードロジックが間違っています。 '.names.count'は動的なので、' j'はインクリメントされ、下限値と比較されます。 n個の名前のうち、(n-1)/ 2個の名前は削除されません。また、ループは1回だけ実行されるため、1つのチャンクしかありません。 @ areklipnoのコードは '.names.count'を正しく使用し、答えとしてマークする必要があります。 – user1016274

1

の間で保存(Amorpheusesが言うように)あなたが持つチャンクでそれを行うお勧め:

Do While (ActiveWorkbook.Names.Count > 0) 

ActiveWorkbook.Names.Item(1).Delete 

Loop 
関連する問題