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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2012, 00:34   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Отслеживание изменений на листе

Нужно отследить были ли изменения на листе. При этом:
1. Нужно иметь возможность сбросить "счетчик" в ручную.
2. Нужен сам факт изменения, что изменили не важно и сколько их было.
3. За изменения принимает прямое изменение содержимого ячеек оператором. Изменениями не считаются: сдвиг по листу; пересчет формул; прочее.
4. В книге много листов - нужно контролировать только 6, но каждый отдельно.

Нечто вроде:
If ИзмененияНаЛисте(ЛистИмя) then ......

Как это можно сделать?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 04.01.2012, 00:50   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Процедура события изменения листа в модуле книги
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
В нее передается Sh - ссылка на лист, который был изменен.
Проверяйте, является ли Sh одним из тех листов, которые надо контролировать, и увеличивайте на 1 соотв. счетчик.
Имеет смысл в качестве счетчиков использовать ячейки на отдельном скрытом листе.
Тогда информация об изменениях будет сохраняться вместе с книгой.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 04.01.2012, 00:55   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Процедура события изменения листа в модуле книги
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
В нее передается Sh - ссылка на лист, который был изменен.
Проверяйте, является ли Sh одним из тех листов, которые надо контролировать, и увеличивайте на 1 соотв. счетчик.
Интересно. А не будет ли этот способ реагировать на каждый чих? Скажем на изменения в результате пересчета формулы.
Цитата:
Сообщение от Казанский Посмотреть сообщение
Имеет смысл в качестве счетчиков использовать ячейки на отдельном скрытом листе.
Тогда информация об изменениях будет сохраняться вместе с книгой.
Этого не требуется по условию задачи. Но может быть полезно.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 04.01.2012, 01:15   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> А не будет ли этот способ реагировать на каждый чих? Скажем на изменения в результате пересчета формулы

А Вы попрбуйте Сравните с поведением
Код:
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 04.01.2012, 01:16   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А не будет ли этот способ реагировать на каждый чих?
Будет. Если под "чихом" подразумевается изменение хоть одной ячейки листа.


Цитата:
Скажем на изменения в результате пересчета формулы.
Нет? пересчёт формул не сгенерирует это событие.
для пересчёта формул в Excel предусмотрено отдельное событие - Calculate
EducatedFool вне форума Ответить с цитированием
Старый 04.01.2012, 01:57   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

по событию
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)видно на что изменилось значения в Target, но какими они были до изменения отследить надо отдельно и самостоятельно.
необходимо хранить массивы значений всех используемых ячеек контролируемых листов.
сделаете, покажете что получилось. ок?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 04.01.2012, 09:12   #7
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Неважно, сколько листов. На листе1 в первой строке покажет все изменявшиеся.
Вложения
Тип файла: rar Книга11.rar (9.1 Кб, 71 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 04.01.2012, 15:26   #8
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
Неважно, сколько листов. На листе1 в первой строке покажет все изменявшиеся.
Зачем нужна работа с Application.EnableEvents?
Код:
    Application.EnableEvents = 0
    Sheets(1).[1:1].Clear
    Application.EnableEvents = -1
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 04.01.2012, 15:34   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Закомментируйте их и в пошаговом режиме посмотрите, зачем.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 05.04.2012, 09:59   #10
miruff
Новичок
Джуниор
 
Регистрация: 05.04.2012
Сообщений: 2
По умолчанию

Ребят в Вашем примере отслеживается лист на котором были проведены какие либо изменения. А можно что то аналогичное проделать, но только не с листом а с ячейкой? Мне нужно знать не были ли изменены определенные ячейки. Спасибо за советы заранее!
miruff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отслеживание impulsgraw Работа с сетью в Delphi 3 12.06.2011 12:24
Сохранение изменений Dmitrov Помощь студентам 0 15.05.2011 13:36
Отслеживание изменений Fezdipekla Microsoft Office Access 3 09.07.2010 22:56
ячейка на одном листе, в которую необходимо подставлять данные из столбца, находящегося на другом листе Ирина Водолагина Microsoft Office Excel 4 04.03.2009 23:38
Отслеживание изменений(по времени и дате) Ксеноцид Общие вопросы Delphi 6 01.04.2008 10:59