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

我试图在Excel中创build一个表单,这样当人们没有填写某些单元格时,他们会popup错误消息。 到目前为止,我做了这个代码:

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 ,“请input必填date”msgboxpopup反正。

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

另外,如果我们希望在单元格未填写的情况下popup消息,如果他们从下拉列表中select“是”,那么函数是什么? 到目前为止我写了

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

但我需要一个定义的函数,我不知道要选什么。 是否有更长的路要做,以确保两个单元格填写出来,如果他们在第一个单元格中select是的?

当你使用类似If Len(I8) = 0 Then在VBA中,它将假定I8是一个variables。 既然你显然没有定义这个variables, 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在使用未声明的variables时抛出错误,而不是只是默默地猜测它应该如何处理。

请参阅评论为什么您的代码不起作用。 以下是将在单元格为空时评估为True语句:

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

请享用!