powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Привязка горячих клавиш к процедурам (VBA. Excel)
8 сообщений из 8, страница 1 из 1
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34131888
Светуля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я написала на VBA процедуру, мне необходимо чтоба процедура вызывалась (из активной рабочей книги Excel) нажатием определённых клавиш. Я столкнулась с этим впервые и не знаю, как это сделать. Помогите, пожалуйста! Заранее благодарна!
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34132009
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если записать эти макросы в личной книге макросов?
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34132121
SvIva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если твой макрос (процедуры) виден в окне макросов (Alt+F8), то назначение комбинации клавиш делается через Параметры этого окна.
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34132146
Example
This example assigns "InsertProc" to the key sequence CTRL+PLUS SIGN and assigns "SpecialPrintProc" to the key sequence SHIFT+CTRL+RIGHT ARROW.

Private Sub Workbook_Open()
Application.OnKey "^{+}", "InsertProc"
Application.OnKey "+^{RIGHT}", "SpecialPrintProc"
End Sub
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34138947
Светуля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Вот только в чём проблема...
Как с помощью оператора .OnKey уследить за нажатием одной из нескольких клавишь? Клавиши, на которые необходимо реагировать, находятся в массиве. Массив динамический, т.е. мы не знаем точное число элементов массива. Нужно отследить, чтобы при нажатии одной из этих клавиш выполнялась процедура Sub1.
По идее, перебрать элементы массива можно через цикл:
For I=1 To Kol 'Kol - количество элементов в массиве
Application.OnKey array_key(I), "Sub1"
Next I
...но в данном случае этот вариант не проходит: выдаёт ошибку.
Как можно решить эту задачу, не используя цикла?
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34139651
Светуля
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предыдущую проблему разрешила, написав ручной цикл. Возник новый вопрос: как отследить, какая именно клавиша была нажата? (это значение необходимо передать в другую процедуру).
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34143934
СветуляПредыдущую проблему разрешила, написав ручной цикл. Возник новый вопрос: как отследить, какая именно клавиша была нажата? (это значение необходимо передать в другую процедуру).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
 '***************************************************************************
'*                                                                         *
'* MODULE NAME:     CHECK KEYBOARD BUFFER                                  *
'*                                                                         *
'* AUTHOR & DATE:   STEPHEN BULLEN,  Stephen@oaltd.co.uk                   *
'*                                                                         *
'* DESCRIPTION:     This module contains an example of using Windows API   *
'*                  calls to check the state of the message buffer.  The   *
'*                  example includes a check for "Key down" events, which  *
'*                  are used to stop a loop.  The module contains functions*
'*                  for both 16-bit and 32-bit versions of Windows.        *
'*                                                                         *
'***************************************************************************

Option Base  1 
Option Explicit



'********************************************************************
'* DECLARE WINDOWS 32-BIT API CALLS                                 *
'********************************************************************

'Type to hold the x and y coordinates of the mouse pointer
Type POINTAPI32
    x As Long
    y As Long
End Type

'Type to hold the Windows message information
Type MSG32
    hWnd As Long        'the window handle of the app
    message As Long     'the type of message (e.g. keydown, keyup etc)
    wParam As Long      'stores the key code
    lParam As Long      '?
    time As Long        'time when message posted
    pt As POINTAPI32    'coordinate of mouse pointer when messahe posted
End Type

'Find the window handle for this instance of Excel
Declare Function FindWindow32 Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

'Look in the message buffer for a message
Declare Function PeekMessage32 Lib "USER32" Alias "PeekMessageA" (lpMsg As MSG32, _
    ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, _
    ByVal wRemoveMsg As Long) As Long

'Translate the message from a virtual key code to a ASCII code
Declare Function TranslateMessage32 Lib "USER32" Alias "TranslateMessage" (lpMsg As MSG32) As Long


'********************************************************************
'* Demo procedure to test the keyboard checking function            *
'********************************************************************

Sub procTestKey()

Dim iCount As Integer
Dim sKey As String

Application.DisplayStatusBar = True

iCount =  0 

'Just loop until a key is pressed
Do
    iCount = iCount +  1 
    Application.StatusBar = "Loop: " & iCount & "  Press any key to stop."

    '******************************************
    '*         INSERT YOUR CODE HERE          *
    '******************************************

    'Call the appropriate routine to check the keyboard buffer
   
        sKey = funCheckKey32
  
Loop Until sKey <> ""

'Display the key pressed
MsgBox "You pressed: " & sKey

Application.StatusBar = False

End Sub




'***************************************************************************
'*                                                                         *
'* FUNCTION NAME:   CHECK KEYBOARD BUFFER - 32 BIT                         *
'* AUTHOR & DATE:   STEPHEN BULLEN, 9 APRIL 1996                           *
'*                                                                         *
'* DESCRIPTION:     This function uses Windows API calls to check if there *
'*                  are any 'Key down' messages for the application.  If   *
'*                  there are some, it returns the key pressed as a string *
'*                                                                         *
'***************************************************************************

Function funCheckKey32() As String

'Dimension variables
Dim msgMessage As MSG32
Dim iHwnd As Long
Dim i As Long

'Dimension Windows API constants
Const WM_CHAR As Long = &H102
Const WM_KEYDOWN As Long = &H100
Const PM_REMOVE As Long = &H1
Const PM_NOYIELD As Long = &H2

'Default to no key pressed
funCheckKey32 = ""

'Get the window handle of this application
iHwnd = FindWindow32("XLMAIN", Application.Caption)

'See if there are any "Key down" messages
i = PeekMessage32(msgMessage, iHwnd, WM_KEYDOWN, WM_KEYDOWN, PM_REMOVE + PM_NOYIELD)

'If so ...
If i <>  0  Then
    '... translate the virtual key code to a character code ...
    i = TranslateMessage32(msgMessage)
    
    '... and get the character code message
    i = PeekMessage32(msgMessage, iHwnd, WM_CHAR, WM_CHAR, PM_REMOVE + PM_NOYIELD)

    'Return the character of the key pressed
    funCheckKey32 = Chr(msgMessage.wParam)
End If

End Function

http://www.bmsltd.ie/Excel/SBXLPage.asp

Удачи
...
Рейтинг: 0 / 0
Привязка горячих клавиш к процедурам (VBA. Excel)
    #34144066
СветуляСпасибо! Вот только в чём проблема...
For I=1 To Kol 'Kol - количество элементов в массиве


Option Base 1 не забыт ?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Привязка горячих клавиш к процедурам (VBA. Excel)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]