![VBA 在继续进行之前检查范围内的所有单元格是否为空](https://linux22.com/image/1612709/VBA%20%E5%9C%A8%E7%BB%A7%E7%BB%AD%E8%BF%9B%E8%A1%8C%E4%B9%8B%E5%89%8D%E6%A3%80%E6%9F%A5%E8%8C%83%E5%9B%B4%E5%86%85%E7%9A%84%E6%89%80%E6%9C%89%E5%8D%95%E5%85%83%E6%A0%BC%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA.png)
我想在执行下一行代码之前进行检查。
我编写了一个像这样的简单结构,但是它会检查范围内的第一个单元格,如果该单元格为空,它会根据满足要求和 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