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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2009, 15:29   #1
Chelentano
Пользователь
 
Регистрация: 06.07.2009
Сообщений: 45
По умолчанию Откат макроса назад

Господа, очень нужен совет в таком вопросе. Я создал макрос удаления строк с последующими определёнными преобразованиями (копированиями из одних ячеек в другие), но очень нужно еще иметь возожность делать откат назад (типа Undo или Ctrl-Z). Буду очень благодарен за подсказку, как сделать Undo только что выполненного макроса.
Chelentano вне форума Ответить с цитированием
Старый 30.07.2009, 15:58   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Это достаточно долгая история, постараюсь прояснить часть в кратце.
Откат можно сделать несколькими способами:
1. Самый неудобный, но и самый надежный. Вы не сохраняете изменения в файле, после выполнения макроса и закрываете файл без сохранения.
2. Наиболее геморный для пользователя. В меню Сервис - Доступ к книге, выделить закладку Правка. Установить галочку напротив "Разрешить совместный доступ" -ОК. Затем на все вопросы - ОК.
Для просмотра и отмены изменений в книге - Сервис - Исправления - Принять/отклонить исправления.
Примечание : Общая книга имеет ряд ограничений, которые обязательно необходимо учитывать при работе с ней.
3. Через Aplication.OnUndo
Данный метод более прост для использования конечным пользователем, но сложноват в исполнении и надо учитывать, что все данные об изменениях, совершенных до макроса, будут стерты.
В общих чертах:
Создаете глобальные переменные, в которые будете заносить информацию о данных, содержащихся в изменяемом макросом диапазоне.
Создаете отдельную процедуру, в которой заполняете эти пременыне данными. Перед выполнением основного макроса вызываете эту процедуру, а в конце основного макроса вставляете строку
Application.OnUndo "Отмена", "Здесь_имя_макроса_запоминания_знач ений"

Вроде так. Может кто дополнит.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 24.02.2012, 11:18   #3
fil_v
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Это достаточно долгая история, постараюсь прояснить часть в кратце.
Откат можно сделать несколькими способами:
...

Вроде так. Может кто дополнит.
Напишите пожалуйста на примере любого макроса пошагово, как работает пользоваться вариантом №3. Через Aplication.OnUndo
Слова "Создаете глобальные переменные..." ввергли меня в тупик.
fil_v вне форума Ответить с цитированием
Старый 24.02.2012, 11:37   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

перед выполнением макроса сделать

ActiveWorkbook.SaveCopyAs 'undofile.xls'

и потом откатываться на него.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 24.02.2012, 11:58   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

fil_v, чем так "глобальность" испугала? В такое время живём

Глобальные/публичные - это переменные, которые живут и тогда, когда макрос уже отработал.
Т.е. создали такие переменные, затем одним макросом задали им значения, другим позже эти значения прочитали/изменили.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.02.2012, 16:31   #6
fil_v
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
перед выполнением макроса сделать

ActiveWorkbook.SaveCopyAs 'undofile.xls'

и потом откатываться на него.

Простите пожалуйста "чайника". Я можно сказать в таком виде в Excel ни разу не работал. Не было нужды. А тут стал работать с большими объемами информации, полез за ответами в интернет. На этом форуме и узнал что есть такие штуки. Однако тут в основном пишут для тех кто уже имеет в этом опыт.
The_Prist выше по странице написал про способ №2. В таком варианте для меня понятно. А вот "ActiveWorkbook.SaveCopyAs 'undofile.xls'" , что с этим делать.
fil_v вне форума Ответить с цитированием
Старый 24.02.2012, 16:32   #7
fil_v
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
fil_v, чем так "глобальность" испугала? В такое время живём

Глобальные/публичные - это переменные, которые живут и тогда, когда макрос уже отработал.
Т.е. создали такие переменные, затем одним макросом задали им значения, другим позже эти значения прочитали/изменили.
fil_v вне форума Ответить с цитированием
Старый 24.02.2012, 18:21   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Т.е. что такое переменные - неизвестно?
А что такое макрос?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.02.2012, 19:04   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
А что такое макрос?
кстати, да... меня уже тоже этот вопрос начал волновать)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 26.02.2012, 19:48   #10
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Кстати вариантом первого способа можно считать такой: перед выполнением макроса скопировать весь лист (или несколько) в скрытый "технический" лист(ы). После выполнения макроса, всегда можно откатиться на копии из "технических" листов. Причем таких копий может быть несколько (несколько уровней отката) и по ним же можно отслеживать историю изменений как автоматических, так и действия пользователя.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возвращение назад в меню K[Lanc]N Помощь студентам 5 22.02.2009 11:14
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Откат написанной программы фЁдОр Свободное общение 13 20.12.2007 11:35
Назад в прошлое Repz О форуме и сайтах клуба 4 14.08.2007 12:56
на шаг назад... malevich Общие вопросы Delphi 9 01.04.2007 20:50