Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Привязка горячих клавиш к процедурам (VBA. Excel) / 8 сообщений из 8, страница 1 из 1
16.11.2006, 02:10:54
    #34131888
Светуля
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привязка горячих клавиш к процедурам (VBA. Excel)
Я написала на VBA процедуру, мне необходимо чтоба процедура вызывалась (из активной рабочей книги Excel) нажатием определённых клавиш. Я столкнулась с этим впервые и не знаю, как это сделать. Помогите, пожалуйста! Заранее благодарна!
...
Рейтинг: 0 / 0
16.11.2006, 07:46:56
    #34132009
orunbek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привязка горячих клавиш к процедурам (VBA. Excel)
А если записать эти макросы в личной книге макросов?
...
Рейтинг: 0 / 0
16.11.2006, 09:09:04
    #34132121
SvIva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привязка горячих клавиш к процедурам (VBA. Excel)
Если твой макрос (процедуры) виден в окне макросов (Alt+F8), то назначение комбинации клавиш делается через Параметры этого окна.
...
Рейтинг: 0 / 0
16.11.2006, 09:23:38
    #34132146
Привязка горячих клавиш к процедурам (VBA. Excel)
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
19.11.2006, 01:42:44
    #34138947
Светуля
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привязка горячих клавиш к процедурам (VBA. Excel)
Спасибо! Вот только в чём проблема...
Как с помощью оператора .OnKey уследить за нажатием одной из нескольких клавишь? Клавиши, на которые необходимо реагировать, находятся в массиве. Массив динамический, т.е. мы не знаем точное число элементов массива. Нужно отследить, чтобы при нажатии одной из этих клавиш выполнялась процедура Sub1.
По идее, перебрать элементы массива можно через цикл:
For I=1 To Kol 'Kol - количество элементов в массиве
Application.OnKey array_key(I), "Sub1"
Next I
...но в данном случае этот вариант не проходит: выдаёт ошибку.
Как можно решить эту задачу, не используя цикла?
...
Рейтинг: 0 / 0
19.11.2006, 23:53:37
    #34139651
Светуля
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Привязка горячих клавиш к процедурам (VBA. Excel)
Предыдущую проблему разрешила, написав ручной цикл. Возник новый вопрос: как отследить, какая именно клавиша была нажата? (это значение необходимо передать в другую процедуру).
...
Рейтинг: 0 / 0
21.11.2006, 15:03:11
    #34143934
Привязка горячих клавиш к процедурам (VBA. Excel)
СветуляПредыдущую проблему разрешила, написав ручной цикл. Возник новый вопрос: как отследить, какая именно клавиша была нажата? (это значение необходимо передать в другую процедуру).

Код: 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
21.11.2006, 15:25:28
    #34144066
Привязка горячих клавиш к процедурам (VBA. Excel)
СветуляСпасибо! Вот только в чём проблема...
For I=1 To Kol 'Kol - количество элементов в массиве


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


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