2016-04-11 13 views
0

VBAコードを実行すると、シートにフィルターを適用すると名前マネージャーに表示されない範囲名が作成されることが検出されました(範囲名は単にヘッダーまたはテーブル全体に関連付けられます) 。なぜこれが起こるか、そして/またはそれを防ぐ方法を知る方法はありますか?それは単なるExcelの不具合ですか?範囲名が名前マネージャーにない

私が実行しようとしたエラーは以下の通りであった原因VBAコードの一部:私はデバッグしたとき

For Each Rng In ActiveWorkbook.Names 
    Set Rng2 = Range(Rng) 
    If Not Intersect(Rng2, Range(rng1.Offset(1, 0), rng1.End(xlDown)).EntireRow) Is Nothing Then ActiveWorkbook.Names(Rng.Name).Delete 
Next Rng 

、私は(ちなみに、名前のオブジェクトである)私のRNGことに気づきました私が決して作成したことのない範囲に向けて指しています(それが入っているシートには他の範囲名がなく、決して入れていません) このシートに名前があることを確認するためにこのvbaコードを使用しました:

Sub test() 

Dim Rng As Name 

For Each Rng In Sheets("WindHail Zone 2").Names 
    'ActiveWorkbook.Names(Rng.Name).Delete 
    MsgBox Rng 
Next Rng 

End Sub 

最初の行からコメントブロックを削除しました。 fを2行目のforループで削除します。私はそのタブでフィルタを削除し、それを頼りにして、同じ問題に遭遇しました。

ありがとうございます!

+2

を試みるべきか。それを再現できる方法はありますか?どのような種類のフィルターですか?どのようなVBAコードですか?いくつかの情報が必要です。 – vacip

+1

あなたの投稿を編集して、コードスニペット、今まで試したことなどを詳細に記入してください。 –

答えて

1

your'reを達成しようとしているが、限り、「隠された」名前と範囲の交差点が関与しているとして、あなたは以下のものを考慮しなければならないものを私にとても明確ではない:

  • フィルタリングが隠された「名を作成しません同じシートに属さない範囲に適用された場合_FilterDatabase 『

  • 範囲の交差点ウォールドがエラーを返す」

    が、それらのすべては、文字列で終わる』

ので、ここであなただけ発生しません...

For Each Rng In ActiveWorkbook.Names 
    Set rng2 = Range(Rng) 
    If rng2.Parent.Name = rng1.Parent.Name And InStr(Rng.Name, "_FilterDatabase") = 0 Then 'the first check is for ranges belonging to the same worksheet and the second is for rng2 not deriving from any filtering 
     ' now you can safely "Intersect" 
     If Not Intersect(rng2, Range(rng1.Offset(1, 0), rng1.End(xlDown)).EntireRow) Is Nothing Then ActiveWorkbook.Names(Rng.Name).Delete 
    End If 
Next Rng 
+0

ありがとうございました! – daniel

+0

大歓迎です。 – user3598756

関連する問題