【问题标题】:How to check if a cell is empty using VBA如何使用 VBA 检查单元格是否为空
【发布时间】:2014-05-14 23:11:49
【问题描述】:

我正在尝试在 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) = 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

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

【问题讨论】:

  • I8 是什么?那不应该是Range("I8") 还是一个控件名称
  • 您可以尝试查看此答案:Thread。希望这会有所帮助。
  • 如果I8 是一个单元格/范围,那么每个@mehow 应该是If Len(Range("I8").Value) = 0 ...。干杯。
  • 您可能还想将Option Explicit 作为所有代码的第一行 - 您尝试运行它时会立即标记此错误
  • 这是做什么的?我只是在If Len(Range("I8")) = 0 Then 行上方的行上写Option Explicit 吗?

标签: excel vba cell isnullorempty


【解决方案1】:

当您在 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 在您使用类似的未声明变量时抛出错误,而不是只是默默地猜测它应该如何处理。

【讨论】:

  • 谢谢。 :) 我已按照您的建议更改了代码,但是当我将 Option Explicit 放在代码顶部时,它只是说“编译错误:内部过程无效”
【解决方案2】:

请参阅 cmets 了解您的代码为何不起作用。如果您的单元格为空,以下语句将评估 True

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

享受吧!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多