如果单元格更改为某个值,则出现Msg Box



我有几个单元格范围A1:A12计算百分比。我想设置一个角色,如果在这些单元格的百分比是3%和5%之间的Msg框出现。我正在尝试以下代码:

Private Sub Worksheet_Calculate()
If Range("A1:A12").Value > 2% And  Range("A1:A12").Value <= 5% Then
MsgBox "Message"
Else
Exit Sub
End Sub

谁能帮我调整一下代码,使它工作,看起来它根本不接受它。

我可能会用下面的代码来做这件事。

Private Sub Worksheet_Calculate()

Dim cellsbetween As Long, c As Range
cellsbetween = 0

For Each c In Range("A1:A12").Cells
If c.Value > 0.02 And c.Value <= 0.05 Then cellsbetween = cellsbetween + 1
Next

If cellsbetween > 0 Then MsgBox "There are " & cellsbetween & " cell(s) in the 2% - > 5% range"
End Sub

每次扫描只显示一次弹出窗口。不过,仍然存在一些问题。如果你不做点什么来改变3%-5%的范围内的值,那么你将会对弹出窗口非常恼火。

一种替代方法是监视源单元格(从用户输入而不是从recalc更改的单元格),并且仅在这些单元格更改时(由Worksheet_Change()事件检测到)才运行上述代码。

最后,这是另一种实现目标的方法,它使用更复杂的方法和更健壮的方法来识别单元格值(当它包含公式时)的变化。

Private Sub Worksheet_Calculate()

Dim cellsbetween As Long, c As Range
cellsbetween = 0
Application.EnableEvents = False
For Each c In Range("A1:A12").Cells
If c.Value > 0.02 And c.Value <= 0.05 And c.Value <> c.Offset(0, 51).Value Then
cellsbetween = cellsbetween + 1
MsgBox "Cell " & c.Address & " is in the 2% - > 5% range"
End If
c.Offset(0, 51) = c.Value
Next
Application.EnableEvents = True
End Sub

该方法将值存储在列AZ中(如果您愿意,可以隐藏该列),以便它可以测试值是否实际发生了更改。这样,无论重新计算多少次工作表,该弹出框只会在每次实际值发生变化时出现。

试试这个:

Dim row As Range
For Each row In Range("A1:A12").Rows
If Val(row.Cells(1, 1).Value) > 0.03 And Val(row.Cells(1, 1).Value) <= 0.05 Then

MsgBox ("message")
End If
Next

这是正确的循环方式,你不能将整个范围与单个值进行比较,如果范围包含多个单元格,它就是一个数组,你需要检查每个单独的单元格。

代码有一个问题,当小数点分隔符是一个逗号(这是我的情况),但工作良好,当它是一个点(我希望这是你的情况)。

最新更新