VBA Nested IF statement

匿名 (未验证) 提交于 2019-12-03 00:57:01

问题:

I want to show a message box when a specific cell has a particular value in it. I have done this with the following code;

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

This is within the Worksheet_Change sub so shows the message box everytime another cell value changes. I have tried to get around this by adding a boolean variable, set to true when the messagebox has been shown the first time;

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

However the message box still shows every time I change a cell in the worksheet. I have a feeling it';s to do with the way I have written the nested if statement but have tried various different ways and orders of where I place else and end if but to no avail.

回答1:

Try this code, it first checks which cell is changed, if it is anything but P8, it will not pop the messagebox.

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 

As pointed out by Macro Man, there is a more optimal, more efficient option.



回答2:

Use the Target argument instead - this refers to the actual cell being changed, which is what you are interested in. Test the address of the Target to see if it's the cell you need and then act accordingly. This will stop the message showing when another cell is changed.

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 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!