我在工作表中有一堆命名范围,每天必须清除。目前我在VBA中设置如下:
Range("CustomList1").ClearContents
Range("CustomList2").ClearContents
Range("CustomList3").ClearContents
Range("CustomList4").ClearContents
Range("CustomList5").ClearContents
(+15 more)
这并不是什么大不了的事,但我觉得必须有一个更好的方法来实现它。在做了一些搜索之后,我没有看到任何关于循环多个命名范围的事情。有关于此的任何想法/想法?
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
如果名称一致,Skin的解决方案将起作用,但如果不一致,您可以始终创建一个包含所有范围名称的数组。
就像是
RngArray = Array("CustomList1","CustomList2","CustomList3, etc.")
For i = 0 to 19
Range(RngArray(i)).ClearContents
Next
联合可能比循环更多地键入,但它在单个语句中完成操作。
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
此方法可能更适合具有抽象或不相似命名约定的命名范围。