0

何時間も答えを探しましたが、もう検索できません。ワークブックまたはワークシートからすべての範囲名を削除することについて、多くの議論を見てきました。ただし、同じシートおよび/または同じワークブック内の他の範囲の他の範囲名を残しながら、単一の範囲から複数の範囲名を削除する必要があります。コードは次のようになりますか?:

Sub Delete_My_Named_Ranges()
   Dim nName As Name
   Dim wbk As Workbook
   Dim Sht As Worksheet
   Dim rgNm As Range, aCell As Range

   Set wbk = Workbooks("testRgNmDelete.xlsm")
   Set Sht = wbk.Worksheets("Sheet1")

   Set rgNm = Sht.Range("$A$1")

        For Each nName In ThisWorkbook.Names
            Set aCell = Range(nName)
            If Not Intersect(aCell, rgNm) Is Nothing Then
                nName.Delete
            End If
         Next
  End Sub

OK、上記のコードは固定範囲 ("$A:$1") で機能します。しかし、rgNm を固定範囲ではなく変数として設定できるようにする必要があります。ここに例を示します。エラーは現在、「Set aCell = Range(nName)」というステートメントにあります。

Private Sub cboProductType_Change()


Dim wbSKUM As Workbook
Dim ws As Worksheet, wsLUL As Worksheet, wsLU As Worksheet
Dim rgPTL As Range, rgTable1 As Range, rgA1 As Range, rgA1LU As Range
Dim rgNm As Range, rgFormula As Range, aCell As Range
Dim sFormula As String
Dim nName As Name

Set wbSKUM = Workbooks("XBS_SKU_Master.xlsm")
Set ws = wbSKUM.Worksheets("SKUMaster")
Set wsLUL = wbSKUM.Worksheets("LookupLists")
Set wsLU = wbSKUM.Worksheets("Lookup")
Set rgPTL = wsLUL.Range("ProdTypeLookUp")
Set rgTable1 = ws.Range("Table1")
    sFormula = "=SUBSTITUTE(SUBSTITUTE(F2,"" "",""_""),""-"","""")"


 'clear Product Type Lookup List (Column D) to be sure no data remains
 wsLUL.Activate
 Range(Range("F2"), Range("F2").End(xlDown)).Select
 Selection.Cells.Value = vbNullString
    Set rgNm = Selection

    For Each nName In ThisWorkbook.Names
            Set aCell = Range(nName)
            If Not Intersect(aCell, rgNm) Is Nothing Then
                nName.Delete
            End If
    Next

再度、感謝します!

4

2 に答える 2

1

rgName宣言後に設定していないため、そのエラーが発生しています。

これがあなたの質問に対する私の理解です。

範囲A1:A10Sheet1あり、セルA2に名前がNM1あり、セル A5 に名前がNM2あり、セル D10 に名前があるとします。NM3

そして、範囲内の名前を削除するコードが必要ですA1:A10ie NM1and NM2and notNM3

上記が必要な場合は、これを試してください

Option Explicit

Sub Sample()
    Dim rgName As Range, aCell As Range
    Dim nName As Name

    Set rgName = Sheets("Sheet1").Range("A1:A10")

    For Each nName In ThisWorkbook.Names
        Set aCell = Range(nName)
        If Not Intersect(aCell, rgName) Is Nothing Then nName.Delete
    Next
End Sub

もし私があなたの質問を誤解しているなら、あなたはそれを言い換えたいと思うかもしれませんか?

ファローアップ

これは、新しい VBA ユーザーとしての私にとって非常に便利なサイトでしたが、これらの小さなメモ以外に、このサイトに追加する方法がまったくわかりません。Excel 2010 のネーム マネージャーを想像してみてください。ネーム マネージャーには、すべて =Sheet1!$A$1 の 10 個の一意の名前があるとします。Sheet1!$A$1 に関連するこれらすべての名前を VBA コードで削除したいと考えています。他の名前をどこでも削除したくありません。– LostInData 3 分前

上記のコメントに基づいて、これを試してください

Option Explicit

Sub Sample()
    Dim nName As Name

    For Each nName In ThisWorkbook.Names
        If nName.RefersTo = "=Sheet1!$A$1" Then nName.Delete
    Next
End Sub
于 2013-03-28T19:00:27.993 に答える