1

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

3 回答 3

2

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

第二,你的if陈述永远不会返回真实。Target.Address将始终返回类似这样的内容:$E$2$E$3:$E$4,等等...在您的情况下,您应该使用类似IntersectorUnion方法。

使用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
于 2013-04-04T21:17:11.203 回答
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

值得一读vba 代码运行时 MS Excel 崩溃

于 2013-04-04T22:12:01.877 回答
1

悉达多的代码创造了奇迹,非常感谢。我遇到了麻烦,因为我试图通过以下方式编写代码来制作两个 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

谢谢各位的帮助!

于 2013-04-05T14:47:13.023 回答