Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro: Wie prüfen, ob die Leertaste gedrückt wurde

Forumthread: Makro: Wie prüfen, ob die Leertaste gedrückt wurde

Makro: Wie prüfen, ob die Leertaste gedrückt wurde
wonder
Hallo,
ich möchte gerne während ein Makro läuft, prüfen, ob der User die Leerzeichen-Taste auf der Tastatur gedrückt hat.
Sobald diese Taste gedrückt wurde, soll der Inhalt der Variablen "Antwort" in die Zelle A7 geschrieben werden.
Wenn ich nun das unten genannte Coding mit "keyascii" verwende, wird komischerweise nichts in die Zelle A7 geschrieben aber in eine MsgBox (die eigentlich weiter unten im Coding auftaucht).
Ich verwende Excel 2007 und VB 6.5.
Es wäre toll, wenn jemand einen Tipp für mich hätte.
Danke und viele Grüße
Stefan
Foglende Coding klappt leider nicht:
If KeyAscii = 32 Then ' 32 ist der dezimale ASCII-Code für die Leertaste
Worksheets(3).Cells(7, 1) = antwort
End If
Anzeige
AW: Makro: Wie prüfen, ob die Leertaste gedrückt wurde
12.10.2010 12:31:02
Tino
Hallo,
da wären ein bar Infos mehr nötig.
Wann soll diese Leertaste abgefangen werden?
Wenn der Code läuft? Wie ist der Code aufgebaut?
Wenn der User in eine Zelle schreibt oder, oder ...?
Ein grobes Beispiel für einen Code der in einer Schleife läuft.
Private Declare Function GetAsyncKeyState Lib "user32" _
        (ByVal vKey As Long) As Integer
        
Private Const Key_Leer& = &H20
Function CompKey(KCode&) As Boolean
Dim Result%
    
Result = GetAsyncKeyState(KCode)
CompKey = Result = -32767

End Function

Sub test()

Do While Not CompKey(Key_Leer)

Loop

DoEvents
MsgBox "Leer gedrückt"
End Sub
Gruß Tino
Anzeige
AW: Makro: Wie prüfen, ob die Leertaste gedrückt wurde
12.10.2010 13:11:29
wonder
Hallo Tino,
vielen Dank für Deine Info.
Es handelt sich um ein ganz einfaches Progrämmchen, das wie folgt läuft:
Makro wird gestartet und schreibt eine Info in die Zelle A6.
Während das Makro immer noch läuft soll, etzt der User durch Drücken der Leertaste dafür sorgen, das eine weitere Info in die Zelle A7 geschrieben wird.
Daher dachte ich, das ich durch die einfache Abfrage von (IF KeyAscii =32) das Schreiben der Info in Zelle A7 auslösen kann. Das klappt aber leider nicht.
Ich hoffe, dass es hier einen einfachen Befehl, wie etwa KeyAscii oder KeyPress gibt, sodass eine ganz einfache IF-Abfrage reicht.
Wäre für einen Tipp von Dir sehr dankbar.
Viele Grüße, Stefan
Anzeige
AW: Makro: Wie prüfen, ob die Leertaste gedrückt wurde
12.10.2010 13:27:41
Tino
Hallo,
so einfach ist es nicht während ein Code läuft, da gibt es keine direkten Events.
Am einfachsten wäre es erst mal wenn Du an bestimmten Punkten im Code dies mit einbaust.
Beispiel:
Private Declare Function GetAsyncKeyState Lib "user32" _
        (ByVal vKey As Long) As Integer
        
 Const Key_Leer& = &H20

Function CompKey(KCode&) As Boolean
Dim Result%
    
Result = GetAsyncKeyState(KCode)
CompKey = Result = -32767

End Function

Sub Dein_Programm()
    'Code 
    '... 
    If CompKey(Key_Leer) Then Range("A7") = Antwort
    'Code 
    '... 
    If CompKey(Key_Leer) Then Range("A7") = Antwort
    'Code 
    '... 
    If CompKey(Key_Leer) Then Range("A7") = Antwort
    'Code 
    '... 
    If CompKey(Key_Leer) Then Range("A7") = Antwort
    'Code 
    '... 
