2016-06-17 57 views
0

我想检查某个范围是否为空。所以我写了下面的代码检查是否有多个范围内的值填充

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 

这个工程,但实际上我想检查两个范围。所以不仅是D22:D27还有D29:D30。

关于如何让这项工作有任何想法?

+0

你是否考虑过为第二个范围添加第二个'IF'语句,因为它的工作原样? – Dave

+0

WorksheetFunction.counta(范围(“d2:d27”),范围(“d29:d30”)) –

回答

1

如果没有太多的范围要检查你可以添加更多的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_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 

UPDATE:

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 
+1

我会添加

+0

好点@nathan_sav。答案更新使用这个想法。 – lonestorm

1

单元格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 

如果您不想在检测中包含单元格D28,那么只需在第一个if语句之后添加另一个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 

Exit Sub在那里停止用户获取2条错误消息。

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

相关问题