438运行时错误

我想这样做,当我的代码中的特定单元格之一被更改,然后它会显示一条消息,但我收到以下错误消息“运行时错误438对象不支持此属性或方法”。 不确定这是什么意思。 有人可以帮助我理解。 这里是代码:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Adress = "F48,I48,L48,F50,I50,L50,I52,L52,N52" Then MsgBox "You are about to change an AP-42 Emision Factor" End If End Sub 

这是你正在尝试?

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("F48,I48,L48,F50,I50,L50,I52,L52,N52")) Is Nothing Then MsgBox "You are about to change an AP-42 Emision Factor" End If End Sub 

值得阅读 : MS Excel崩溃时,VBA代码运行

第一,如评论中所述,使用Target.Address ,它是正确的属性名称。

第二,你的if语句永远不会返回true。 Target.Address将总是返回如下所示的内容: $E$2$E$3:$E$4 ,等等…在您的情况下,您应该使用诸如IntersectUnion方法之类的东西。

使用Union方法编辑 – 可能的解决scheme:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rngTMP As Range Set rngTMP = Range("F48,I48,L48,F50,I50,L50,I52,L52,N52") If Union(Target, rngTMP).Address = Union(rngTMP, rngTMP).Address Then MsgBox "Ok" End If End Sub 

代码Siddharth Gave创造奇迹非常感谢。 我遇到了麻烦,因为我试图通过以下方式编写代码来创build两个Worksheet_Change事件:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$8" Then Toggle_Rows End If End Sub Private Sub Worksheet_Change(Byval Target As Range) If Not Intersect(Target, Range("F48,I48,L48,F50,I50,L50,I52,L52,N52")) Is Nothing Then MsgBox "You are about to change an AP-42 Emision Factor" End If End Sub 

正如你可以想象这不起作用,给了我一个暧昧的名字错误。 所以经过一番研究,以下两种方式是把这两个函数写成一个的:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$8" Then Toggle_Rows End If If Not Intersect(Target, Range("F48,I48,L48,F50,I50,L50,I52,L52,N52")) Is Nothing Then MsgBox "You are about to change an AP-42 Emision Factor" End If End Sub 

谢谢各位的帮助!