Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Событие по нажатию клавиш


Автор: Веди 1.12.2016, 05:32
привет, друзья! в Excel необходимо выполнять бесконечную программу: Code1, после "пробела", Code2 и т.д., а если нажимает "Esc",
то выход из программы:

Код

Sub mainProg()
  do
    '...Code1

    '...Пауза
    if нажать пробел then продолжить Code2
    if нажать Esc then Exit do
    '...Cod2
  loop
End Sub


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

помогите пожалуйста разобраться.

Автор: kapbepucm 16.1.2017, 14:07
Код
Option Explicit
Private Type POINTAPI
  x As Long
  y As Long
End Type
Private Type MSG
  hWnd As Long
  message As Long
  wParam As Long
  lParam As Long
  time As Long
  pt As POINTAPI
End Type
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (ByRef lpMsg As MSG, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function TranslateMessage Lib "user32" (ByRef lpMsg As MSG) As Long
Private Const WM_CHAR As Long = &H102
Private Const WM_KEYDOWN As Long = &H100
Private Const PM_REMOVE As Long = &H1
Private Const PM_NOYIELD As Long = &H2
Public Function ReadKeyboardBuffer() As Long
  Dim msgMessage As MSG
  Dim hWnd As Long
  Dim lResult As Long
  hWnd = 0
  lResult = PeekMessage(msgMessage, hWnd, WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE + PM_NOYIELD)
  If lResult <> 0 Then
    lResult = TranslateMessage(msgMessage)
    lResult = PeekMessage(msgMessage, hWnd, WM_CHAR, WM_CHAR, PM_REMOVE + PM_NOYIELD)
    ReadKeyboardBuffer = msgMessage.wParam
  End If
End Function
Sub mainProg()
'...
  Select Case ReadKeyboardBuffer
  Case 27:
    '...
  Case 32:
    '...
  Case Else
  End Select
'...
End Sub

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)