Страницы: 1
RSS
Запуск макроса от изменения значения в ячейке по формуле
 
Добрый день,

есть задача, по сумме ячеек A1 и B1, результат записываем в C1, нужно запускать макрос, когда происходит изменение значения в C1, когда правлю руками С1, все работает, но так как данные в A1 и B1 импортируются из других приложений, при изменении суммы в C1 макрос не запускается, пробовал таким подходом:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Set rng = Range("C1")
    If Not Application.Intersect(rng, Range(Target.Address)) Is Nothing Then
        Application.EnableEvents = False
        MsgBox "Пуск"
            End If
           Application.EnableEvents = True
End Sub 

Изменено: DmitryKu - 29.01.2015 17:04:28
 
лежала у меня такая заготовка, пробуйте
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Application.DisplayAlerts = False
    If Not (Intersect(Target, Union(Me.Range("C1"), Me.Range("C1").Precedents)) Is Nothing) Then
        Application.EnableEvents = False
     MsgBox "Пуск"
   End If
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub

заготовка №2
Private Sub Worksheet_Calculate()
Static v As Variant
    If Me.Range("A1").Value <> v Then
        MsgBox "A1 изменена"
        v = Me.Range("A1").Value
    End If
End Sub
Изменено: V - 29.01.2015 17:09:33
 
Что такое Me.Range("C1").Precedents ? (справку на английском не поняла)
Работать надо не 12 часов, а головой.
 
V, благодарствую, второй вариант сработал, первый почему-то работает только после вмешательства руками.
Код
Private Sub Worksheet_Calculate()
Static v As Variant
    If Me.Range("C1").Value <> v Then
        Application.EnableEvents = False
        Call mymacros
        v = Me.Range("C1").Value
    End If
             Application.EnableEvents = True
End Sub
 
Без остановки событий подвисал excel.

Мое почтение, за скорейшее решение вопроса.
Изменено: DmitryKu - 29.01.2015 21:37:05
 
Ещё есть ваиант с текстбоксом - делаем невидимый текстбокс, завязываем его на эту ячейку. А уже в его событиях есть нужное - при изменении делаем дело.

Precedents - Не вдаваясь вглубь - это связанные ячейки, вляющие не значение.
 
Не поняла пока(
Вот берём Target, Union(Me.Range("C1"), Me.Range("C1").Precedents)
Target это наверное или A1 или В1 что бы сработало событие они должны измениться.
Me.Range("C1").Precedents это  A1 и В1 (влияющие ячейки)
для чего тогда Me.Range("C1") ?

Precedents - это только когда формула в ячейке у неё есть Precedents?
Работать надо не 12 часов, а головой.
 
Насколько я понимаю, отслеживается событие изменения в целевой ячейке С1, а также в влияющих ячейках. Если в С1 будет формула =А1+В1, и произойдет изменение  хоть в одной из этих трех ячеек, то ...
Кому решение нужно - тот пример и рисует.
 
Да, но первоисточник изменения может быть на другом листе... Тогда на этом отслеживаемом листе ничего не отработает с использованием Precedents.
Изменено: Hugo - 29.01.2015 17:51:09
 
Цитата
Hugo пишет: делаем невидимый текстбокс, завязываем его на эту ячейку. А уже в его событиях есть нужное - при изменении делаем дело.
Создала TextBox, связала с ячейкой. А как отследить само событие TextBox?
Работать надо не 12 часов, а головой.
 
Так ведь уже отслеживается :)
Осталось сделать текстбокс невидимым.
 
Да, Hugo, заработало, видимо у меня события были отключены. Спасибо)
Работать надо не 12 часов, а головой.
 
С TextBox самый простой и прикольный вариант ))
Страницы: 1
Наверх