Vba 检查是否在多个范围内填写了值

Vba 检查是否在多个范围内填写了值,vba,excel,Vba,Excel,我想检查某个范围是否为空。因此,我编写了以下代码 Sub end_calculation1() If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then MsgBox "Please fill in all the answers in range D22:D27" End If End Sub 子端_计算1() 如果工作表function.CountA(范围(“D22:D27”))小于6,则 Msg

我想检查某个范围是否为空。因此,我编写了以下代码

Sub end_calculation1()

    If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then
        MsgBox "Please fill in all the answers in range D22:D27"
    End If

End Sub
子端_计算1()
如果工作表function.CountA(范围(“D22:D27”))小于6,则
MsgBox“请填写D22:D27范围内的所有答案”
如果结束
端接头
这是可行的,但实际上我想检查两个范围。因此,不仅D22:D27,而且D29:D30


关于如何使其工作,您有什么想法吗?

如果要检查的范围不太多,您可以添加更多的
IF
语句:

Public Sub end_calculation1()
    If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then
        MsgBox "Please fill in all the answers in range D22:D27"
    ElseIf WorksheetFunction.CountA(Range("E22:E27")) < 6 Then
        MsgBox "Please fill in all the answers in range E22:E27"
    End If
End Sub
Public Sub-end_calculation1()
如果工作表function.CountA(范围(“D22:D27”))小于6,则
MsgBox“请填写D22:D27范围内的所有答案”
ElseIf WorksheetFunction.CountA(范围(“E22:E27”))<6然后
MsgBox“请填写E22:E27范围内的所有答案”
如果结束
端接头
对于多个范围,您可以使用一个过程在这些范围内循环,并调用一个函数来检查每个范围:

Public Sub end_calculation_update()
    Dim rngs As Variant, i As Byte

    rngs = Array("D22:D27", "E22:E27", "F22:F27")
    For i = 0 To UBound(rngs)
        If (emptyRange(CStr(rngs(i)))) Then
            MsgBox "Please fill in all the answers in range " & rngs(i)
            Exit Sub
        End If
    Next i

End Sub
Private Function emptyRange(rngAddress As String) As Boolean
    emptyRange = WorksheetFunction.CountA(Range(rngAddress)) < 6
