Excel 是否清除图纸上指定范围内的命名范围?

Excel 是否清除图纸上指定范围内的命名范围?,excel,vba,Excel,Vba,清除图纸部分中所有命名范围的最佳方法是什么 比如: Sheets("A").Range("A1:D10").ClearNames 我不知道ClearNames,但我会这样做。样本: Option Explicit Sub DeleteNamedRanges() Dim targetWorksheet As Worksheet Dim targetRange As Range Dim nameObject As Name Dim namedRange As Range Di

清除图纸部分中所有命名范围的最佳方法是什么

比如:

Sheets("A").Range("A1:D10").ClearNames

我不知道ClearNames,但我会这样做。样本:

Option Explicit

Sub DeleteNamedRanges()
  Dim targetWorksheet As Worksheet
  Dim targetRange As Range
  Dim nameObject As Name
  Dim namedRange As Range
  Dim unionedRange As Range

  Set targetWorksheet = Worksheets("MySheetName")
  Set targetRange = targetWorksheet.Range("A1:D10")

  For Each nameObject In ActiveWorkbook.Names
    Set namedRange = nameObject.refersToRange
    If (namedRange.Worksheet.Name <> targetWorksheet.Name) Then GoTo Continue

    Set unionedRange = Application.Union(namedRange, targetRange)
    If (unionedRange.Address = targetRange.Address) Then
      namedRange.Value = "" ' namedRange.Clear
    End If

Continue:
  Next nameObject
End Sub
选项显式
子DeleteNamedRanges()
将targetWorksheet设置为工作表
变暗目标范围作为范围
名称对象作为名称
暗名称范围
Dim unionedRange As范围
设置targetWorksheet=工作表(“MySheetName”)
设置targetRange=targetWorksheet.Range(“A1:D10”)
对于Active工作簿中的每个nameObject.Names
设置namedRange=nameObject.refrestorange
如果是(namedRange.Worksheet.Name targetWorksheet.Name),则转到继续
Set unionedRange=Application.Union(namedRange,targetRange)
如果(unionedRange.Address=targetRange.Address),则
namedRange.Value=“”namedRange.Clear
如果结束
继续:
下一个名称对象
端接头

如果您想删除该区域内的名称,这应该可以做到,请注意,它不仅从目标区域完全删除名称。因此,A1:D10内外存在的范围也将被删除

Option Explicit

Public Sub DeleteRangeNames()
    Dim wsTarget As Worksheet
    Dim rTarget As Range
    Dim nTmp As Name

    'Determine the range to clear all names from
    Set wsTarget = Worksheets("enternamehere")
    Set rTarget = wsTarget.Range("A1:D10")

    'Loop through all Names in the worksheet
    For Each nTmp In ActiveWorkbook.Names
        'Check if they overlap (if no overlap the intersection is Nothing)
        If Not (Intersect(nTmp.RefersToRange, rTarget) Is Nothing) Then
            'Delete the Name object from the workbook
            nTmp.Delete
        End If
    Next nTmp
End Sub