VBA 嵌套 IF 语句

VBA Nested IF statement

我想在特定单元格中有特定值时显示消息框。我使用以下代码完成了此操作;

If Range("P8") = "Y" Then
        MsgBox "Message here"
End If

这是在 Worksheet_Change 子中,因此每次另一个单元格值更改时都会显示消息框。我试图通过添加一个布尔变量来解决这个问题,当第一次显示消息框时将其设置为 true;

If Range("P8") = "Y" Then
    If messageshown = False Then
        messageshown = True
        MsgBox "Message here"
    Else
    End If
Else
End If

但是,每次我更改工作表中的单元格时,消息框仍然显示。我有一种感觉,这与我编写嵌套 if 语句的方式有关,但尝试了各种不同的方式和顺序来放置 elseend if 但无济于事。

试试这个代码,它首先检查哪个单元格被更改,如果不是 P8,它不会弹出消息框。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$P" Then
        If Range("P8") = "Y" Then
            MsgBox "This works"
        End If
    End If
End Sub

正如 Macro Man 所指出的,有一个更优化、更有效的选择。

改为使用 Target 参数 - 这是指正在更改的实际单元格,这是您感兴趣的内容。测试 Target 的地址以查看它是否是您需要的单元格然后采取相应行动。这将在更改另一个单元格时停止显示消息。

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Address = "$P" And .Value = "Y" Then MsgBox "Message here"
    End With
End Sub