Панели команд/элементы управления Excel на местных языках

Win-XP/Excel 2003/VBA....

У меня есть следующий фрагмент кода для перехвата всех действий вставки, инициированных пользователем (главное меню, контекстное меню и клавиша управления-V), и отправки его в Sub TrappedPaste()

....
Application.CommandBars("Edit").Controls("Paste").OnAction = "TrappedPaste"
Application.CommandBars("Edit").Controls("Paste Special...").OnAction = "TrappedPaste"
Application.CommandBars("Cell").Controls("Paste").OnAction = "TrappedPaste"
Application.CommandBars("Cell").Controls("Paste Special...").OnAction = "TrappedPaste"
Application.OnKey "^v", "TrappedPaste"
....

Этот код работает нормально. Чудо произошло во время глобального развертывания листа, потому что «Редактировать» не «Редактировать», а «Вставить» не «Вставить» на немецком, французском и всех других языках между (A) leut и (Z) apotec :- О

Q:

  1. Есть ли способ добиться независимости от языка пользовательского интерфейса Excel, т. е. существует ли числовой эквивалент аргумента «Вставить», который одинаков во всех национальных языках?
  2. как найти этот номер?
  3. ctrl-V всегда ctrl-v на всех локальных языках Windows?

Заранее благодарю за любую помощь

С уважением МайкД


person MikeD    schedule 14.07.2010    source источник
comment
Вы забыли Shift+Ins и щелчок правой кнопкой мыши.   -  person GSerg    schedule 14.07.2010
comment
@GSerg: спасибо за подсказку о Shift-Ins .... щелчок правой кнопкой мыши открывает контекстное меню, к которому обращается ... CommandBars (Cell) ....   -  person MikeD    schedule 14.07.2010


Ответы (1)


Каждый элемент управления на панели инструментов имеет ID, который можно использовать с функцией FindControl:

? application.CommandBars("Edit").FindControl(msoControlButton, 22).Caption

где 22 — идентификатор кнопки Paste. Насколько мне удалось проверить, этот номер одинаков для разных языков.
Так что вы можете найти их в английской версии и просто жестко закодировать.

person GSerg    schedule 14.07.2010
comment
Хорошо, я попробую это; а как насчет имен командной панели, имеют ли они похожие идентификаторы, потому что EDIT не является EDIT на других языках? - person MikeD; 14.07.2010
comment
Нет, редактировать IS редактировать на других языках. Потому что, в отличие от элементов управления, панели команд имеют .Name и .NameLocal. - person GSerg; 14.07.2010
comment
окончательное решение, основанное на вашем предложении, состоит в том, чтобы заменить ... Controls (Paste) ... на ... FindControl (ID: = 22) ... для вставки и 755 для специальной вставки. Также нужно будет добавить одну строку для стандартных кнопок инструментов - grrr - большое спасибо за вашу помощь GSerg - person MikeD; 14.07.2010
comment
По моему опыту, вы также должны использовать идентификатор для CommandBars. Как сказал GSerg, Name остается "Edit" в других языках. Однако, когда несколько панелей команд имеют одно и то же имя (например, панель команд "Cell" для обычного режима и режима предварительного просмотра с разрывом страницы), вы не знаете, какую из них вы собираетесь получить. - person Eldritch Conundrum; 13.05.2015