Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
964to968
964to968
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

On Key oder Accelerator

On Key oder Accelerator
28.03.2008 17:50:13
Dirk
Hallo zusammen!
Habe mal wieder ein kleines Problem und zwar:
Wie ist es möglich ein Key Ereignis abzurufen?
Folgende Ausgangslage:
Eine Userform enthält 2 Schaltflächen (commandbuttons) jetzt möchte ich gerne, das die Pfeiltaste links den commandbutton links aktiviert am liebsten ohne das drücken von alt!! Wie es beim accelerator notwendig ist. Das gleiche natürlich für die Pfeiltaste rechts!!
Accelerator nimt ja nur strings auf welcher string steht den für die Pfeiltatsten?
Das ganze wahrscheinlich im ereignis Userform_initialize() es soll nur für die eine Userform gelten!
Weiß da jemand einen Rat?
Vielen lieben Dank im Vorraus
Dirk

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: On Key oder Accelerator
28.03.2008 18:04:18
Tino
Hallo,
habe mir eben deine Userform erstellt, mit 2 CommandButton.
Die Aktivierung mit rechter und linker Pfeiltaste geht doch auch ohne irgendwelche Makros!
Oder verstehe ich deine Frage falsch?
Gruß
Tino

AW: On Key oder Accelerator
28.03.2008 18:18:42
Dirk
Ich denke du verstehst mich falsch.
Mit activierung meine ich nicht den Focus, sonder das ereignis commandbuton_click() und die Prozedur die dahinter steht. Also ich möchte dem Anwender beides ermöglichen, entweder er klickt auf den commanbutton und löst das ereignis commandbutton_click() aus oder aber er drückt z.B. die Pfeiltaste rechts und löst somit das ereignis commandbutton_click() aus.
Ich hoffe das ist verständlicher
Gruß Dirk

Anzeige
AW: On Key oder Accelerator
28.03.2008 18:40:00
Dirk
Wollte die Frage nur offen stellen ich finde partout kein editieren? !;)

AW: On Key oder Accelerator
28.03.2008 18:55:00
Tino
Hallo,
glaube dass OnKey funktioniert in Userformen nicht, nur in der Exceltabelle.
Ich lass die Frage dennoch offen, vielleicht habe ich ja Unrecht.
Gruß
Tino

AW: On Key oder Accelerator
28.03.2008 21:32:00
Nepumuk
Hi,
versuch es mal so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
    ByVal vKey As Long) As Integer

Private Const VK_LEFT = &H25
Private Const VK_RIGHT = &H27

Public Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
        ByVal uElapse As Long, ByVal lpTimerFunc As Long)

    On Error Resume Next
    UserForm1.CommandButton1 = Cbool(GetAsyncKeyState(VK_LEFT))
    UserForm1.CommandButton2 = Cbool(GetAsyncKeyState(VK_RIGHT))
    Err.Clear
End Sub

' **********************************************************************
' Modul: UserForm1 Typ: Userform
' **********************************************************************

Option Explicit

Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Const GC_CLASSNAMEMSUSERFORM = "ThunderDFrame"

Private hWnd As Long

Private Sub CommandButton1_Click()
    MsgBox "1"
End Sub

Private Sub CommandButton2_Click()
    MsgBox "2"
End Sub

Private Sub UserForm_Activate()
    hWnd = FindWindow(GC_CLASSNAMEMSUSERFORM, Me.Caption)
    Call SetTimer(hWnd, 0, 50, AddressOf prcTimer)
End Sub

Private Sub UserForm_Terminate()
    Call KillTimer(hWnd, 0)
End Sub

Gruß
Nepumuk

Anzeige
AW: On Key oder Accelerator
28.03.2008 21:14:30
Herbert
Hi,
geht mit API:
Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long
Allerdings brauchst du, um den Status zu überwachen einen API-Timer oder eine Schleife,
die ständig läuft(mit DoEvents). Hohe Kosten für solchen Schnickschnack.
mfg Herbert

