我在工作表中有一堆命名范围,每天必须清除它们。目前,我已经在VBA中像这样设置它:
Range("CustomList1").ClearContents
Range("CustomList2").ClearContents
Range("CustomList3").ClearContents
Range("CustomList4").ClearContents
Range("CustomList5").ClearContents
(+15 more)
没什么大不了的,但是我觉得必须有更好的方法来解决它。话虽这么说,但在进行一些搜索后,我并没有真正看到关于遍历多个命名范围的任何信息。有什么想法/想法吗?
答案 0 :(得分:2)
Dim i As Long
For i = 1 to 20
Range("CustomList" & i).ClearContents
Next
...类似的东西。
如果您要清除命名范围的某种命名约定,则可以执行以下操作,这意味着您无需更新代码...
Dim objName As Name
For Each objName In ThisWorkbook.Names
If InStr(1, objName.Name, "NamedRange", vbTextCompare) = 1 Then
With objName.RefersToRange
.Worksheet.Range(.Address).ClearContents
End With
End If
Next
答案 1 :(得分:1)
如果名称一致,Skin的解决方案将起作用,但如果不一致,则始终可以使用所有范围名称创建一个数组。
类似
RngArray = Array("CustomList1","CustomList2","CustomList3, etc.")
For i = 0 to 19
Range(RngArray(i)).ClearContents
Next
答案 2 :(得分:1)
Union的类型可能比循环更多,但它会在单个语句中完成操作。
Union(Range("CustomList1"), Range("CustomList2"), Range("CustomList3"), _
Range("CustomList4"), Range("CustomList5"), Range("CustomList6"), _
Range("CustomList7"), Range("CustomList8"), Range("CustomList9"), _
Range("CustomList10"), Range("CustomList11"), Range("CustomList12"), _
Range("CustomList13"), Range("CustomList14"), Range("CustomList15"), _
Range("CustomList16"), Range("CustomList17"), Range("CustomList18"), _
Range("CustomList19"), Range("CustomList20")).ClearContents
此方法可能更适合具有抽象或不同命名约定的命名范围。
答案 3 :(得分:1)