VBA получает «Требуется объект» при попытке перебрать ячейки в диапазонах в массивах - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь сделать цикл «Для каждого», где код будет получать диапазоны, хранящиеся в массиве, и проходить через них, изменяя цвет ячейки на оранжевый, если ячейка пуста.Я могу ввести каждую ячейку в массиве, но для экономии места и времени я указал диапазоны.Я могу запустить массив через один цикл for, но тогда он будет рассматривать весь диапазон как одно значение, поэтому я пытаюсь также циклически проходить через диапазоны, проходя по каждой ячейке.Я получаю ошибку «Требуется объект» и пытаюсь понять, где я совершаю ошибку.

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

Private Sub CommandButton2_Click()

Dim CellCheckList As Variant
Dim ChRng As Ranges
Dim ChCell As Range


CellCheckList = Array("E1", "I1", "B3:B8", "B9:F9", "B14:F14", "J14:J19", "B25", "C26", "B27:B28", _
                "C29", "B30:F31", "C32:C33", "B34:F35", "C36", "B37:B39", "B42:F42", "C43:C44", _
                "B45", "B48:B56", "C54:F54", "B77", "B78:B84", "C82:F82", "B88:F88", "C89", _
                "C92:C94", "B95:B97", "C97:F97", "C98")

    For Each ChRng In CellCheckList
        For Each ChCell In ChRng
            If IsEmpty(Sheets("time sheet").Range(ChCell)) = True Then
                Sheets("time sheet").Range(ChCell).Interior.Color = 49407 
            Else
                Sheets("time sheet").Range(ChCell).Interior.Color = 16772300
            End If
        Next
    Next

Ответы [ 2 ]

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

Попробуйте:

Option Explicit

Private Sub CommandButton2_Click()

    Dim rngList As Range, cell As Range

    With ThisWorkbook.Worksheets("time sheet")

        Set rngList = .Range("E1, I1, B3:B8, B9:F9, B14:F14, J14:J19, B25, C26," & _
                                "B27:B28,C29, B30:F31, C32:C33, B34:F35, C36, B37:B39," & _
                                "B42:F42, C43:C44, B45, B48:B56, C54:F54, B77, B78:B84," & _
                                "C82:F82, B88:F88, C89,C92:C94, B95:B97, C97:F97, C98")

        For Each cell In rngList

            If IsEmpty(cell) = True Then
                cell.Interior.Color = 49407
            Else
                cell.Interior.Color = 16772300
            End If

        Next cell

    End With

End Sub
0 голосов
/ 25 апреля 2019

На самом деле, вы все сделали, требуются лишь незначительные изменения.Обращаясь к каждому элементу массива CellCheckList, необходимо создать отдельные диапазоны вручную ( проверено ):

Dim CellCheckList As Variant
Dim ChRng As Range
Dim ChCell As Variant
Dim item As Variant


CellCheckList = Array("E1", "I1", "B3:B8", "B9:F9", "B14:F14", "J14:J19", "B25", "C26", "B27:B28", _
                "C29", "B30:F31", "C32:C33", "B34:F35", "C36", "B37:B39", "B42:F42", "C43:C44", _
                "B45", "B48:B56", "C54:F54", "B77", "B78:B84", "C82:F82", "B88:F88", "C89", _
                "C92:C94", "B95:B97", "C97:F97", "C98")

For Each item In CellCheckList
    Set ChRng = Sheets("time sheet").Range(item)
    For Each ChCell In ChRng
        If IsEmpty(ChCell) = True Then
            ChCell.Interior.Color = 49407
        Else
            ChCell.Interior.Color = 16772300
        End If
    Next
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...