如何使用VBA检查单元格是否为空

时间:2014-05-14 13:50:54

标签: excel vba cell isnullorempty

我正在尝试在excel上创建一个表单,以便当人们不填写某些单元格时,他们会收到弹出错误消息。到目前为止,我制作了这段代码:

If Len(I8) = 0 Then
MsgBox "Please enter Required Date", vbExclamation
Exit Sub
ElseIf Len(D11) = 0 Then
MsgBox "Please enter your name", vbExclamation
Exit Sub
ElseIf Len(H11) = 0 Then
MsgBox "Please enter Work Phone", vbExclamation
Exit Sub
ElseIf Len(L11) = 0 Then
MsgBox "Please enter Home Phone", vbExclamation
Exit Sub
End If
MsgBox "All mandatory fields have been entered", vbExclamation
End Sub

这似乎有效,但当我向单元格I8添加文字时,无论如何都会弹出“请输入所需日期”msgbox。

我也尝试过使用Count(I8) = 0IfEmpty(I8) = True,但在vba中都未正确识别。

此外,如果我想要一个单元格没有填写时出现弹出消息,如果他们从下拉列表中选择“是”,该功能将是什么?到目前为止我已经写过了

ElseIf Range("D28") = "P16" And Len(Range("M30")) = 0 Then
MsgBox "Please Select whether this file is classified as confidential", vbExclamation
Exit Sub

但是我需要一个定义的函数,我不知道该选择什么。如果在第一个单元格中选择“是”,是否有更长的方法可以确保两个单元格都填满?

2 个答案:

答案 0 :(得分:3)

在VBA中使用If Len(I8) = 0 Then之类的内容时,会假设I8是变量。由于您显然没有定义该变量,Len(I8)将始终为零。

您应该使用Range("I8")甚至ActiveSheet.Range("I8").Value来获取该单元格中实际存在的值。

所以你的代码应该改为:

If Len(Range("I8")) = 0 Then
MsgBox "Please enter Required Date", vbExclamation
Exit Sub
ElseIf Len(Range("D11")) = 0 Then
MsgBox "Please enter your name", vbExclamation
Exit Sub
ElseIf Len(Range("H11")) = 0 Then
MsgBox "Please enter Work Phone", vbExclamation
Exit Sub
ElseIf Len(Range("L11")) = 0 Then
MsgBox "Please enter Home Phone", vbExclamation
Exit Sub
End If
MsgBox "All mandatory fields have been entered", vbExclamation
End Sub

要避免这些令人困惑的问题,您可以在模块的最顶部指定Option Explicit。这会导致excel在您使用未声明的变量时抛出错误,而不是只是静静地猜测它应该用它做什么。

答案 1 :(得分:1)

请参阅评论,了解您的代码无效的原因。如果您的单元格为空,则以下是评估True的语句:

IsEmpty(myCell)
myCell.Value = vbNullstring
Len(myCell) = 0

享受!