End Function
公共子端\u计算\u更新()
Dim RNG作为变量,i作为字节
rngs=阵列(“D22:D27”、“E22:E27”、“F22:F27”)
对于i=0至UBound(rngs)
如果(空量程(CStr(rngs(i))),则
MsgBox“请填写范围内的所有答案”&rngs(i)
出口接头
如果结束
接下来我
端接头
私有函数emptyRange(rngAddress作为字符串)作为布尔值
emptyRange=WorksheetFunction.CountA(范围(rngAddress))<6
端函数
根据评论进行更新
您可以在一行中检查所有范围:

Public Sub end_calculation_revised()
    Dim rng As Range
    Set rng = Range("D22:D27,D29:E30")

    If (WorksheetFunction.CountA(rng) < rng.Cells.Count) Then
        MsgBox "Please fill in all the answers in range " & rng.Address
    End If
End Sub
公共子端\u计算\u修订()
变暗rng As范围
设置rng=范围(“D22:D27,D29:E30”)
如果(工作表函数.CountA(rng)
如果要检查的范围不太多,可以添加更多的
IF
语句:

Public Sub end_calculation1()
    If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then
        MsgBox "Please fill in all the answers in range D22:D27"
    ElseIf WorksheetFunction.CountA(Range("E22:E27")) < 6 Then
        MsgBox "Please fill in all the answers in range E22:E27"
    End If
End Sub
Public Sub-end_calculation1()
如果工作表function.CountA(范围(“D22:D27”))小于6,则
MsgBox“请填写D22:D27范围内的所有答案”
ElseIf WorksheetFunction.CountA(范围(“E22:E27”))<6然后
MsgBox“请填写E22:E27范围内的所有答案”
如果结束
端接头
对于多个范围,您可以使用一个过程在这些范围内循环,并调用一个函数来检查每个范围:

Public Sub end_calculation_update()
    Dim rngs As Variant, i As Byte

    rngs = Array("D22:D27", "E22:E27", "F22:F27")
    For i = 0 To UBound(rngs)
        If (emptyRange(CStr(rngs(i)))) Then
            MsgBox "Please fill in all the answers in range " & rngs(i)
            Exit Sub
        End If
    Next i

End Sub
Private Function emptyRange(rngAddress As String) As Boolean
    emptyRange = WorksheetFunction.CountA(Range(rngAddress)) < 6
End Function
公共子端\u计算\u更新()
Dim RNG作为变量,i作为字节
rngs=阵列(“D22:D27”、“E22:E27”、“F22:F27”)
对于i=0至UBound(rngs)
如果(空量程(CStr(rngs(i))),则
MsgBox“请填写范围内的所有答案”&rngs(i)
出口接头
如果结束
接下来我
端接头
私有函数emptyRange(rngAddress作为字符串)作为布尔值
emptyRange=WorksheetFunction.CountA(范围(rngAddress))<6
端函数
根据评论进行更新
您可以在一行中检查所有范围:

Public Sub end_calculation_revised()
    Dim rng As Range
    Set rng = Range("D22:D27,D29:E30")

    If (WorksheetFunction.CountA(rng) < rng.Cells.Count) Then
        MsgBox "Please fill in all the answers in range " & rng.Address
    End If
End Sub
公共子端\u计算\u修订()
变暗rng As范围
设置rng=范围(“D22:D27,D29:E30”)
如果(工作表函数.CountA(rng)
单元格D28总是满的还是空的

If WorksheetFunction.CountA(Range("D22:D30")) < 9 Then
    MsgBox "Please fill in all the answers in range D22:D27 and D:28:D30"
End If
如果工作表function.CountA(范围(“D22:D30”)<9,则
MsgBox“请填写D22:D27和D:28:D30范围内的所有答案”
如果结束
如果您不想在检测中包括单元D28,那么在第一条语句之后再加一条If语句即可

    Sub end_calculation1()

        If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then
            MsgBox "Please fill in all the answers in range D22:D27"
            Exit Sub
        End If

        If WorksheetFunction.CountA(Range("D28:D30")) < 6 Then
            MsgBox "Please fill in all the answers in range D28:D30"
        End If
    End Sub
子端_计算1()
如果工作表function.CountA(范围(“D22:D27”))小于6,则
MsgBox“请填写D22:D27范围内的所有答案”
出口接头
如果结束
如果工作表function.CountA(范围(“D28:D30”))小于6,则
MsgBox“请填写D28:D30范围内的所有答案”
如果结束
端接头
退出子按钮用于阻止用户收到2条错误消息


如果您想更进一步,可以维护一个“错误字符串”,将错误消息添加到字符串中,并在If语句末尾检测该字符串是否为空。通过这种方式,您可以一次性捕获所有错误,并向用户提供尚未完成的单元格列表。

单元格D28始终是满的还是空的

If WorksheetFunction.CountA(Range("D22:D30")) < 9 Then
    MsgBox "Please fill in all the answers in range D22:D27 and D:28:D30"
End If
如果工作表function.CountA(范围(“D22:D30”)<9,则
MsgBox“请填写D22:D27和D:28:D30范围内的所有答案”
如果结束
如果您不想在检测中包括单元D28,那么在第一条语句之后再加一条If语句即可

    Sub end_calculation1()

        If WorksheetFunction.CountA(Range("D22:D27")) < 6 Then
            MsgBox "Please fill in all the answers in range D22:D27"
            Exit Sub
        End If

        If WorksheetFunction.CountA(Range("D28:D30")) < 6 Then
            MsgBox "Please fill in all the answers in range D28:D30"
        End If
    End Sub
子端_计算1()
如果工作表function.CountA(范围(“D22:D27”))小于6,则
MsgBox“请填写D22:D27范围内的所有答案”
出口接头
如果结束
如果工作表function.CountA(范围(“D28:D30”))小于6,则
MsgBox“请填写D28:D30范围内的所有答案”
如果结束
端接头
退出子按钮用于阻止用户收到2条错误消息


如果您想更进一步,可以维护一个“错误字符串”,将错误消息添加到字符串中,并在If语句末尾检测该字符串是否为空。这样,您可以一次性捕获所有错误,并向用户提供尚未完成的单元格列表。

您是否考虑过只为第二个范围添加第二个
IF
语句,因为它按原样工作?WorksheetFunction.counta(范围(“d2:d27”)、范围(“d29:d30”))您是否考虑过只为第二个范围添加第二个
IF
语句,因为它按原样工作?WorksheetFunction.counta(范围(“d2:d27”)、范围(“d29:d30”))我会添加我会添加