VBA嵌套IF语句

时间:2016-01-18 10:50:55

标签: excel vba excel-vba nested-if

我希望在特定单元格中包含特定值时显示消息框。我用以下代码完成了这个;

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,但无济于事。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

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

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

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