2

在我的一个工作表中,我在单元格 F2:F18 中有值是或否

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

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

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

谁能帮我解决我哪里出错了?

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

4

2 回答 2

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

每次重新计算工作表时,您都会在 Range中看到一个MsgBoxfor each 。一段时间后它可能会变得有点烦人,但它就是你要找的,不是吗?YesF2:F18

于 2013-09-25T10:42:22.897 回答
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

在此处输入图像描述

于 2013-09-25T10:46:12.573 回答