Access Key

G

Greg B

I asked last week about access keys and I need to ask a bit more.
Sub SetupF2()
Application.OnKey "{F2}", "OpenForm"
End Sub

Sub OpenForm()
UserForm1.Show
End Sub

This was the code I was given but it does not seem to work with userform. I
placed the code in the userform activate macro, and when I press f2 it does
not do a thing.

Is it possible to use the function keys from a userform?

Thanks
Greg
 
G

Greg B

Same problem I cant trigger it from the userform. I start the program and
it loads the MAIN userform. It is on this userform I want to have the
ability to use short cut keys.

Sorry I wasnt clear.

Greg
 
O

Office_Novice

Put This in The 'ThisWorkbook Module:

Sub SetupF2()
Application.OnKey "^{F2}", "OpenForm" 'I added the Ctrl key so Ctrl +F2
End Sub

in a standard module put:

Function OpenForm()
UserForm1.Show
End Function

HTH
 
M

Michel Pierron

Hi Greg,
To do this, you must subclass then "Main" userform and use API functions as
follows :

For example, in a standard module:
Option Explicit
Declare Function SetWindowLong& Lib "user32" Alias _
"SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal wNewWord&)
Declare Function RegisterHotKey& Lib "user32" (ByVal hWnd& _
, ByVal id&, ByVal fsModifiers&, ByVal vk&)
Declare Function UnregisterHotKey& Lib "user32" (ByVal hWnd&, ByVal id&)
Declare Function CallWindowProc& Lib "user32.dll" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal
lParam&)

Public OldWinProc&
Public Const HOTKEY_ID& = 0
Public Const GWL_WNDPROC = (-4)

Function NewWinProc&(ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
If Msg = &H82 Then ' WM_NCDESTROY
UnregisterHotKey hWnd, HOTKEY_ID
SetWindowLong hWnd, GWL_WNDPROC, OldWinProc
ElseIf Msg = &H312 Then ' WM_HOTKEY
Call Main.HotkeyExecute
End If
NewWinProc = CallWindowProc(OldWinProc, hWnd, Msg, wParam, lParam)
End Function

Sub Test()
Main.Show
End Sub

In the Main module:
Option Explicit
Private Declare Function FindWindow& Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName$, ByVal lpWindowName$)

Private Sub UserForm_Initialize()
Dim hWnd&: hWnd = FindWindow(vbNullString, Me.Caption)
' Register the hotkey.
If RegisterHotKey(hWnd, HOTKEY_ID, 0&, vbKeyF2) Then
' Subclass the UserForm to watch for WM_HOTKEY messages.
OldWinProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf NewWinProc)
End If
End Sub

Sub HotkeyExecute()
Me.Hide
Sales.Show
Me.Show
End Sub

Regards,
MP
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top