VBA嵌套的IF语句

我想显示一个消息框,当一个特定的单元格中有一个特定的值。 我用下面的代码完成了这个工作。

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

这是在Worksheet_Change子项内,所以每当另一个单元格值发生变化时就会显示消息框。 我试图通过添加一个布尔variables来解决这个问题,当消息箱第一次被显示时设置为true;

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

但是,每当我更改工作表中的单元格时,消息框仍然显示。 我有一种感觉,就是我写这个嵌套的if语句的方式,但是尝试了各种不同的方式和命令,把我放在else地方的else和命令end if但是却无济于事。

试试这个代码,它首先检查哪个单元格被更改,如果它是除P8之外的任何内容,则不会popup消息框。

 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 

正如macros观人指出的那样,有一个更优化,更高效的select。

使用Target参数来代替 – 这是指被更改的实际单元格,这是您感兴趣的内容。testingTarget的地址以查看它是否是您需要的单元格,然后相应地执行操作。 这将停止显示另一个单元格更改的消息。

 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