Страницы: 1
RSS
Назначение/считывание "горячих клавиш"
 
В другом посте задавал по ходу обсуждения вопрос и был запозорен за оффтоп (ну, вообще-то и правильно, что запозорен).  
Повторяю вопрос и часть обсуждения в новом топике:  
1. Как ПРОГРАММНО назначить сочетание клавиш на макрос?  
2. Как ПРОГРАММНО проверить наличие назначения конкретного сочетания клавиш на выполнение какого-нибудь макроса или встроенной функции?  
3. Как вывести список всех ТЕКУЩИХ назначений клавиш? (не из справки, естественно, а того, что есть реально)  
 
Уважаемый The_Prist мне в том посте  ( http://www.planetaexcel.ru/forum.php?thread_id=2753&thread_id=2753&page_forum=lastpage&allnum_forum=35#post91590 ) ответил:  
1. Application.OnKey  
2. Вроде никак.  
3. Вроде никак.  
   
The_Prist, вы меня озадачили и даже слегка напугали...  
Значит есть метод Application.OnKey, позволяющий НАЗНАЧИТЬ горячие клавиши (к стати, хоть и опять оффтоп, не приведёте пример строчки-примера, как им пользоваться?), но нет метода проверить, каково текущее назначение?  
А каково время жизни горячих клавиш, назначенных при помощи Application.OnKey? Навсегда, пока не переназначишь?  
Круто! Значит, какой-то "шутник" в своем макросе может переназначить мне клавиши Ёкселя, а я об этом узнаю только когда захочу этим сочетанием воспользоваться? А если файл "шутника" я к тому времени уже закрыл, то вылечу в ошибку?  
А при помощи Application.OnKey можно перехватить в том числе и стандартные Ctrl+C, Ctrl+V и т.д.?  
А как их тогда восстановить, если это не макросы, а системные функции?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Итак. По порядку:  
1. Пример: - Application.OnKey "{DEL}", "MyDelete" - перехватываем нажатие клавиши Delete.    
"А при помощи Application.OnKey можно перехватить в том числе и стандартные Ctrl+C, Ctrl+V и т.д.?". Можно. Посмотрите эту тему, там идет перехват Ctrl+C, Ctrl+V:  
http://www.planetaexcel.ru/forum.php/forum.php?thread_id=11495  
 
2. Время жизни горячих клавиш - если не стереть вовремя - до закрытия приложения. Если необходимо переназначить назначение клавиш только для одной книги, то на событие Workbook_Open прописываем назначение:  
 
Private Sub Workbook_Open()  
Application.OnKey "{DEL}", "MyDelete"  
End Sub  
 
А на событие Workbook_BeforeClose удаляем  
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
Application.OnKey "{DEL}"  
End Sub  
 
Если Вы переназначили стандартное сочетание(типа тех же Ctrl+C) например на Application.OnKey "^C", "MyDelete" , то после выполнения Application.OnKey "^C" - этим клавишам вернется их историческое назначение.  
 
 
Некоторые сокращения для гор.клавиш:  
Backspace — {BACKSPACE} или (BS)  
 
Break — {BREAK}  
 
Caps Lock — {CAPSLOCK}  
 
Delete или Del — {DELETE} или {DEL}  
 
вниз— {DOWN}  
 
End — {END}  
 
Enter — {ENTER}  
 
ESC — {ESCAPE} или {ESC}  
 
Home — {HOME}  
 
lnsert — {INSERT}  
 
стрелка влево — {LEFT}  
 
Num Lock — {NUMLOCK}  
 
Page Down — {PGDN}  
 
Page Up - {PGUP}  
 
Return - {RETURN}  
 
стрелка вправо - {RIGHT}  
 
Scroll Lock - {SCROLLLOCK}  
 
Tab - {TAB}  
 
вверх - {UP}  
 
От F1 до F15  -  {F1} до {F15}  
 
Shift - +  
 
Ctrl - ^  
 
Alt - %
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Алексей, Дмитрий уже ответил Вам.    
 
В дополнение по вопросам:  
 
1. Про OnKey в VBA-справке хорошо всё прописано с примерами.  
Там ещё и про блокирование есть:    
This example disables the SHIFT+CTRL+RIGHT ARROW key sequence.  
Application.OnKey "+^{RIGHT}", ""  
 
Помнится, здесь был пример использования OnKey: http://www.planetaexcel.ru/forum.php?thread_id=4269  
 
2. Такая возможность не предоставляется  
 
3. Кое-что можно подсмотреть, если нажать на панели  Visual Basic кнопку "Выполнить макрос", выбрать "Находится в: все открытые книги" – поочередно выбирать макросы и, нажимая на кнопку "Параметры",  смотреть или устанавливать сочетания клавиш.    
 
Прочитать сочетания клавиш из VBA невозможно, другими словами, такого свойства объекта Application VBA не предоставляет, предоставляет лишь метод OnKey задавать/блокировать/восстанавливать назначение сочетанию клавиш.  
   
Мы спокойно живём с этим, и ничего страшного не находим - присоединяйтесь :-)
 
Спасибо за консультацию.  
Английский я читаю, но далеко не бегло, поэтому справка по VBA Excel-2003 для меня - это мучение...  
Тем более, что в отличие от Excel-98 она жутко корявая, а в имеющейся справке-98рус замучишься что-нибудь искать, т.к. нет единого пускового файла и приходится открывать кучу файлов справки по одному, чтобы что-то найти.  
 
А как посмотреть назначенные на макросы клавиши, перебирая их "Параметры" я, естественно, знаю... Даже хохмы ради пытался записать соответствующий макрос макрорекордером (естественно, ничего не вышло).
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Сделал файл пример с блокировкой большей части сочетаний клавиш. И тут выяснилось, что для UserForm - не блокируется сочетание ALT-F4, а для листа блокируется ... Как это может быть?
 
Application.OnKey Key:="^%{del}", Procedure:=""  
' Блокировка сочетания клавиш CTRL + ALT + DEL  
 
Такая блокировка вообще не срабатывает
 
{quote}{login=DMK67}{date=28.03.2010 04:25}{thema=}{post}Сделал файл пример с блокировкой большей части сочетаний клавиш. И тут выяснилось, что для UserForm - не блокируется сочетание ALT-F4, а для листа блокируется ...post}{/quote}Дубликат:    
<EM>http://www.sql.ru/forum/actualthread.aspx?tid=746290</EM>  
Не понятно, зачем это Вам нужно. А удивляться, в общем-то, нечему - Excel не позволяет штатными средствами блокировать важные для него сочетания клавиш, например: F1, ALT-TAB, ALT-F4  
 
Что касается UserForm, то это особый объект (экземпляр класса), относящийся к   объектной модели VBA, там свои сочетания клавиш, свои события и прочие особенности. Например, Application.EnableEvents событиями формы игнорируется - это ответ на еще один Ваш вопрос с www.sql.ru  
 
Да и сам Excel не так прост, как может показаться. Попробуйте, например, при Вашей блокировке клавиш редактировать значение или формулу ячейки и понажимайте F1, ALT-TAB, ALT-F4. Блокировка не сработает.
 
Очень уж шаловливые ручки у менеджеров. Все время норовят залезть в файл, закрыв форму...  
Но я им ручонки укоротил... Слегка...Хотел обойтись малой кровью, но раз не выходит: На UserForm Terminate повесил закрытие и файла и приложения и компьютера...Жду результатов: кто первый прибежит жаловаться на нештатную работу компьютера...
 
Тему нашла интересную....  
Но у меня не получилось :(  
 
Есть Юзерформа START, и вот хотелось бы, чтобы на кнопочку нажать, она свернулась и открылось окно для редактирования макросов. Но вот следующим ниже образом не получилось:  
 
Private Sub Start_Edit_Click()  
START.Hide  
Application.OnKey "%{F11}"  
End Sub  
 
Может быть, кто-нибудь знает, как лучше запустить VBA из формы?  
 
Спасибочки всем!!!
 
Дайана, посмотрите файл ZVI. Там про картинки, но есть и кнопочка для просмотра кода.
 
Спасибо, Юрий :)  
Пошла разбираться :)
Страницы: 1
Наверх