Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2016, 23:04   #1
Kramorm
 
Регистрация: 06.10.2016
Сообщений: 8
По умолчанию Автозапуст

Чего-то я видимо не понимаю. На Лист1 в ячейке A1 написана такая формула: =Лист2!$A$2. В VBA на Лист1 написал такой код:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Set rng = [A1:A1]
    If Not Intersect(rng, Target) Is Nothing Then Control
End Sub
Только теперь, если изменить значение в Лист2 ячейки A1, то этот код даже не начинает выполняться. В интернете нашел такой вариант:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Test As Range
    Set Test = Range("A1")
    Static Oldvalue As Variant
    If Test <> Oldvalue Then
        Control
        Oldvalue = Test
    End If
End Sub
Но он тоже не работает. Подскажите, пожалуйста, как починить это?

Последний раз редактировалось Kramorm; 16.10.2016 в 09:35.
Kramorm вне форума Ответить с цитированием
Старый 15.10.2016, 23:25   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Пересчет ячеек не вызывает события Worksheet_Change, но вызывает событие Worksheet_Calculate. Наверно в коде, который Вы нашли, первая строка
Код:
Private Sub Worksheet_Calculate()
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 15.10.2016, 23:47   #3
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Kramorm Посмотреть сообщение
В VBA на Лист1 написал такой код...
... если изменить значение в Лист2 ячейки A1
Вы записали обработку события, возникающего на первом листе ... если хотите, чтоб событие обрабатывалось на всех листах, то используйте Workbook_SheetChange всей книги
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 16.10.2016, 10:04   #4
Kramorm
 
Регистрация: 06.10.2016
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Пересчет ячеек не вызывает события Worksheet_Change, но вызывает событие Worksheet_Calculate. Наверно в коде, который Вы нашли, первая строка
Код:
Private Sub Worksheet_Calculate()
Да вот нет, специально откопал: http://www.cyberforum.ru/vba/thread926626.html пост 4. А с Private Sub Worksheet_Calculate() действительно работает как надо. Большое спасибо за помощь.
Kramorm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц