Arrays VBA get";“所需对象”;尝试在数组中范围内的单元格中循环时

Arrays VBA get";“所需对象”;尝试在数组中范围内的单元格中循环时,arrays,excel,vba,for-loop,Arrays,Excel,Vba,For Loop,我试图创建一个“For Each”循环,代码将获取存储在数组中的范围,并在其中循环,如果单元格为空,则将单元格的颜色更改为橙色。 我可以输入数组中的每个单元格,但为了节省空间和时间,我指定了范围。我可以通过一个for循环运行数组,但是他会将整个范围视为一个值,所以我也尝试通过范围循环,通过每个单元格循环。 我犯了一个“需要对象”的错误,我很难理解我在哪里犯了错误 我试图确定变量的不同数据类型,因为我相信这就是错误所在,这是没有结果的 Private Sub CommandButton2_Clic

我试图创建一个“For Each”循环,代码将获取存储在数组中的范围,并在其中循环,如果单元格为空,则将单元格的颜色更改为橙色。 我可以输入数组中的每个单元格,但为了节省空间和时间,我指定了范围。我可以通过一个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
尝试:

尝试:


事实上你已经做得很好了,只需要一些小的改动。参考
单元格清单
数组的每一项,您需要手动构建单个范围(已测试):


事实上你已经做得很好了,只需要一些小的改动。参考
单元格清单
数组的每一项,您需要手动构建单个范围(已测试):


数组中的项目不是范围,它们是范围的地址-即字符串而不是对象。数组中的项目不是范围,它们是范围的地址-即字符串而不是对象。+++更好的方法:)是的,我同意。:-++一个更好的方法:)是的,我同意。:-)
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
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