VBA 在继续进行之前检查范围内的所有单元格是否为空

VBA 在继续进行之前检查范围内的所有单元格是否为空

我想在执行下一行代码之前进行检查。

我编写了一个像这样的简单结构,但是它会检查范围内的第一个单元格,如果该单元格为空,它会根据满足要求和 GoTo 标签转到执行下一步。

我需要它做的是检查所有单元格,并且只有当所有单元格都为空时才继续(在单独检查每个单元格后不进入下一步)。如果其中一个单元格不为空 - 子程序应该退出。

是否可以使用这样的代码来完成此操作,或者在这种情况下我是否需要采用不同的方法?

Sub Check_and_execute
Dim Cell As Range

    For Each Cell In ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
        If Cell.Value = "" Then
            GoTo NextStep
        Else
            MsgBox "Not all cells are empty."
            GoTo EndSub
        End If
    Next

NextStep:
'code

EndSub:
End Sub

答案1

像这样吗?

Sub Check_and_execute
Dim Cell As Range
Dim CellsEmpty as boolean
CellsEmpty = True

For Each Cell In ThisWorkbook.Sheets("Sheet1").Range("A1:A10")
    If Cell.Value <> "" Then 
        CellsEmpty = False
        Exit for
    End if
Next

If CellsEmpty = True then
    'code
Else
    MsgBox "Not all cells are empty."
End if

End Sub

答案2

无需循环:

Sub Check_and_execute()
    If Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("Sheet1").Range("A1:A10")) > 0 Then
        MsgBox "Not all cells are empty."
        Exit Sub
    End If

    'code
End Sub

答案3

我不确定这是否更快,但它更短。您可以使用一行代码检查范围是否为空白(包括将空字符串计为空白):

rg.Cells.Count = WorksheetFunction.CountBlank(rg)

您可以将其写为一个函数,当您需要测试某个范围是否全部为空白时调用:

Function allBlank(rg As Range) As Boolean
    allBlank = (rg.Cells.Count = WorksheetFunction.CountBlank(rg))
End Function

您可以在宏中使用它:

Sub Check_and_execute()
    If Not allBlank(ThisWorkbook.Sheets("Sheet1").Range("A1:A10")) Then
        MsgBox "Not all cells are empty"
        Exit Sub
    Else
        'your code
        ' ...
        ' ...
    End If
End Sub

相关内容