如果单元格受公式驱动,请选择“案例不起作用”

时间:2019-06-28 23:25:34

标签: excel vba

我尝试编写一个在单元格A3值不同时显示不同消息框的代码。我发现当单元格A3仅包含文本时此代码有效,但是当我尝试将单元格A3设为公式驱动的单元格时,下面的此代码不起作用。谁能帮忙吗???

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("A3"), Range(Target.Address)) Is Nothing Then
    Select Case Target.Value
        Case Is = "FALSE": MsgBox "This is False!"
        Case Is = "TRUE": MsgBox "This is True!"
    End Select
End If
End Sub

2 个答案:

答案 0 :(得分:0)

我想您不想检查字符串True和False,而是布尔值,否则它应该完全像这样工作。您能给我们您在牢房中使用的公式吗?

如果单元格中确实有布尔值,则可以使用:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Range("A3"), Range(Target.Address)) Is Nothing Then
        If Target.Value Then
            MsgBox "This is True!"
        Else
            MsgBox "This is False!"
        End If
    End If
End Sub

答案 1 :(得分:0)

最终有效的代码如下:

Private Sub Worksheet_Calculate()
 Application.EnableEvents = False
   MsgBox "False" = Range("A1") = "False"
   MsgBox "True" = Range("A1") = "True"
 Application.EnableEvents = True
End Sub

我发现我必须使其“计算”才能刷新工作表,否则excel无法识别布尔值更改。另外,我发现我必须添加“ Application.EnableEvents”代码,否则,VBA将运行到一个无限循环中,该循环可以完成工作,但只有在强制中断并停止代码运行时才会停止。

感谢Tim和Nirostar给予宝贵的反馈和启发,以使它正常工作!