Как можно реализовать аналог кода VB
Код: Выделить всё
Do Until Keypressed
не могу найти

Модератор: Naeel Maqsudov
Код: Выделить всё
Do Until Keypressed
Какую кнопку? Любую?а хочется повторять пока не нажмут кнопку.
Код: Выделить всё
[color=green]'============= Функции для определения нажатой клавиши =================================[/color]
[color=darkblue]Public[/color] [color=darkblue]Declare[/color] [color=darkblue]Function[/color] GetKeyState [color=darkblue]Lib[/color] "user32" ([color=darkblue]ByVal[/color] nVirtKey [color=darkblue]As[/color] VirtualKeys) [color=darkblue]As[/color] [color=darkblue]Integer[/color]
[color=darkblue]Public[/color] [color=darkblue]Enum[/color] VirtualKeys [color=green]' Virtual Keys, Standard Set[/color]
VK_LBUTTON = &H1: VK_RBUTTON = &H2: VK_CANCEL = &H3: VK_MBUTTON = &H4 [color=green]'VK_MBUTTON = &H4 - NOT contiguous with L RBUTTON[/color]
VK_BACK = &H8: VK_TAB = &H9: VK_CLEAR = &HC: VK_RETURN = &HD
VK_SHIFT = &H10: VK_CONTROL = &H11: VK_MENU = &H12: VK_PAUSE = &H13: VK_CAPITAL = &H14: VK_ESCAPE = &H1B
VK_SPACE = &H20: VK_PRIOR = &H21: VK_NEXT = &H22: VK_END = &H23: VK_HOME = &H24
VK_LEFT = &H25: VK_UP = &H26: VK_RIGHT = &H27: VK_DOWN = &H28: VK_SELECT = &H29: VK_PRINT = &H2A
VK_EXECUTE = &H2B: VK_SNAPSHOT = &H2C: VK_INSERT = &H2D: VK_DELETE = &H2E: VK_HELP = &H2F
[color=green]' VK_A thru VK_Z are the same as their ASCII equivalents: 'A' thru 'Z'[/color]
[color=green]' VK_0 thru VK_9 are the same as their ASCII equivalents: '0' thru '9'[/color]
VK_NUMPAD0 = &H60: VK_NUMPAD1 = &H61: VK_NUMPAD2 = &H62: VK_NUMPAD3 = &H63: VK_NUMPAD4 = &H64: VK_NUMPAD5 = &H65: VK_NUMPAD6 = &H66: VK_NUMPAD7 = &H67: VK_NUMPAD8 = &H68: VK_NUMPAD9 = &H69
VK_MULTIPLY = &H6A: VK_ADD = &H6B: VK_SEPARATOR = &H6C: VK_SUBTRACT = &H6D: VK_DECIMAL = &H6E: VK_DIVIDE = &H6F
VK_F1 = &H70: VK_F2 = &H71: VK_F3 = &H72: VK_F4 = &H73: VK_F5 = &H74: VK_F6 = &H75: VK_F7 = &H76: VK_F8 = &H77: VK_F9 = &H78: VK_F10 = &H79: VK_F11 = &H7A: VK_F12 = &H7B
VK_F13 = &H7C: VK_F14 = &H7D: VK_F15 = &H7E: VK_F16 = &H7F: VK_F17 = &H80: VK_F18 = &H81: VK_F19 = &H82: VK_F20 = &H83: VK_F21 = &H84: VK_F22 = &H85: VK_F23 = &H86: VK_F24 = &H87
VK_NUMLOCK = &H90: VK_SCROLL = &H91
[color=green]' VK_L VK_R - left and right Alt, Ctrl and Shift virtual keys.[/color]
[color=green]' Used only as parameters to GetAsyncKeyState() and GetKeyState().[/color]
[color=green]' No other API or message will distinguish left and right keys in this way.[/color]
VK_LSHIFT = &HA0: VK_RSHIFT = &HA1: VK_LCONTROL = &HA2: VK_RCONTROL = &HA3: VK_LMENU = &HA4: VK_RMENU = &HA5
VK_ATTN = &HF6: VK_CRSEL = &HF7: VK_EXSEL = &HF8: VK_EREOF = &HF9: VK_PLAY = &HFA
VK_ZOOM = &HFB: VK_NONAME = &HFC: VK_PA1 = &HFD: VK_OEM_CLEAR = &HFE
[color=darkblue]End[/color] [color=darkblue]Enum[/color]
[color=green]'==========================================================================================[/color]
[color=darkblue]Public[/color] [color=darkblue]Function[/color] KeyPressed([color=darkblue]ByVal[/color] VKey [color=darkblue]As[/color] VirtualKeys) [color=darkblue]As[/color] [color=darkblue]Boolean[/color]
KeyPressed = IIf(GetKeyState(VKey) < 0, [color=darkblue]True[/color], [color=darkblue]False[/color])
[color=darkblue]End[/color] [color=darkblue]Function[/color]
[color=darkblue]Sub[/color] ПримерИспользования()
[color=green]' запустите макрос, и в окне Immediate смотрите результат[/color]
[color=green]' во время работы макрос понажимайте клавиши Control, Alt, Shift[/color]
[color=green]' остановка макроса - Ctrl + Pause[/color]
[color=darkblue]Dim[/color] ControlPressed [color=darkblue]As[/color] [color=darkblue]Boolean[/color], AltPressed [color=darkblue]As[/color] [color=darkblue]Boolean[/color], ShiftPressed [color=darkblue]As[/color] [color=darkblue]Boolean[/color]
[color=darkblue]Do[/color]
DoEvents
ControlPressed = KeyPressed(VK_CONTROL)
AltPressed = KeyPressed(VK_MENU)
ShiftPressed = KeyPressed(VK_SHIFT)
Debug.Print ControlPressed, AltPressed, ShiftPressed
[color=darkblue]Loop[/color]
[color=darkblue]End[/color] [color=darkblue]Sub[/color]
Да точно. Извините за некорректное выражение и постановку вопроса.Teslenko_EA писал(а):Здравствуйте pilligrim.
команды (или оператора) Keypressed в VBA не существует, как в прочем и в VB.
Скорее всего это булевая переменная, а нажатие кнопки инвертирует её значение.
Евгений.
Код: Выделить всё
Do Until Keypressed
[I]действие[/I]
Loop
Гениально. Спасибо.Teslenko_EA писал(а):Здравствуйте pilligrim.
образец привязан "только на ESC" (KeyAscii = 27)
проверяется событие активного контрола, на форме он один, но если будет несколько, Вы понимаете, проверок нажатия тоже должно быть несколько.
Евгений.