Примените форматирование к диапазону, используя массив l oop - VBA - PullRequest
2 голосов
/ 05 февраля 2020

Используя VBA, я делаю для:

  • Установка двух диапазонов
  • Создание массива имен всех диапазонов
  • L oop массива для применения форматирование для каждого диапазона в массиве

НО в строке .Interior.Color = vbRed

я получаю следующую ошибку:

Ошибка времени выполнения '424' : Требуется объект

Код

Sub test()

    Dim rng1 As Range, rng2 As Range
    Dim strRanges As Variant
    Dim i As Long

    Set rng1 = Sheet1.Range("A1:D1")
    Set rng2 = Sheet2.Range("C5:H5")

    strRanges = Split("rng1,rng2", ",")

    For i = LBound(strRanges) To UBound(strRanges)
        With strRanges(i)
            .Interior.Color = vbRed
        End With
    Next i

End Sub

Я уже использовал:

With Range(strRanges(i))

вместо :

With strRanges(i)

без удачи!

Любая помощь будет благодарна.

1 Ответ

3 голосов
/ 05 февраля 2020
  1. Вы можете сделать это в одну строку, если диапазоны в одном листе

    Sheet1.Range("A1:D1,C5:H5").Interior.Color = vbRed
    
  2. Вы можете использовать объединение если диапазоны в одном листе

    Dim rng1 As Range, rng2 As Range
    Set rng1 = Sheet1.Range("A1:D1")
    Set rng2 = Sheet1.Range("C5:H5")
    Union(rng1, rng2).Interior.Color = vbRed
    
  3. Вы можете использовать реальные массивы для своих диапазонов, если они находятся в разных листах

    Sub test()    
        Dim rng(1 To 2) As Range
        Set rng(1) = Sheet1.Range("A1:D1")
        Set rng(2) = Sheet2.Range("C5:H5")
    
        Dim i As Long
        For i = LBound(rng) To UBound(rng)
            With rng(i)
                .Interior.Color = vbRed
            End With
        Next i    
    End Sub
    
  4. Если у вас нет имен переменных диапазона с нумерацией, вы можете использовать другой массив:

    Sub test()    
        Dim rngABC As Range, rngXYZ As Range
        Set rngABC = Sheet1.Range("A1:D1")
        Set rngXYZ = Sheet1.Range("C5:H5")
    
        Dim ArrRng() As Variant
        ArrRng = Array(rngABC, rngXYZ)
    
        Dim rng As Variant
        For Each rng In ArrRng
            rng.Interior.Color = vbRed
        Next rng     
    End Sub
    

Обратите внимание, что если вы думаю, что вы должны использовать нумерованные имена переменных, такие как

Dim rng1 As Range, rng2 As Range

, это всегда явный признак использования массива:

Dim rng(1 To 2) As Range

нумерованные имена переменных - плохая практика. Всегда выбирайте значимые имена.

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