【问题标题】:Is there a vba code which opens a msgbox when cell value is not equal to "X"?当单元格值不等于“X”时,是否有打开 msgbox 的 vba 代码?
【发布时间】:2020-09-27 02:06:09
【问题描述】:

我不精通 vba,所以我认为这是最好的提问地点。我的目标是在特定单元格不等于“X”值时出现一个 msgbox。这是我下面的代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim myCell As Range

For Each myCell In Range("G4:G160")
    If myCell.Value <> 17521 Then
        MsgBox "INCORRECT SKU RECHECK PALLET AND INFORM SUPERVISOR"
        Exit Sub
    End If
Next myCell
End Sub

单元格值取自另一个单元格,因此未手动输入。 当我运行这个宏时,它会在我每次更改单元格或单击时出现。数字正确时也会出现。我只需要这个 msgbox 仅在它不等于该值时出现。

我还希望消息为红色。如果这很容易,请让我知道该怎么做或改变。对我来说最大的学习曲线,因为我总是避免使用 vba 代码。

编辑:请看下面的链接。右边的 1,2 和 3 的条形码是正确的,可以扫描到 B4 等等,错误的 4 和 5。我希望 msgbox 或用户窗体能直观地显示错误的。如果输入正确,则不会弹出。

enter image description here https://1drv.ms/x/s!AvRcvV5GEpBXnRIrzT2xDTv0iTQh?e=tV3LeN

【问题讨论】:

  • 要获得红色文本,只需创建自己的对话框作为用户表单。关于你问题的另一部分。你到底想达到什么目的。目前,您正在针对单个值检查 10 个单元格。如果其中任何一个 not 等于 17521,您将看到弹出窗口。在您的问题中,您说的是单数而不是复数。是哪个?
  • 另外,如果这些值因公式而发生变化(“非手动输入”),您无法通过Worksheet_Change(在那些特定单元格上)捕获它,所以我猜这就是你选择SelectionChange 的原因?如果是这样,当您单击另一个单元格等时,您会得到弹出窗口,这并不奇怪。
  • 那么您为什么不在B4 上运行Worksheet_Change 事件呢?首先,您将检查TargetB4 之间的Intersect 结果,如果是,请检查扫描结果是否为17521 并采取相应措施?如果公式可以,VBA 也可以!这将防止在更改其他单元格时不断弹出消息和检查。
  • 我强烈建议您将示例数据添加到您的问题中,而不是链接文件。人们真的不应该点击该链接来下载他们不知道的文件。

标签: excel vba range msgbox


【解决方案1】:

您的代码似乎是正确的。一旦您在目标工作表中选择了另一个单元格,此代码就会运行,如果“G4:G160”范围内的 所有值 等于 17521,则该代码将永远不会显示 msgbox。如果出现,肯定有至少一个值 17521。 我建议改用Change Event

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myCell As Range

    For Each myCell In Range("G4:G160")

        If (Not IsEmpty(myCell)) And myCell.Value <> 17521 And myCell.Value <> "" Then

            MsgBox "INCORRECT SKU RECHECK PALLET AND INFORM SUPERVISOR", vbCritical

            Exit Sub
        End If

    Next myCell
End Sub

关于 msgbox 的红色,您无法更改 msgbox 的颜色。你有两个选择:

  1. Critical 图标显示为:
MsgBox "INCORRECT SKU RECHECK PALLET AND INFORM SUPERVISOR", vbCritical

在这种情况下,您会看到如下内容:

  1. 创建一个用户窗体并调整其字体颜色,然后显示它而不是 MsgBox。 如果您想使用第二个选项,请告诉我,然后帮助您创建它。

【讨论】:

  • vbCritical 非常有用,谢谢!但是看到 UserForm 似乎在视觉上更有用,我该如何将它添加到代码中而不是 msgbox?
  • 不客气 :)。然后,要添加一个用户窗体,请参阅this 说明性示例,其中详细解释了所有步骤。然后,如果我的回答能够解决您的问题,请接受此回答作为解决方案,以帮助其他有类似问题的人。谢谢!
  • 嘿,亲爱的@MarcHipolito。永远不要为提问而道歉。我们都在这里互相帮助并提出问题。特别感谢 StackOverflow 管理员 :-)。关于您的新问题,我修改了答案以处理单元格为空的情况。请看我的回答,看看是否有帮助。我已经准备好听到你的更多消息了。
  • 您可以与我分享您的工作簿吗?我需要它来重新生成错误并找到错误的根源。我的电子邮件地址是 saeedsayyadipour@gmail.com
  • 您的错误是由 DataValidation 标准引起的。因为你的标准只接受一个整数,但你的公式说如果 IF 条件不满足,把"" 这不是一个整数。简而言之,您的数据验证标准与 G 列中的公式不一致。我认为当您通过 VBA 控制 G 列中的值时,您不再需要数据验证。只需删除它,一切都会正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多