2017-02-01 3 views
1

ループを使用せずにVBA を使用してExcelブックからすべての名前を削除しようとしています。ループを使わずにブックからすべての名前を削除する

私は現在以下のコードを使用していますが、ワークブックに数千の名前があるため、これは非常に遅いです。

ご意見をお寄せください。いくつかの複雑なハックの方法またはXMLをいじりなし

Sub deleteAllNames() 
Dim xName As Name 

For Each xName In Application.ActiveWorkbook.Names 
     xName.Delete 
Next 
End Sub 
+0

名前の範囲を意味する名前を削除するには? – BruceWayne

+0

はい、名前付き範囲(いくつかの数式がありますが、違いがあれば分かりません) – Charteris

答えて

1

ない可能性が、これは速くする必要があります:

Dim i As Long 
Application.Calculation = xlCalculationManual 
For i = ThisWorkbook.Names.Count To 1 Step -1 
    ThisWorkbook.Names(i).Delete 
Next 
Application.Calculation = xlCalculationAutomatic 
+0

ありがとう!これは少し遅くなっていますが、どんなゲインが助けても遅くなります。 – Charteris

+0

@Charterisもしそれが本当に遅いのであれば、遅い部分は名前を削除するのではなく、名前へのすべての参照を範囲参照に変換することです。 – Slai

+0

ありがとうございます - その変換をオフにすることは可能ですか? – Charteris

0

私は、コードは非常にゆっくりと走っていた、すべての名前付き範囲を削除する同じ問題を抱えていました。ループが実行されている間、画面の更新と計算をオフにすることでこれを修正できます。

Sub deleteAllNames() 

Application.Calculation = xlCalculationManual 
Application.ScreenUpdating = False 

Dim xName As Name 

For Each xName In Application.ActiveWorkbook.Names 
     xName.Delete 
Next 

Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

End Sub 
関連する問題