2013-04-04 4 views
1

Я пытаюсь сделать так, чтобы, когда одна из конкретных ячеек в моем коде была изменена, тогда она отобразит сообщение, но я получаю следующее сообщение об ошибке: «Ошибка времени выполнения 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 
+0

'Target.Address' - правильное название собственности !! –

+0

Глупая ошибка, которую я сделал! По-прежнему кажется, что он не отображает сообщение, когда ячейки меняются ... любые идеи –

ответ

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 

Worth Reading: MS Excel crashes when vba code runs

+0

Я думал об использовании' Intersect', но не смог найти быстрого решения, в котором 'Intersect' будет проверять, соответствуют ли как' Target', так и другому диапазону. В вашем коде один диапазон должен быть внутри другого, но «Цель» может быть больше, чтобы вернуть true. Есть ли у вас какая-то простая идея, как использовать 'intersect' для точного соответствия? Если да, добавьте в качестве дополнительной опции +1 :) –

+0

Я верю, и я мог ошибаться, но что Дэвид пытается сделать (и он должен это подтвердить), даже если одна из ячеек в диапазоне «F48, I48 , L48, F50, I50, L50, I52, L52, N52 ", появляется окно с сообщением, которое позаботится выше. –

+0

Давайте продолжим обсуждение в чате (http://chat.stackoverflow.com/rooms/27595/discussion-between-siddharth-rout-and-kazjaw) –

2

первого,, как указано в комментариях, используйте Target.Address, который является правильным именем свойства.

2nd, Ваше заявление if никогда не вернется. Target.Address всегда будет возвращать что-то вроде этого: $E$2, $E$3:$E$4 и т. Д. В вашей ситуации вы должны использовать что-то вроде Intersect или Union методов.

Edited- Возможное решение с помощью метода: 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 
+0

Что представляет собой перекресток метода объединения –

+0

, кстати, вы уверены, что измените все 9 ячеек сразу, что трудно себе представить, если эта область не непрерывен. –

+0

+ 1 для подсказки 'Intersect' –

1

Кодекс Сиддхарт Дал творит чудеса так спасибо так много. Я бег в trouple, потому что я пытался сделать два 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 

Спасибо за помощь!

Смежные вопросы