【问题标题】:Why is the following if statement not working in VBA?为什么以下 if 语句在 VBA 中不起作用?
【发布时间】:2019-06-14 04:39:10
【问题描述】:

我正在 Excel VBA 中的 BeforeSave Sub 下实现双 if 语句,但它不起作用。我的 Excel 工作表中有一个复选框,分别在选中或未选中时在 F11 中输出 TRUEFALSE。另外,如果我要填写在表格中的所有单元格都已填满,则单元格 A1 将从“”变为“”。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If Sheet2.Range("F11").Value = "TRUE" Then
If Sheet1.Range("A1").Value = "" Then
MsgBox "Sheet requires input(s). All cells must be filled."
Cancel = True
End If
End If

End Sub

预期的输出是,如果第一个 If 语句为真而第二个 If 为空,excel 将不会让我保存,但实际输出是它让我无论如何都可以保存。此外,如果第一个 If 为 False,无论第二个 if 输出如何,它都应该让我保存。

【问题讨论】:

  • 欢迎来到本站!查看tourhow-to-ask page,了解更多关于提出可以吸引高质量答案的问题的信息。您可以edit your question 提供更多信息。
  • If Sheet2.Range("F11").Value Then
  • 您是否尝试过在第二个 if 语句 (If Sheet1.Range("A1").Value = "" Then) 上设置断点来检查外部 if 语句是否计算结果为真? (代码在遇到断点时会暂停。因此,如果代码从未在第二个 if 语句的断点处暂停,那么第一个 if 语句总是失败。)

标签: excel vba


【解决方案1】:

我看到两个可能的原因:

  • 您指的是两个不同的工作表(Sheet1 和 Sheet2),对吗?
  • 您可能想要使用IsBlank() 工作表函数,而不是使用Value = ""

【讨论】:

  • "" 是函数的结果时,IsBlank() 会返回 true 吗?这就是我从代码上方最后一句话中解读情况的方式。
  • IsBlank() 给出 TRUE 或 FALSE 作为输出,可用作 IF 子句的输入。
  • 但是正如@Mistella 所说,如果空字符串的返回是由于=IF(1<>1,0,"") 之类的公式,那么 ISBLANK 将返回 FALSE。
  • 是的,我指的是两个不同的工作表,VBA 说 IsBlank 函数:找不到方法
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2018-05-11
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多