【问题标题】:VBA code to show Message Box popup if the formula in the target cell exceeds a certain value如果目标单元格中​​的公式超过某个值,则 VBA 代码显示消息框弹出窗口
【发布时间】:2017-02-16 23:50:01
【问题描述】:

如果单元格中的值超过某个值,我正在尝试编写一个简单的宏来显示弹出窗口 (vbOKOnly)。

我基本上有一个包含产品和折扣的工作表。我在一个单元格中有一个公式,比如 A1,它将折扣显示为所有条目的有效折扣百分比(50% 或 0.5)。

我正在寻找的是在单元格 A1 的值超过 50% 时显示消息框的代码,因为另一个单元格的输入将折扣推到了 50% 以上。

谢谢!

【问题讨论】:

  • 您知道条件格式吗?您是否有理由更喜欢 MsgBox 而不是条件格式?

标签: vba excel messagebox


【解决方案1】:

您可以在工作表中添加以下 VBA 代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") > 0.5 Then
        MsgBox "Discount too high"
    End If
End Sub

每次在工作表上更改单元格时,它都会检查单元格A1的值。

注意事项:

  • 如果 A1 还依赖于位于其他电子表格中的数据,则如果您更改该数据,宏将不会被调用。
  • 每次您的工作表发生变化时都会调用宏。如果它有很多公式(如 1000 秒),它可能会很慢。

Widor 使用不同的方法(Worksheet_Calculate 而不是Worksheet_Change):

  • 优点:如果 A1 的值链接到位于其他工作表中的单元格,他的方法将有效。
  • 缺点:如果您的工作表上有许多引用其他工作表的链接,他的方法会运行得有点慢。

结论:如果A1只依赖于同一张表上的数据,则使用Worksheet_Change,否则使用Worksheet_Calculate

【讨论】:

  • 是的,你是对的。我删除了我的帖子。好像我误读了这个问题:) +1 是为了让它正确:)
  • @SiddharthRout 老实说,我首先回答了数据验证,直到我阅读了问题的第 3 行;)
  • 嘿,感谢所有 cmets 并回答大家。我几乎完全通过使用/需要学习了 VBA(以及可用的子程序和函数)。我确实计划将所有数据/参考资料保存在同一张纸上。再次感谢大家的帮助!
【解决方案2】:

基本上你想将代码添加到相关工作表的Calculate 事件中。

在 VBA 编辑器的项目窗口中,在编辑器窗口顶部的下拉列表中双击要添加代码的工作表,然后选择左侧和右侧的“工作表”和“计算”分别。

或者,将以下代码复制到您要使用的工作表的编辑器中:

Private Sub Worksheet_Calculate()

If Sheets("MySheet").Range("A1").Value > 0.5 Then
    MsgBox "Over 50%!", vbOKOnly
End If

End Sub

这样,每次工作表重新计算时,它都会检查值是 > 0.5 还是 50%。

【讨论】:

    【解决方案3】:

    我不认为消息框是解决此问题的最佳方式,因为您需要循环运行 VB 代码来检查单元格内容,或者除非您打算手动运行宏。在这种情况下,我认为如果值超过上限,最好向单元格添加条件格式以将背景更改为红色(例如)。

    【讨论】:

    • @assylias 我正在考虑按照本地化脚本的思路来关注所述单元格,如果使用您提供的方法,那么真正不需要循环,但正如您所说的那样电子表格的运行时间越长。
    • @assylias 在搜索主题时发现了这个。其实马特是对的。虽然在 VBa 的语法中没有使用循环,但 Worksheet_Change 实际上是一个常量“循环”调用。换句话说,这是对“有什么事情发生了吗?”的内部调用。一遍又一遍,每毫秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多