1

我正在尝试在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,无论如何都会弹出“请输入所需日期”消息框。

我也尝试过使用Count(I8) = 0, 和IfEmpty(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

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

4

2 回答 2

3

当您If Len(I8) = 0 Then在 VBA 中使用类似的东西时,它将假定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 抛出错误,而不是只是默默地猜测它应该如何处理它。

于 2014-05-14T14:37:53.297 回答
1

请参阅注释,了解您的代码为何不起作用。以下是评估True您的单元格是否为空的语句:

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

享受!

于 2014-05-14T15:11:49.390 回答