Выполнение одной и той же операции на нескольких именованных диапазонах - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть несколько именованных диапазонов на листе, которые должны очищаться каждый день. В настоящее время я настроил его в VBA следующим образом:

Range("CustomList1").ClearContents
Range("CustomList2").ClearContents
Range("CustomList3").ClearContents
Range("CustomList4").ClearContents
Range("CustomList5").ClearContents
(+15 more)

Не очень большое дело, но я чувствую, что должен быть лучший способ сделать это. Это сказанное после некоторого поиска, я действительно не видел ничего о циклическом прохождении нескольких именованных диапазонов. Есть идеи / мысли по этому поводу?

Ответы [ 4 ]

2 голосов
/ 25 апреля 2019
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 голос
/ 28 апреля 2019

Я бы сделал это немного по-другому.

Я бы сохранил имена под одним именем в Formula ==> Диспетчере имен , как показано ниже.

enter image description here

И тогда я буду использовать только ниже везде, где.Нет необходимости в нескольких строках кода каждый раз, когда вы хотите очистить диапазон.

Range("MyCustomList").ClearContents
1 голос
/ 25 апреля 2019

Объединение может быть более типизированным, чем цикл, но завершает операцию одним оператором.

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

Этот метод, вероятно, лучше подходит для именованных диапазонов с абстрактными или разнородными соглашениями об именах.

1 голос
/ 25 апреля 2019

Решение скина будет работать, если имя непротиворечиво, но если нет, вы всегда можете создать массив со всеми именами диапазонов.

что-то вроде

RngArray = Array("CustomList1","CustomList2","CustomList3, etc.") For i = 0 to 19 Range(RngArray(i)).ClearContents Next

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...