如何在单元格自动更改值时创build警报?

在我的一个工作表中,单元格F2:F18中的值为Yes或No

我基本上想要做的是创build一个popup窗口,当他们改变时会提醒我。

最初,我有以下几点,似乎工作正常,但是因为是/否值由公式生成,它不起作用:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Value = "Yes" Then MsgBox "Cell " & myRange.Address & " is now equal to Yes" End If End Sub Sub BandingAlert() Dim myRange As Object Set myRange = ActiveSheet.Range("F2:F18") Call Worksheet_Change(myRange) End Sub 

经过一番研究,我发现我需要使用Worksheet_Calculate来代替。 我现在使用下面的代码:

 Private Sub Worksheet_Calculate() Dim myRange As Object Set myRange= ActiveSheet.Range("F2:F18") If myRange.Value = "Yes" Then MsgBox "Cell " & myRange.Address & " is now equal to Yes" End If End Sub 

当“是/否”值改变时,我现在得到一个错误

运行时错误“13”; types不匹配

如果我debugging我的代码,突出显示的行是:

 If myRange.Value = "Yes" Then 

任何人都可以帮我解决我哪里错了吗?

编辑:每个细胞将需要自己的popup,因为我打算在每个popup的细胞的具体信息

你需要一个额外的Rangevariables来迭代你的Range集合。

您的myRangevariables是F2:F18之间的单元格的集合。 为了访问该范围内的每个单元格,您需要遍历它。

我添加了一个名为cell的额外Rangevariables,它充当迭代器。 在for each循环中, cellvariables是活动单元格。

StrComp()函数将当前活动单元格的值与"Yes"vbTextCompare忽略大小写,并按照字面比较文本。

 Private Sub Worksheet_Calculate() Dim myRange As Range Set myRange = ActiveSheet.Range("F2:F18") Dim cell As Range For Each cell In myRange Evaluate (cell) If StrComp(cell, "Yes", vbTextCompare) = 0 Then MsgBox "Cell " & cell.Address & " is now equal to Yes" End If Next End Sub 

每次重新计算纸张时,您都会在范围F2:F18显示一个MsgBox 。 它可能会在一段时间变得有点讨厌,但这是你在找什么,不是吗?

尝试这个

 Private Sub Worksheet_Calculate() Dim myRange As Range, aCell As Range Dim CellAddr As String Set myRange = ActiveSheet.Range("F2:F18") For Each aCell In myRange If aCell.Value = "Yes" Then CellAddr = CellAddr & "," & aCell.Address End If Next CellAddr = Mid(CellAddr, 2) If Len(Trim(CellAddr)) <> 0 Then MsgBox "Cell(s) " & CellAddr & " is now equal to Yes" End If End Sub 

在这里输入图像说明