循环不更新range.row或range.column

时间:2018-07-19 10:52:58

标签: excel-vba

我试图为我的电子表格做一个简单的循环,在其中循环遍历一个范围并检查行是否为空,如果不是,则循环遍历一系列列并检查它们是否为空以及是否为空然后设置一条消息。

问题在于,每次循环时ro.value和col.value都正确更新,但列数和行数不正确,因此无论行或列的空白单元格是多少,我设置的消息始终相同

这是我的代码:

Dim RoRange As range
Dim Ro As range
Dim Col As range
Dim ColRange As range
Set RoRange = Worksheets("Home").range("LineDescs")
Set ColRange = Worksheets("Home").range("F24:N24")

For Each Ro In RoRange.Rows
    If Ro.Value <> "" Then
        For Each Col In ColRange.Columns
            If Col.Value = "" Then
                Set_Message ("Cell " & ColRange.Column & ":" & RoRange.Row & " is Empty!")
                Exit Sub
            End If
        Next

    End If

Next

“ LineDescs”是我的电子表格中的一个命名范围。 请问您是否需要任何解释的感谢!

2 个答案:

答案 0 :(得分:1)

您的消息应引用RoCol,因为它们是循环中引用的变量。 RoRangeColRange是固定的,因此您的消息将始终相同。

(请注意,要检查一系列单元格的值,您必须遍历每个单元格。)

For Each Ro In RoRange.Rows
    If Ro.Value <> "" Then
        For Each Col In ColRange.Columns
            If Col.Value = "" Then
                Set_Message ("Cell " & Col.Column & ":" & Ro.Row & " is Empty!")
                Exit Sub
            End If
        Next

    End If

Next

答案 1 :(得分:1)

检查Excel中的整个Row或整个Column是否为空,像这样:

Sub TestMe()
    Debug.Print Rows(1) = ""
End Sub

抛出Type mismatch (Error 13)。这正是这里发生的事情:

For Each Ro In RoRange.Rows
    If Ro.Value <> "" Then

因此,如果要检查行是否没有任何填写的单元格,则可以执行以下操作:

Sub TestMe()

    Dim myCell As Range
    Dim myRow As Range
    Dim wks As Worksheet: Set wks = Worksheets(1)

    With wks
        For Each myRow In .Range("A1:B10").Rows

            For Each myCell In myRow.Cells
                If myCell <> "" Then
                    .Cells(myCell.Row, 3) = "NOT EMPTY"
                    .Cells(myCell.Row, 3).Interior.Color = vbCyan
                End If
            Next myCell

            With .Cells(myRow.Row, 3)
                If .Value2 <> "NOT EMPTY" Then
                    .Value2 = "EMPTY"
                    .Interior.Color = vbRed
                End If
            End With
        Next
    End With
End Sub

enter image description here