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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2011, 09:06   #11
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Отслеживать изменения нужно во всём файле, или только в определённой области?
Изменения формул тоже нужно отслеживать?
любые изменения во всем файле. В файле 1 лист.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Если следить нужно только за значениями в определённой области, то например такой вариант - при открытии файла эти данные берутся в public массив, при закрытии файла первый массив сравнивается с текущим.
Хм, спасибо. Эта строка навела меня на мысль и я обнаружил еще один косяк. Действительно, я выдергиваю область при помощи usedRange и проверяю по ней. Сейчас попробовал внести изменения в сторонке, не зафиксировались. Как лечить?
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Тут ещё нужно продумать, что делать при сохранениях в процессе работы - обновлять public или нет, продумать мелочи.
Во... изначально макрос был прост. Сравнил, записал/не записал. Потом подумал что если выходить без сохранения то алгоритм неверный. Решил повесить действия на диалоговое окно сохранения. Долго всех мучил вопросами, таки перехватил его, могу вешать теперь что хочу на ДА/Нет/Отмена.

Наверное нужно сделать так: в beforsave засунуть код созданияния другого public массива(или как в моем варианте скрытого листа). И если выход происходит по "не сохранять изменения", сравнивать уже то что было в самом начале и то к чему откатится файл после закрытия, то есть каких-то public1 и public2. Сейчас сделаю. Может что попроще выдумать можно?

А вот предыдущий вопрос открыт:
как следить изменения во всем листе, а не в области?

Последний раз редактировалось 3BEPOBOY; 19.01.2011 в 09:15.
3BEPOBOY вне форума Ответить с цитированием
Старый 19.01.2011, 09:10   #12
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию Не влезло в 1 сообщение

Черт... последняя процедура код в сообщение не лезет...
прикреплю файл.
Файл с макросами который из цифр, изменения пишутся в "аудит"

Что кстати означает
Код:
Option Explicit
я вот его стираю постоянно, а сейчас глянул еще раз в ваш макрос и заметил что вы нет
Вложения
Тип файла: rar VBA.rar (36.3 Кб, 8 просмотров)

Последний раз редактировалось 3BEPOBOY; 19.01.2011 в 09:22. Причина: прикрепляю файл
3BEPOBOY вне форума Ответить с цитированием
Старый 19.01.2011, 10:06   #13
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
А вот предыдущий вопрос открыт:
как следить изменения во всем листе, а не в области?
вот что придумал:
взять тот же usedrange и сравнить размер полученных областей. Если не совпадут, значит файл был дополнен.

Пройдет как считаете?
3BEPOBOY вне форума Ответить с цитированием
Старый 19.01.2011, 10:12   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Option Explicit заставляет объявлять все переменные. Так можно выловить например разницу между переменными а и a
Сравнивать размер usedrange можно, но ведь его можно просто подвигать, или изменить внутри - это не учтётся.
И кстати, если запоминать данные в массив - запомнятся только значения, не формулы. И если юзер заменит формулу (или изменит), но значение не изменится - то это пройдёт мимо.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 19.01.2011, 10:29   #15
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Option Explicit заставляет объявлять все переменные. Так можно выловить например разницу между переменными а и a
я не понял... ну да ладно, погуглю на досуге.
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Сравнивать размер usedrange можно, но ведь его можно просто подвигать, или изменить внутри - это не учтётся.
изменения внутри у меня уже учитываются, при помощи сравнения.
А насчет подвигать... хм. Надеюсь, оно никому не нужно)
Цитата:
Сообщение от Hugo121 Посмотреть сообщение
И кстати, если запоминать данные в массив - запомнятся только значения, не формулы. И если юзер заменит формулу (или изменит), но значение не изменится - то это пройдёт мимо.
А как с формулами в моем варианте обстоит? также?
Как сравнивать тогда?
3BEPOBOY вне форума Ответить с цитированием
Старый 19.01.2011, 10:57   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Но ведь там нет формул, и не предвидится...
Целиком код не анализировал - много букв
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 19.01.2011, 11:31   #17
3BEPOBOY
Пользователь
 
Регистрация: 27.12.2010
Сообщений: 82
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Но ведь там нет формул, и не предвидится...
Целиком код не анализировал - много букв
да уж, оптимизировать и структурировать код можно хорошо. Займусь когда полностью работать начнет
в этом файле то формул нет. Но он левый по моему. Туда просто так вставил код.
И все-таки как работать с формулами если таковые появятся?
3BEPOBOY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полное зависание Delphi в процессе работы artemavd Общие вопросы Delphi 10 05.12.2010 05:25
Как можно изменить у DBGrid Datasource в процессе работы приложения ?? Kamelli_13 БД в Delphi 6 01.05.2009 17:14
Как осуществить возможность выбора БД в процессе работы программы Cabyrc БД в Delphi 9 21.03.2009 08:30
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20
Блокировка функции в процессе ее работы Andr180nag JavaScript, Ajax 2 11.08.2008 18:07