Надстройка Excel с бесшовной Отменить: возможно? - PullRequest
9 голосов
/ 22 июня 2011

Я рассматриваю возможность реализации надстройки Excel с использованием COM (, а не VBA), который будет манипулировать данными в рабочей таблице.

Мне понадобится эта надстройка для плавной интеграции со стеком отмены. Более конкретно:

  1. Любые изменения, вносимые этой надстройкой в ​​данные, должны быть отменены пользователем (с помощью стандартного действия Отменить)
  2. Элементы в стеке Undo до начала действия надстройки должны быть сохранены

В моем (хотя и поверхностном) исследовании до сих пор неясно, может ли Excel разрешить это. Если это не так, это showtopper, и надстройка не будет иметь значения.

Мой вопрос: возможно ли это? Это больше вопрос «да или нет», чем вопрос «как», так как мне нужно знать, приступаю ли я к погоне за диким гусем или нет. Тем не менее, любые указания на то, как это можно сделать, будут бонусом.

Ответы [ 3 ]

4 голосов
/ 22 июня 2011

Похоже, что это невозможно в конце концов.

Метод Application.OnUndo очищает текущий стек отмены и помещает себя сверху.
Похоже, больше ничего не связано с настройкой отмены.

Это возможно.

Application.OnUndo регистрирует подпрограмму отмены для текущей исполняемой подпрограммы:

sub ImMakingChanges()
  cells(1,1).interior.color = vbyellow
  application.onundo "Undo the stupid color", "RemoveMyStupidChanges"
end sub

sub RemoveMyStupidChanges()
  cells(1,1).interior.colorindex = xlnone
end sub

Очевидно, сохраняя предыдущуюсостояние в дикой природе это вообще кошмар.Но вот, пожалуйста.

Кроме того, ваша подпрограмма отмены должна быть видимой для широкой публики, чтобы Excel мог ее найти и вызвать.

1 голос
/ 17 февраля 2013

Очевидно, что не возможно, и нет планов поддерживать его даже в Office 2013, согласно ответу сотрудника MSFT в этой теме .

0 голосов
/ 23 июня 2011

Похоже, что все-таки возможно

Это можно сделать, но вам придется написать довольно сложный обработчик Undo. Вот ссылка, которая хорошо скажет вам точно
как: http://www.jkp -ads.com / Статьи / UndoWithVBA01.asp

К счастью, ссылка имеет полный исходный код, и выглядит она по-железному, так что проблем не должно быть.
Я буду рад услышать, как / если это сработало для вас.

PS: вот та же ссылка на голландском: http://www.jkp -ads.com / Articles / UndoWithVBA01NL.asp

...