Excel VBA根据单元格值停止msgbox显示循环

问题描述

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

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

示例代码

单元格 B25 中的问题 - “您希望此为蓝色吗” 回复:“是”,“否”

代码

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

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

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

解决方法

没有看到你的实际工作表,只离开你提供的简单例子,我只能说你需要用一个变量来限定你的 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

请注意,我定义了一个布尔变量来表示那个单元格。我在模块级别定义了变量,因此只要工作簿处于打开状态,变量就一直在作用域内。

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

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