10

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

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

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

谢谢!

4

3 回答 3

18

您可以将以下 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 的值链接到位于其他工作表中的单元格,他的方法将起作用。
  • 缺点:如果您的工作表上有许多引用其他工作表的链接,他的方法运行速度会慢一些。

结论Worksheet_Change如果 A1 仅取决于位于同一工作表上的数据,则使用Worksheet_Calculate,否则使用。

于 2012-04-04T14:42:50.310 回答
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%。

于 2012-04-04T14:45:15.587 回答
1

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

于 2012-04-04T14:40:31.187 回答