438运行时错误

时间:2013-04-04 21:05:28

标签: excel vba excel-vba runtime-error

我正在尝试使它,以便当我的代码中的一个特定单元格被更改然后它将显示一条消息,但我收到以下错误消息“运行时错误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

3 个答案:

答案 0 :(得分:2)

评论中提到的

1st ,使用Target.Address这是正确的属性名称。

第二,您的if语句永远不会返回true。 Target.Address将始终返回以下内容:$E$2$E$3:$E$4等等...在您的情况下,您应该使用类似IntersectUnion方法的内容

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

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

答案 1 :(得分:1)

这是你在尝试的吗?

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 crashes when vba code runs

答案 2 :(得分:1)

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

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

感谢所有人的帮助!