2015-05-26 4 views
0

У меня есть существующий макрос, который выполняет захват экрана листа excel, если конкретная ячейка больше -0.03. В настоящее время эта ячейка представляет собой формулу, основанную на данных реального времени из внешних источников. Я могу запустить этот макрос вручную, но я хочу, чтобы он запускался непрерывно, т. Е. Автоматически делал скриншоты листа каждый раз, когда ячейка больше -0.03.Запуск Excel VBA автоматически при изменении значения ячейки (посредством вычисления)

Вот мой код;

Private Sub Worksheet_Calculate() 

If range("d81")>-0.03 Then 
    Application.EnableEvents = False 
    Call ScreenCapture 
    Application.EnableEvents = True 
End If 

Application.ScreenUpdating = False 
Application.DisplayAlerts = False 

End Sub 

Пожалуйста, кто-нибудь может помочь?

+2

Рассмотрите возможность использования события *** Calculate() *** –

+0

Будет [This] (http://stackoverflow.com/questions/11406628/vba-code-doesnt-run-when-cell-is-changed- по-формуле/11409569 # 11409569) help? –

ответ

0

Попробуйте использовать это в листе

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If range("d81")>-0.03 Then 
     With Application 
      .EnableEvents = False 
      Call ScreenCapture 
      .EnableEvents = True 
      .ScreenUpdating = False 
      .DisplayAlerts=True 
     End With 
    End If 

End Sub 

Это будет запускать макрос каждый раз, когда происходит изменение на листе.

Однако как генерируется ячейка -0.03. Если запись пользователя, то ячейка отключается (щелкнул из, отошел от т.д.)

Если вы хотите, когда значение изменяется с помощью ввода пользователя или VBA использовать Worksheet_Change событие (Replace Worksheet_SelectionChange в выше, что)

И если это рассчитанная ячейка, используйте событие Worksheet_Calculate() (Замените Worksheet_SelectionChange(ByVal Target As Range)), чтобы запустить макрос, когда значение изменяется с помощью вычисления.

+0

'Это будет запускать макрос каждый раз, когда на листе есть изменения.' Нет, это не так. –

+0

Спасибо за ваш ответ. Обратите внимание, что это вычисляемая ячейка. Я использовал событие Worksheet_Calculate() и ваш код выше, однако я получил сообщение об ошибке «End if without block if». – AG6

+0

@ AG6: См. Ссылку, которую я разместил ниже вашего ответа. –

0

Вы можете сделать это, используя Worksheet_Change(ByVal Target As Range) на Рабочем листе, который содержит Ячейку, которую вы перепроверяете.

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