0

複数のシートを含むワークブックがあるとします。Name1ワークシート スコープとワークブック スコープには、名前を持つ多くの範囲があります。のすべてのインスタンスを削除するためにブックを通過するマクロを作成したいと考えていますName1

たとえば、Names Manager を開くと、次のように表示されます。

Name1, refers to: =Sheet1!A1, scope: Sheet1<br>
Name1, refers to: =Sheet2!D3, scope: Sheet2<br>
Name1, refers to: =Sheet1!A1, scope: Workbook

Name1すべてのsを削除したい

現在、Names("Name1").Deleteワークブック レベルでは機能しません。グローバルにスコープされた を処理するだけだと思いますName1。特定の名前に対応する名前のコレクションを操作する方法はありますか? これを行う最善の方法は何ですか?

4

1 に答える 1

1

次のマクロは、Name1開いているすべてのブックから のすべてのインスタンスを削除します

Sub deleteName()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        Dim i As Integer
        For i = wb.Names.Count To 1 Step -1
            If wb.Names(i).Name Like "*Name1" Then wb.Names(i).Delete
        Next i
    Next wb
End Sub

名前のコレクションを逆方向にループする必要があることに注意してください。これは、 をやろうとするとFor Each nName in wb.Names / If nName.Name Like "*Name1" Then nName.Delete / Next、Excel/VBA が などの予期しない結果をもたらすためError 424 Object Requiredです。この動作が発生する理由はわかりません。

于 2013-11-12T22:50:54.267 に答える