如何在单元格自动更改值时创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集合。
您的myRange
variables是F2:F18
之间的单元格的集合。 为了访问该范围内的每个单元格,您需要遍历它。
我添加了一个名为cell
的额外Rangevariables,它充当迭代器。 在for each
循环中, cell
variables是活动单元格。
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