如果目标单元格中​​的公式超出特定值,则显示“消息框”的VBA代码

我试图写一个简单的macros来显示一个popup式窗口(vbOKOnly)如果一个单元格中的值超过了某个值。

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

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

谢谢!

您可以将以下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还依赖于位于其他电子表格中的数据,则如果更改该数据,则不会调用该macros。
  • 每次在你的工作表上发生变化时,将调用macros将被调用。 如果它有很多的公式(如1000年)可能会很慢。

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

  • 优点:如果A1的值与位于其他页面的单元格相关联,他的方法将起作用。
  • 缺点:如果您的工作表上有许多链接引用了其他工作表,他的方法将运行得慢一点。

结论 :如果A1仅取决于位于同一Worksheet_Calculate上的数据,请使用Worksheet_Calculate如果不是,则使用Worksheet_Calculate

本质上,您想要将代码添加到相关工作表的“ Calculate事件中。

在VBA编辑器的“项目”窗口中,双击要添加代码的工作表,并从编辑器窗口顶部的下拉菜单中分别select左侧和右侧的“工作表”和“计算”。

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

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

这样,每次工作表重新计算,它都会检查值是否大于0.5或50%。

我不认为消息框是最好的方法,因为您需要在循环中运行的VB代码来检查单元格内容,或者除非您计划手动运行macros。 在这种情况下,我认为最好是添加条件格式到单元格,以便将背景更改为红色(例如),如果该值超过上限。