Доброго времени суток.
Подскажите, пожалуйста, как будет выглядеть код который будет эмитировать "Ctrl+Z"
Заранее спасибо.
Подскажите, пожалуйста, как будет выглядеть код который будет эмитировать "Ctrl+Z"
Заранее спасибо.
09.05.2016 00:20:37
Доброго времени суток.
Подскажите, пожалуйста, как будет выглядеть код который будет эмитировать "Ctrl+Z" Заранее спасибо. |
|
|
|
09.05.2016 00:23:00
|
|||
|
|
09.05.2016 00:23:51
вот такая ошибка:
Run Time Error '1004' Method 'Undo' of object '_appliacation' failed |
|
|
|
09.05.2016 00:34:08
А у меня (в моем коде) нет такой ошибки)
|
|
|
|
09.05.2016 00:36:27
Вот всего -то кода:
А может из-за Excel 2003 быть? (Хотя у меня в хелпе VBA описывается точно так же)
Изменено: |
|||
|
|
09.05.2016 01:07:09
Спасибо огромное за подсказку!!!
я забыл про EnebleEvents теперь все работает!! |
|
|
|
09.05.2016 01:15:31
Да отключение событий тут никакой роли (в Вашем коде) не играет. Отменяется ведь последнее действие пользователя. А у Вас последнее действие - нажатие кнопки )
Попробуйте, например, закрасить ячейку и выполнить
|
|||
|
|
09.05.2016 13:28:05
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|||
|
|
09.05.2016 13:32:26
Дим, да я и не спорю, что может ) Я про приведённый пример говорил: никаких действий, а автору помогло ))
В моём примере я ведь как раз и делаю отключение событий. |
|
|
|
09.05.2016 13:36:41
В изначальном коде согласен. Просто было у меня подозрение, что это Undo у автора изначально выполнялось при наступлении события Change листа
![]()
Изменено:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
16.06.2017 20:41:51
Доброго времени суток! Говорю сразу: я новичок в VBA.
Мне необходимо придумать макрос на отмену всех действий пользователя перед сохранением книги. Подразумевается не отмена действия макросов, а откат обычных заполнений ячеек пользователем введенных вручную, то есть пользователь мог бы и сам все отменить командой "Ctrl+Z", но мне надо это сделать макросом) к примеру, пользователь после открытия и до сохранения успел заполнить 5 разных ячеек - пишу такой "топорный" код) в результате: - стирает последнюю ячейку (то что и нужно) - возвращает последнюю ячейку (а нужно чтоб стёр предпоследнюю) - стирает последнюю ячейку - возвращает последнюю ячейку - стирает последнюю ячейку
Вообще пользователь может и 100 ячеек скорректировать и даже на разных листах, а потом нажал сохранить (а надо сначала откатить все изменения с начала открытия, а потом сохраниться) - может посоветуете какой то цикл к отмене? В итоге мы получаем две кнопки отмены при выходе) ПС: Описал максимально подробно, чтоб помогли именно с этой конкретной задачей, а не предлагали другие варианты решения. Там не так все просто, после сохранения предусмотрен откат действий (надеюсь каким то циклом который упрется в то что уже откатывать нечего и закончит работу цикла), но потом допишет время сохранения файла. В итоге: пользователь нажав сохранить ничего не изменит, только добавит дату сохранения) Дату умею добавлять ) Заранее спасибо!
Изменено: |
|||
|
|
16.06.2017 21:31:11
Думаю, что тем способом который Вы допускаете как единственный, это сделать невозможно. Хотя могу ошибаться.
Согласие есть продукт при полном непротивлении сторон
|
|||||
|
|
16.06.2017 21:40:52
Sanja,
Я не хотел читать комменты типа "а зачем тебе откатывать? можно же просто выйти без сохранения" и т.д. .... Я видел темы по откатам макросов, значит можно реализовать нужный мне макрос по откатам простых действий и код будет проще (надеюсь). Про цикл я не утверждаю)
Изменено: |
|||
|
|
16.06.2017 21:45:57
Проще выйти без сохранения. По памяти:
Изменено:
Я сам - дурнее всякого примера! ...
|
|||
|
|
16.06.2017 21:55:20
RoMuLX, я так понял, что Вы хотите при помощи Undo отменить НЕСКОЛЬКО подряд выполненных действий. Но дело в том, что Application.Undo отменяет ПОСЛЕДНЕЕ действие.
|
|
|
|
16.06.2017 22:00:57
![]() Вот даже сейчас: можете кратко пояснить - почему надо именно откатами(Undo) делать, а не просто вернуть книгу в то состояние, которое было до...До какого момента, кстати? Как понять, когда закончить откатывать? Ведь количество откатов может быть разным на разных ПК. У кого-то вообще может быть только 5 установлено. Что делать-то? Да и событие-то какое: перед сохранением. В этом случае проще вообще запретить всякое сохранение книги. Тогда и откатывать ничего не надо. В общем я бы сначала выслушал ЗАЧЕМ это, а потом уже подумал, что реально можно с этим сделать. Ну а если не хотите пояснять, дело личное. Через Undo это сделать нереально.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|||
|
|
16.06.2017 22:06:37
Юрий М, я думал, что Application.Undo полностью заменяет Ctrl+Z, т.к. если заполнить к примеру 5 ячеек и потом нажать 5 раз Ctrl+Z, то сотрутся все 5 ячеек в порядке убывания ввода.
Мне бы макрос на это. Но, блин, макрорекордер не пишет командуCtrl+Z)) kuklp, Ваш код я ввел и после нажатия сохранения зависает файл. Может это и то что мне нужно, но потом надо придумать "стоп-кран" от зависания. и можно потом будет добавить после "стоп-крана" дописать еще мою часть кода?
Не знаю как вы вставляете код так красиво, чтоб с подсветкой синтаксиса. Если что у меня Excel 13.
Изменено: |
|||
|
|
16.06.2017 22:13:12
По поводу кода: ищите такую кнопку и заодно отформатируйте с её помощью своё стартовое сообщение. |
|||
|
|
16.06.2017 22:13:37
Workbook_SheetChange P.S. а оформить код просто - кнопка <...> на панели редактирования. ![]()
Я сам - дурнее всякого примера! ...
|
|||
|
|
16.06.2017 22:53:32
The_Prist, хорошо, расскажу полную ситуацию) внимание: много букв))
У меня есть инженерный расчетный файл. Он считает таблицы без макросов. А макрос как раз на отслеживание входа из этой темы: Но тут проблема, что окошко при выходе не вылезает, да и всегда идет сохранение файла (значит можно что-то по ошибке испортить и выйти). И что бы правильно работало добавил форму при выходе: В итоге у меня форма fmQueryClose на "сохранить" "не сохранять" "отмена". 1. Если жмем "сохранить" - то в реестр добавляется пользователь+дата, потом скрывает все листы, потом идет сейв, потом выход. 2. Если жмем "не сохранять" - то откатывает все изменения, потом скрывает все листы, потом идет сейв, потом выход. 3. Если жмем "отмена" - то просто закрывается форма и ничего больше. Во всех этих вариантах стандартного диалога при выходе не будет. и такой код у меня склепался из вышеперечисленных источников:
При выходе без сохранения я подумал именно про откаты(Undo), т.к. вручную-то я могу после открытия откатить все, что исправил в ячейках, зажатием Ctrl+Z. Получаем только открытый открытый файл, но после отката нужно скрыть все страницы.
в файле в принципе не более 100 ячеек для ввода данных (остальное ВПРом подцепляется в зависимости от того что ввели в исходных + математические формулы )
Ну если что, буду использовать методы для отмены действий макросов (по идее должно помочь)
Изменено: |
|||||||||||||
|
|
16.06.2017 23:07:19
я первый раз так нажал и код вставился весть в 1 строчку, а щас почему-то сработало как надо))) |
|||||
|
|
16.06.2017 23:16:40
|
|||
|
|
17.06.2017 10:59:12
В вашем случае оптимально делать просто копию листа на временном листе книги(скрытом). И в нужный момент просто копировать оттуда все ячейки на рабочий лист. И никаких откатов не надо отслеживать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
|
|
|
|
17.06.2017 13:16:57
Надеюсь у меня получится: у меня в файле 6 вкладок расчетов и в каждой только от 5 до 100 ячеек для заполнения в разных местах листа, остальные ячейки с формулами и защищены паролем от изменений. и еще 6 вкладок сводящих результаты с предыдущих листов. |
||||
|
|
|||