AW: On Key oder Accelerator
28.03.2008 22:22:00
Dirk
Danke euch, habe allerdings eine Funktion gefunden die ist zwar ein wenig umständlich aber funktioniert auch hervorragend. Für alle die es interessiert:
zuerst lege ich die commandbuttons fest:

Private Sub CommandButton1_Click()
MsgBox "links" ' Hier steht natürlich die gewünschte Prozedur!
End Sub



Private Sub CommandButton2_Click()
MsgBox "rechts" 'Hier steht natürlich die gewünschte Prozedur!
End Sub


Dann fange ich das drücken der rechten bzw. linken Maustaste ab:


Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As  _
Integer)
If KeyCode = &H25 Then Call CommandButton1_Click ' hier rufe ich einfach wieder die Prozedur ab
If KeyCode = &H27 Then Call CommandButton2_Click ' hier rufe ich einfach wieder die Prozedur ab
End Sub



Private Sub CommandButton2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As  _
Integer)
If KeyCode = &H25 Then Call CommandButton1_Click ' hier rufe ich einfach wieder die Prozedur ab
If KeyCode = &H27 Then Call CommandButton2_Click ' hier rufe ich einfach wieder die Prozedur ab
End Sub


So ist es egal ob ich den Button drücke oder die Pfeiltaste eventuell muss noch mit set focus gearbeitet werden... Also bei mir klappt es und es kommt dem OnKey Ereignis relativ nahe (Alles ohne Timer oder Schleife)
Viele Grüße
Dirk
PS: Die Not macht erfinderisch ;)

Anzeige
AW: On Key oder Accelerator
28.03.2008 22:32:00
Herbert
Hi,
wenn es so funktioniert, freu dich, allein, mir fehlt der Glaube.
mfg Herbert

AW: On Key oder Accelerator
28.03.2008 22:57:00
Dirk
Das tut mir leid, dass dir der Glaube fehlt.
Wenn du dich bekehren lassen willst, dann kann ich dir die Datei gerne hochladen und du kannst dich davon überzeugen! https://www.herber.de/bbs/user/51124.xls
Probieren geht über studieren und ausserdem wer sagt denn, dass ich bei der Funktion _KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As _
Integer) unbedingt das Ereignis KeyDown abfragen muss?
Ich bin nicht hier um Quatsch zu erzählen oder irgendjemanden der diesen Beitrag liest zu verunsichern ich habe es getestet und es funktioniert. Wenn du mir nicht glaubst, dann probiere es aus!
Viele Grüße Dirk

Anzeige
AW: On Key oder Accelerator
28.03.2008 23:09:23
Herbert
Hi,
na ja, wenn keine weiteren controls in der Userform sind, die den Focus haben können,
funktioniert das, sonst aber nicht. In dieser Form macht die Userform keinerlei Sinn.
mfg Herbert

Ergänzung
28.03.2008 23:12:00
Herbert
Call CommandButton1_Click ist nun das Allerletzte. Dafür würden meine
Probanten glatt Null Punkte erzielen.

AW: Ergänzung
28.03.2008 23:37:56
Dirk
Warum weil ich das Objekt nicht umbenannt habe oder weil es sich nicht schickt Funktionen aufzurufen?
Lass mich doch Teil haben an deinem schier endlosem Wissen, anstatt, dass du hier Aussagen tätigst, die nun wirklich niemandem weiterhelfen. Ich rufe lieber eine Funktion auf, als dauerhaft eine Schleife laufen zu lassen. Wenn es an Commandbutton1_Click() liegt, dann will ich dir sagen, dass das auch ein Forum für Anfänger ist, die mit existenten Objektnamen vielleicht mehr anfangen können, als mit "cb_right" oder welcher Name dir genehm ist, so dass andere Menschen, die deinem IQ nicht würdig sind es auch verstehen können.
Viele Grüße Dirk (der, der gar keiner deiner Probanten sein will)

Anzeige
AW: Ergänzung
29.03.2008 14:34:00
Herbert
Hi,
Anfänger dürfen alles, aber bei "VBA gut", dürfen solche Anfängerfehler nicht passieren.
mfg Herbert

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige