Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2009, 15:17   #1
dsapa
Пользователь
 
Регистрация: 22.05.2008
Сообщений: 82
По умолчанию Как отловить событие нажатия клавиши Esc?

Здравствуйте!
Возможно ли, чтобы при нажатии Esc все скрытые строки таблицы Excel отображалить? Примерно так же, как при выключении автофильтра.
Подскажите строчку кода, пожалуйста.
dsapa вне форума Ответить с цитированием
Старый 21.07.2009, 16:26   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub СначалаЗапускаемОдинРазЭтотМакрос()
    Application.OnKey "{ESCAPE}", "ОтобразитьСтроки"
End Sub

Sub ОтобразитьСтроки()
    ActiveSheet.AutoFilterMode = False ' отключаем автофильтр
    ' или
    Rows.Hidden = False ' отображаем все скрытые строки
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 21.07.2009, 16:48   #3
dsapa
Пользователь
 
Регистрация: 22.05.2008
Сообщений: 82
По умолчанию

Круто! Спасибо!
dsapa вне форума Ответить с цитированием
Старый 02.12.2016, 01:56   #4
Веди
Пользователь
 
Аватар для Веди
 
Регистрация: 05.07.2012
Сообщений: 24
По умолчанию

привет, друзья!
у меня подобная проблема. в Excel необходимо выполнять бесконечную программу: Code1, после "пробела", Code2 и т.д., а если нажать "Esc", то выход из программы:
Код:
Sub mainProg()
  do
    Cells(1,  1) = "Cod1"
    '...Пауза
    if нажать пробел then продолжить Code2
    if нажать Esc then Exit do
    Cells(1,  1) = "Cod2"
  loop
End Sub
что-то никак не соображу, как отловить события, если кому не трудно, дайте подсказку?
Веди вне форума Ответить с цитированием
Старый 02.12.2016, 15:40   #5
Веди
Пользователь
 
Аватар для Веди
 
Регистрация: 05.07.2012
Сообщений: 24
По умолчанию

попробовал так но ругается на аргумент ".OnKey"
Код:
Sub mainProg()
  Do
    Cells(1, 1) = "Cod1"
    If Application.OnKey = "{SPACE}" Then Cells(1, 1) = "Cod2"
    If Application.OnKey = "{ESCAPE}" Then Exit Do
  Loop
End Sub
Веди вне форума Ответить с цитированием
Старый 02.12.2016, 16:12   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Попробуйте такой вариант
Код:
Sub runCode1
	Cells(1,1) = "Cod2"
End sub
sub runExit
	End
end sub
Sub mainProg()
  Do
    Cells(1, 1) = "Cod1"
    Application.OnKey "{SPACE}", "runCode1"
    Application.OnKey "{ESCAPE}", "runExit"
  Loop
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 02.12.2016, 16:19   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не удивительно...
при попытке расшифровать логику Вашей записи в компьютере должны были поплавиться дорожки! компьютер хоть не пострадал?

Саша, к чему этот цирк?
Application.OnKey "{SPACE}", "runCode1"
Application.OnKey "{ESCAPE}", "runExit"
теперь в Excele не воспользоваться ни пробелом, ни ecsape пока не отметить эту ерунду!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.12.2016, 16:31   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
Саша, к чему этот цирк?
А, ну да, код Application.OnKey не в цикл надо, а один раз при запуске (Auto_open) ну и отключать при закрытии книги.
По поводу биндов пробела и ескейпа, хз что за файл у аффтара, может именно такое извращение ему и нужно
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 02.12.2016, 16:47   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

понятно, что возможно всякое, но очевидно, что автор вопроса, имея довольно смутное представление о VBA, решил что его проблема решается вот таким способом
Тебе-то должно быть понятно, что это ни в какие рамки... можно конечно развить абсурд до абсолюта
но для того чтобы спросить у пользователя какое из двух альтернативных значений вписать в А1 - есть стандартные средства: InputBox, MsgBox, форму в конце концов можно слепить, но не назначать обычной клавише выполнение какой-то процедуры.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 02.12.2016, 17:04   #10
Веди
Пользователь
 
Аватар для Веди
 
Регистрация: 05.07.2012
Сообщений: 24
По умолчанию

на листе Excel решается задача, и "Cod1" выводит результат, затем надо остановить программу, что-бы оценить результат и в случае если не устраивает нажимаем "пробел", что-бы продолжить решение "Cod2" и далее "Cod1", в случае если результат устраивает - нажимаем "Esc" и выходим из программы оставив нужный результат "Cod1" на листе.

в чём моя логика не доступна?

никакие InputBox, MsgBox не годятся, надо просто сидеть у экрана и щёлкать пробел просматривая сотни вариантов решения, а вариант с MsgBox у меня есть, он как раз и подвигнул меня на решение иного варианта, с нажатием клавиш.
Веди вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TRichViewEdit - как отловить событие "курсор над таблицей" chandrasecar Компоненты Delphi 0 05.04.2009 20:04
Емулиривание нажатия клавиши xTANATOSx Win Api 9 10.10.2007 21:46
Эмуляция нажатия клавиши при отметке Checkbox delphi_beginner Win Api 3 02.06.2007 10:07
Эмуляция нажатия клавиши...... Zoidberg Win Api 4 11.01.2007 18:44