2016-06-23 7 views
0

Я создал раскрывающийся список, как в этом instruction. Теперь эта ячейка должна быть запущена в моем макросе.VBA trigger change ячейки

Я уже прочитал некоторые другие записи в этой теме, но в моем VBA первенствовать макросъемки этот код не работает:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$B$2" Then 
    Call Macro1 
    End If 
End Sub 

Sub Macro1() 
    MsgBox "The value entered in Range B2 is " & Range("B2").Value 
End Sub 

Если изменить значение ячейки B2, этот код Безразлично» t будет выполнен, и сообщение не будет отображаться.

+0

Пожалуйста, объясните, что вы подразумеваете под «не работает». – DeanOC

+1

Где они оба находятся? используется ли правильный лист? доступен Macro1, он отлично работает для меня. –

ответ

1

Я скопировал ваш код и поместил его в лист, который я редактировал, и он отлично работает. Если вы попытаетесь поместить этот код в другое место, например. в ThisWorkbook, тогда это не сработает, потому что обработчик события Worksheet_Change не будет срабатывать.

+0

Мой код был в ThisWorkbook .. спасибо, спасли меня много времени! – ZerOne

1

В дополнение к вышеуказанному ответу, если это объединенная ячейка, а b2 не является первой ячейкой в ​​слиянии, это также не сработает. Однако, если это не так, и ваш код находится в нужном месте, он работает нормально

0

Если вы планируете изменить значения диапазона, убедитесь, что включены и активированы EnableEvents. Если вы не рискуете рекурсивно уволить Worksheet_Change и сбой вашего проекта.

Вот общий шаблон дизайна

  • Выключите EnableEvents
  • Проверьте Target (ячейка, которая была изменена), находится в диапазоне, который вы проверяющего
  • Pass Target в качестве параметра к другому подпрограмму
  • Включите EnableEvents
 
Private Sub Worksheet_Change(ByVal Target As Range) 
    Application.EnableEvents = False 

    If Not Intersect(Target, Range("B:B")) Is Nothing Then 
     Macro1 Target 
    End If 

    Application.EnableEvents = True 
End Sub 

Sub Macro1(Target As Range) 
    MsgBox "The value entered in Range " & Target.Address(True, True) & " is " & Target.value, vbInformation, "You Entered" 
End Sub