none
Funktionstasten im Userform RRS feed

  • Frage

  • hallo zusammen, ich möchte wenn ein User im Userform arbeitet und die F6 Taste drückt ein Macro ausgeführt wird. in der Tabelle geht es ohne Probleme, gibt es aber gar keine Möglichkeit im Userform?
    Donnerstag, 10. Mai 2012 07:43

Antworten

  • Option Explicit
    Private blnAus As Boolean
    Private Declare Function GetAsyncKeyState Lib "user32.dll" _
        (ByVal vKey As Long) As Integer
    Private Declare Sub Sleep Lib "kernel32.dll" _
        (ByVal dwMilliseconds As Long)
    Private Sub cmd_start_Click()
        MsgBox "test"
        blnAus = True
        Unload Me
    End Sub
    Private Sub UserForm_Activate()
        Call GetKeys
    End Sub
    Private Sub GetKeys()
        Do
            DoEvents
            Sleep 20
            If GetAsyncKeyState(vbKeyF5) Then Call cmd_start_Click
        Loop Until blnAus
    End Sub
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = 0 Then Cancel = True
        blnAus = True
    End Sub
    Private Sub UserForm_Terminate()
        blnAus = True
    End Sub

    Donnerstag, 10. Mai 2012 09:24

Alle Antworten

  • Hallo Martin,

    das klappt per KeyBindings nur dann, wenn der Fokus nicht mehr auf der Userform liegt.

    Ansonsten musst du das KeyUp/KeyDown-Ereignis der Userform auswerten, was aber wieder zu Problemen führen kann, wenn die Eingabemarke / der Fokus auf einem Steuerelement auf der Userform liegt.

    Hoffentlich gibt es eine einfache Lösung (KeyBinds) - mir fällt da leider keine ein.

    Z.B.

    ' In der Userform

    Private Sub UserForm_Activate()
    Modul1.SetKB
    End Sub

    Private Sub UserForm_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = BuildKeyCode(wdKeyF6) Then Modul1.MBO End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Modul1.keybd.Disable End Sub ' Im Modul "Modul1" Public keybd As KeyBinding Sub MBO() MsgBox keybd.Command End Sub Sub SetKB() CustomizationContext = MacroContainer Set Modul1.keybd = Application.KeyBindings.Add(KeyCategory:=wdKeyCategoryMacro, Command:="Project.Modul1.MBO", _ KeyCode:=BuildKeyCode(wdKeyF6)) End Sub



    Gruß Christian


    • Bearbeitet -CHF- Donnerstag, 10. Mai 2012 09:03
    Donnerstag, 10. Mai 2012 08:54
  • Option Explicit
    Private blnAus As Boolean
    Private Declare Function GetAsyncKeyState Lib "user32.dll" _
        (ByVal vKey As Long) As Integer
    Private Declare Sub Sleep Lib "kernel32.dll" _
        (ByVal dwMilliseconds As Long)
    Private Sub cmd_start_Click()
        MsgBox "test"
        blnAus = True
        Unload Me
    End Sub
    Private Sub UserForm_Activate()
        Call GetKeys
    End Sub
    Private Sub GetKeys()
        Do
            DoEvents
            Sleep 20
            If GetAsyncKeyState(vbKeyF5) Then Call cmd_start_Click
        Loop Until blnAus
    End Sub
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = 0 Then Cancel = True
        blnAus = True
    End Sub
    Private Sub UserForm_Terminate()
        blnAus = True
    End Sub

    Donnerstag, 10. Mai 2012 09:24