【问题标题】:Excel VBA stop msgbox display loop based on cell valueExcel VBA根据单元格值停止msgbox显示循环
【发布时间】:2021-04-20 19:05:53
【问题描述】:

我有一个 Excel 表格,其中包含许多不同的 if 语句和其他在 VBA 中运行的函数。我一直在兜圈子试图解决以下问题:

使用 If 语句,我想告​​诉用户他们为回答问题而输入的值是他们正在寻找大小的解决方案的不可用元素 - 这是用于大小/定价计算。我无法共享文件,并且下面的问题与问题无关(这意味着我无法从下拉列表中选择实际可用的选项 - 不仅如此)。

示例代码:

单元格 B25 中的问题 - “你想要这个蓝色的吗?” 回应:“是”、“否”

代码:

If Range("B35").Value = "Yes" Then
VBA.Interaction.MsgBox "Please contact Product Manager", , "Not available"
End If

选择“否”不应阻止其余代码的执行,也不应阻止用户完成表单的其余部分。现在,出现消息框并且可以单击“确定”,然后表单中的每个条目都会再次出现,因为 B35 的值当然没有改变。我尝试了所有不同的方式来退出例程,甚至将例程放在不同的模块中,但没有任何乐趣。

有人有什么想法吗?我在想一个辅助细胞可能有用,但我无法理解它。 谢谢

【问题讨论】:

  • 这里真的不足以回答这个问题,if 语句会起作用,但我猜你的逻辑结构不正确。
  • 您需要使用 bool 来限定 IF 语句,表示您是否已经检查过此单元格并引发错误

标签: excel vba msgbox


【解决方案1】:

没有看到您的实际工作表,并且仅从您提供的简单示例开始,我只能说您需要使用一个表示您是否已经引发此错误的变量来限定您的 IF 语句。例如:

Option Explicit

Public bChecked35 As Boolean


Sub abc()
    If Range("B35").Value = "Yes" And Not bChecked35 Then
        MsgBox "Please contact Product Manager", , "Not available"
        bChecked35 = True
    End If
End Sub

请注意,我定义了一个布尔变量来表示该单元格。我在模块级别定义了变量,所以只要工作簿处于打开状态,变量就会保持在范围内。

在您的情况下,您需要确定变量应具有的范围级别...何时“重置”它等等。

如果您有很多单元格要验证,也许您需要一个过程来创建布尔集合...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多