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

时间:2013-09-25 10:12:50

标签: excel vba excel-vba

在我的一个工作表中,我在单元格F2:F18

中有值Yes或No.

我基本上想要做的是创建一个弹出窗口,当它们发生变化时会提醒我。

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

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

当Yes / No值改变时,我现在得到错误

  

运行时错误'13';   类型不匹配

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

If myRange.Value = "Yes" Then

任何人都可以帮我解决我出错的地方吗?

编辑:每个单元格都需要自己弹出,因为我打算在每个弹出窗口中放置单元格特定信息

2 个答案:

答案 0 :(得分:2)

您需要额外的Range变量来迭代Range集合。

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

我添加了一个名为cell的额外Range变量作为迭代器。在for each循环中,cell变量是活动单元格。

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

每次重新计算工作表时,您都会在范围MsgBox中为每个Yes显示F2:F18。它可能会在一段时间内变得有点烦人,但这就是你要找的东西,不是吗?

答案 1 :(得分:1)

试试这个

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

enter image description here