Хитрости »
Основные понятия (23)
Сводные таблицы и анализ данных (9)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (14)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (63)
Разное (38)
Баги и глюки Excel (2)

Выделение сделанных изменений

Предположим есть общий файл, в который вы забиваете исходные данные и отсылаете другим людям. Но когда вам этот файл присылают обратно - неплохо бы знать в какие ячейки были внесены данные, чтобы люди при этом не выделяли эти ячейки сами каждый раз каким-нибудь цветом(пусть будет красный). Приведенный ниже код выделяет ячейку как только значение в ней было изменено.

Option Explicit
Dim vValue
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target <> vValue Then Target.Interior.Color = vbRed
End Sub
 
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = 1 Then vValue = Target
End Sub

Как это использовать. В нужном листе: Правый щелчок мыши по ярлычку листа(изменения в котором хотим отследить) -Исходный текст (View code) -Вставляем приведенный код. Подробнее про модули листа см.здесь.


Но приведенный код работает только в одном листе(том, в модуле которого размещен код). Если необходимо отследить изменения во всех листах книги, то можно использовать следующий код:

Option Explicit
Dim vValue
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target <> vValue Then Target.Interior.Color = vbRed
End Sub
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Count = 1 Then vValue = Target
End Sub

Этот код должен быть вставлен уже не в модуль конкретного листа, а в модуль книги. Что такое модуль книги и где он расположен лучше подсмотреть здесь: модуль книги.

Главное не забывать, что макросы должны быть разрешены. Иначе никакие изменения выделяться не будут.

Скачать пример:

  Tips_Macro_Watch_Changes.xls (30,0 KiB, 3 131 скачиваний)

Так же см.:
Ведение журнала сделанных в книге изменений
Выделение сделанных изменений
Запись изменений на листе в примечания
Каждому пользователю свой лист/диапазон


Статья помогла? Поделись ссылкой с друзьями!
  Плейлист   Видеоуроки

Поиск по меткам

Access apple watch Multex Outlook Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Надстройки Настройка Печать Поиск данных Политика Конфиденциальности Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx анализ данных баги и глюки в Excel ссылки
Обсуждение: 17 комментариев
  1. Влад, проблема однозначно в надстройке. Скорее всего в ней при выполнении команд отключается реагирование Excel на события(изменение данных ячеек, открытии, закрытие книги и т.п.).

  2. Влад:

    Дмитрий, я более чем уверен, что Вам может быть знаком данный специалист в области VBA - EducatedFool.
    Не подумайте, что я занимаюсь рекламой его сайта, но мне важно было бы воспользоваться именно Вашей формулой..., но и отказаться от надстройки я также не могу. Был бы весьма признателен, если Вы смогли уделить несколько минут Вашего драгоценного времени и опытным взглядом понять истинную проблему "конфликта" Вашей формулы и надстройки...Адрес по которому расположена надстройка http://excelvba.ru/programmes/Replacements
    P/s. Ещё раз, извините, что мог отвлечь Вас от дел насущных.

  3. Влад, дело в том, что в указанной надстройке все замены происходят в массиве(в памяти) и потом разом выгружаются на лист уже замененнные данные. А код в статье срабатывает только если изменения были произведены в одной ячейке. Для отслеживания изменений в диапазоне необходимо менять код. Причем довольно кардинально. Либо менять код в надстройке таким образом, чтобы замены производились поячеечно. Но тогда неизбежно увеличение времени работы кода.

  4. Влад:

    Спасибо, Дмитрий, за исчерпывающий ответ и за то, что уделили время вопросу.

  5. Ирина:

    Дмитрий, использовала ваш код, но возник такой вопрос.
    У меня имеется основная таблица с формулами, которые пересчитывают результат автоматически в зависимости от заполнения других таблиц. Хотелось бы отслеживать что изменяется в этой основной таблице при внесении каких-либо изменений во второстепенные таблицы.
    Но, так как изменения в ячейки не вносятся вручную (формулы не меняются), то пересчет данных в ячейках не выделяется цветом. Возможно ли как-то решить эту проблему?

    • Александр:

      Столкнулся с такой же проблемой. Формула в ячейке не меняется, соответственно при изменении ячейки, на которю ссылается формула, формула остается той же и ячейка не закрашивается, хотя значение в ней изменено

  6. Аркадий:

    Добрый день, Дмитрий. Очень понравился практичный макрос, подскажите пожалуйста новичку, как и что надо добавить, чтобы выделение цветом оставалось только на определенное время (к примеру на 2 дня). Спасибо за Ваш сайт, очень полезный.

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти
Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2018 Excel для всех   Войти