Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
880to884
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
880to884
880to884
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

KeyDown-Ereignis für Worksheet / was Ähnliches?

KeyDown-Ereignis für Worksheet / was Ähnliches?
02.07.2007 12:57:02
Jens
Hallo liebes Forum,
gibt es eine Möglichkeit, in einem Blatt ein Ereignis auszulösen, sobald in einer Zelle eine Taste gedrückt wird? Ich meine nicht, sobald die Eingabe mit Enter bestätigt wurde (das würde ja Worksheet_Change auslösen), sondern wirklich schon zu dem Zeitpunkt, wo eine Taste gedrückt wurde.
Also sowas wie Worksheet_KeyDown. Was es ja leider nicht gibt.
Hat jemand von euch schon mal mit was Ähnlichem zu tun gehabt?
Gibt's hier ein Workaround?
Vielen Dank für eure Tipps sagt
der Jens

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: KeyDown-Ereignis für Worksheet / was Ähnliches?
02.07.2007 14:16:00
Hubert
Hi,
es ist immer eine gute Idee zu beschreiben, was du erreichen willst, gerade
bei VBA "bescheiden".
Eine bestimmte Taste? Wenn ja, welche?
mfg Hubert

AW: KeyDown-Ereignis für Worksheet / was Ähnliches?
02.07.2007 15:14:00
Nepumuk
Hallo Jens,
ich kann das nur simulieren, aber eine 100%-Garantie, dass es auf jeden Tastendruck reagiert und das auch nur genau einmal, kann ich nicht geben.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Open()
    If ActiveSheet Is Tabelle1 Then Call prcStartTimer
End Sub

' **********************************************************************
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Worksheet_Activate()
    Call prcStartTimer
End Sub

Private Sub Worksheet_Deactivate()
    Call prcStopTimer
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Sub Sleep Lib "kernel32.dll" ( _
    ByVal dwMilliseconds As Long)
Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
    ByVal vKey As Long) As Integer
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_CLASSNAMEMSEXCEL = "XLMAIN"

Private hWnd As Long

Public Sub prcStartTimer()
    hWnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
    SetTimer hWnd, 0, 50, AddressOf prcTimer
End Sub

Public Sub prcStopTimer()
    KillTimer hWnd, 0
End Sub

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

    On Error Resume Next
    Call prcMonitorKeyboard
End Sub

Private Sub prcMonitorKeyboard()
    Dim lngIndex As Long
    For lngIndex = 32 To 254
        If GetAsyncKeyState(lngIndex) <> 0 Then
            Beep
            Sleep 300 - lngIndex
            Exit For
        End If
    Next
End Sub

Gruß
Nepumuk

Anzeige
AW: KeyDown-Ereignis für Worksheet / was Ähnliches
02.07.2007 17:00:00
Jens
Hallo Nepumuk,
danke für den vielen Code! Dachte nicht, dass das so aufwändig wäre...
Der Code funktioniert auf meinem Rechner nicht so wirklich. prcMonitorKeyboard wird immer wieder aufgerufen; bei Tastatur-Eingaben verständlich, aber auch wenn ich keine Eingabe über die Tastatur mache sondern nichts tue, wird prcMonitorKeyboard wiederholt "von selbst" (= ohne Eingabe) aufgerufen...
Ziel ist, dass die Prozedur bei Eingabe eines Zeichens (in einer bestimmten Zelle, das krieg ich hin) sofort eine bestimmte Prozedur aufruft, und zwar genau ein Mal.
Grüße
vom Jens

Anzeige
AW: KeyDown-Ereignis für Worksheet / was Ähnliches
02.07.2007 17:08:00
Nepumuk
Hallo Jens,
das drücken einer Taste löst kein Ereignis in einer Tabelle aus. Darum muss ich die Tastatur permanent überwachen, ob eine Taste gedrückt wurde. So wie eine Ampel ohne Induktionsschleife, die wechselt stur ihre Farben, auch wenn kein Auto kommt. Wie schon geschrieben, das ganze simuliert das Key_Down - Ereignis nur.
Gruß
Nepumuk

AW: KeyDown-Ereignis für Worksheet / was Ähnliches
02.07.2007 16:57:00
Jens
Hallo Hubert,
danke für die Rückmeldung!
Es geht prinzipiell um die Eingabe von Zeichen (Kleinbuchstaben, Großbuchstaben, Ziffern, alle weiteren direkt über eine Taste eingebbaren Zeichen wie !, &, ?,...).
Es geht nicht um das Drücken von Tasten wie Funktionstasten, Shift, Ctrl,...
Grüße
vom Jens

Anzeige
AW: KeyDown-Ereignis für Worksheet / was Ähnliches
02.07.2007 17:27:00
Hubert
Hi,
wenn ich in meinem Excel 2003 ein Taste, z.B. a drücke und dabei eine Zelle markiert ist,
wird das a in die Zelle geschrieben. In diesem Moment befindet sich Excel im Eingabemodus.
In diesem Modus kann Excel keinerlei Code ausführen.
Insofern ist dein Anliegen nicht machbar.
Im Übrigen will sich mir der Sinn der Aktion ohnehin nicht erschließen.
mfg Hubert

AW: KeyDown-Ereignis für Worksheet / was Ähnliches
02.07.2007 19:16:31
Jens
OK, wenn Excel im Eingabemodus keine Ereignisse ausführen kann, dann ist meine Frage hinreichend beantwortet. Geht eben nicht.
Trotzdem vielen Dank euch beiden für die Hilfe!
Grüße
vom Jens

Anzeige
AW: KeyDown-Ereignis für Worksheet / was Ähnliches
02.07.2007 19:32:00
Nepumuk
Hallo jens,
natürlich geht das, mein Beispiel beweist es ja. Der Trick dabei ist, dass die Prüfroutine über die Routine in der DLL läuft.
Gruß
Nepumuk

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige