2015-12-02 4 views
0

Я работаю над программным обеспечением, которое оценивает умение пользователя в Excel. Таким образом, пользователь выполняет некоторую операцию в Excel, как задано в серии вопросов, , и моя задача - запрограммировать что-то, чтобы проверить, что сделал пользователь, используя Excel COM Object.
Я могу проверить, например: Формат ячейки, ориентация ячеек, область печати, тип шрифта, объединенные ячейки и т. Д. Но я изо всех сил пытаюсь проверить операцию «Вставить специальные». У меня есть крючок с событием Change рабочего листа и самой рабочей таблицы. Поэтому я могу поймать, какой keyStroke пользователь сделал, и фактический формат ячейки. Но я не могу найти способ узнать, пользовался ли пользователь «Только форматом - специальная вставка». Кто-нибудь может мне помочь в этом?Excel Detect PasteSpecial operation

+0

Если вы в состоянии догнать «макрос записи», вы можете записать с ним файл журнала .... но это просто идея, и я не знаю, возможно ли и как это возможно ... –

ответ

1

вы можете обнаружить «Специальная вставка» событие, контролируя список Undo через:

If Application.CommandBars("Standard").Controls("&Undo").List(1) = "Paste Special" Then 

Не нужно проверить фактические нажатия клавиш.

К сожалению, он не предлагает никаких дополнительных сведений о том, какой тип специальной пасты был выполнен. Если вам известен диапазон (либо предопределенный, либо через Target в событии Workbook_SheetChange), вы можете выполнить отмену (Application.Undo), сохранить значения ячеек перед пастой, повторить вставку в Target. Если значения изменились, это не было «Только формата - специальная вставка». Надеюсь это поможет.

+0

Спасибо за ваш вход, ваше предложение в сочетании с небольшим сотовым скрытым форматом, таким как Custom Format «0,00E + 00», сделает трюк – Hugo

+0

Убедитесь, что вы отключили обнаружение событий ('Application.EnableEvents = False'), как только рабочий лист событие изменения события, потому что оно будет срабатывать снова, как только ваш сценарий вставляет значения в ячейки. Это вызовет бесконечный цикл. После того, как вы закончите все, что вам нужно, повторно включите обнаружение событий ('Application.EnableEvents = True'). Cheers, – nbayly

+0

На самом деле мой скрипт ничего не вставлял, он просто контролирует, что делает пользователь – Hugo

Смежные вопросы