End Sub
Aufwendiger könnte man was mit einem Api- Timer versuchen,
ob dies Excel verkraftet habe ich noch nicht getestet.
Wenn dies oben Dir nicht hilft, kann ich mal versuchen ein Beispiel aufzubauen,
wenn es funktionieren sollte wie ich es mir denke.
Gruß Tino
Anzeige
AW: Makro: Wie prüfen, ob die Leertaste gedrückt wurde
12.10.2010 14:30:38
wonder
Hallo Tino,
danke für Dein Coding. Ich hab's gerade ausprobiert, hat aber leider auch nicht funktioniert.
Langsam dämmert mir, dass die einfache Abfage (IF KeyAscii=32) wohl deshalb nicht funktioniert, weil er beim Erreichen dieser Codingzeile blitzschnell feststellt, dass momentan (noch) niemand die Leer-Taste gedrückt hat. Damit ist die IF-Bedingung nicht erfüllt und er springt in die nächste Zeile des Codings.
Was ich bräuchte ist ein VB-Befehl in der Art "Warte auf eine Tastatur-Eingabe".
Kennst Du hier einen Befehl?
Kann das evtl. das Event "KeyPress" leisten?
Danke und viele Grüße
Stefan
Anzeige
AW: Makro: Wie prüfen, ob die Leertaste gedrückt wurde
12.10.2010 15:18:43
Tino
Hallo,
ich weiß nicht was Dein Code alles so machen soll, auf alle fälle ist es gundsätzlich möglich.
Wie man es aber in Deinen Code geschickt einbaut kann ich ohne die Datei nicht sagen.
https://www.herber.de/bbs/user/71870.xls
Gruß Tino
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Leertaste in Excel-Makros erkennen


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob die Leertaste gedrückt wurde, während ein Makro in Excel läuft, kannst Du die Windows-API-Funktion GetAsyncKeyState verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deine Datei)" > Einfügen > Modul.
  3. Kopiere folgenden Code in das Modul:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Const Key_Leer As Long = &H20

Function CompKey(KCode As Long) As Boolean
    Dim Result As Integer
    Result = GetAsyncKeyState(KCode)
    CompKey = Result = -32767
End Function

Sub Dein_Programm()
    ' Beispielcode
    Worksheets(3).Cells(6, 1).Value = "Info in A6"

    Do While True
        If CompKey(Key_Leer) Then
            Worksheets(3).Cells(7, 1).Value = "Info in A7"
            Exit Do
        End If
        DoEvents
    Loop
End Sub
  1. Führe das Makro aus: Drücke F5, um Dein_Programm zu starten. Wenn Du die Leertaste drückst, wird der Text in Zelle A7 geschrieben.

Häufige Fehler und Lösungen

  • Fehler: Nichts wird in Zelle A7 geschrieben

    • Lösung: Stelle sicher, dass Du das DoEvents-Statement verwendest, um Excel zu ermöglichen, auf Tasteneingaben zu reagieren.
  • Fehler: Der Code wird sofort beendet

    • Lösung: Überprüfe, ob die Schleife korrekt konfiguriert ist. Stelle sicher, dass die Bedingung für die Schleife True ist, um sie kontinuierlich laufen zu lassen.

Alternative Methoden

Eine alternative Methode, um die Eingabe der Leertaste zu prüfen, ist die Verwendung von Timer-Events oder das Einfügen von Abfragen an spezifischen Stellen im Code. Hier ein Beispiel für eine einfache Timer-Implementierung:

Dim WithEvents Timer As clsTimer

Private Sub StartTimer()
    Set Timer = New clsTimer
    Timer.Interval = 100 ' Alle 100ms
    Timer.Start
End Sub

Private Sub Timer_Timer()
    If CompKey(Key_Leer) Then
        Worksheets(3).Cells(7, 1).Value = "Info in A7"
        Timer.Stop
    End If
End Sub

Praktische Beispiele

Hier ist ein einfaches Beispiel, wie Du die Leertaste nutzen kannst, um unterschiedliche Werte in verschiedene Zellen zu schreiben:

Sub Beispiel()
    Worksheets(3).Cells(6, 1).Value = "Drücke die Leertaste!"

    Do While True
        If CompKey(Key_Leer) Then
            Worksheets(3).Cells(7, 1).Value = "Leertaste gedrückt!"
            Exit Do
        End If
        DoEvents
    Loop
End Sub

Wenn Du das Makro ausführst, wird nach dem Drücken der Leertaste der Text in Zelle A7 aktualisiert.


Tipps für Profis

  • Optimierung: Reduziere die Anzahl der DoEvents-Aufrufe, um die Leistung des Makros zu verbessern, besonders bei langen Schleifen.
  • Debugging: Nutze Debug.Print, um den Status des Codes während der Ausführung zu verfolgen, falls Du Probleme hast.
  • Benutzeroberfläche: Überlege, eine Benutzeroberfläche zu implementieren, die dem Benutzer anzeigt, wenn das Makro aktiv ist.

FAQ: Häufige Fragen

1. Frage
Wie kann ich die Leertaste nur einmal abfangen?
Antwort: Du kannst eine Boolean-Variable verwenden, um zu überprüfen, ob die Leertaste bereits erkannt wurde, und den Code dann entsprechend anpassen.

2. Frage
Ist diese Methode in Excel 2010 oder höher kompatibel?
Antwort: Ja, die Verwendung von GetAsyncKeyState funktioniert in Excel-Versionen ab 2007 und höher. Achte darauf, dass Du die richtigen Sicherheitsstufen in den Makro-Einstellungen aktivierst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige