GetAsyncKeyState - Tastaturanschlag beeinflussbar?
25.10.2017 17:26:28
Jens
In einer großen Tabelle soll in bestimmten Zellbereichen beim Drücken der ENTF-Taste eine Null hineingeschrieben werden (formatiert als Zeitwert mit 00:00, wobei ansonsten dort nur bestimmte Zeitwerte eintragbar sind die größer 0 sind ("Datenüberprüfung"); also das Eintragen einer 0 ist nicht möglich z.B. mit STRG-ENTER).
Dies funktioniert auch mit folgendem Code im Arbeitsblatt:
Option Explicit
'Diese Funktion ermittelt, ob seit ihrem letzten Aufruf eine bestimmte Tasteneingabe erfolgt ist.
'https://vbarchiv.net/api/details.php?id=getasynckeystate
Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
ByVal vKey As Long) As Integer
Private Const VK_DELETE As Long = &H2E ' Entfernen
-------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
' Beim Drücken der ENTF-Taste im Eingabebereich soll wieder ein "00:00" erscheinen.
' Dies darf lediglich in den Zeiteingabe-Bereichen stattfinden, die zusammengefasst werden:
Dim rngZEIT1 As Range, rngZEIT2 As Range, rngZEIT3 As Range, rngZEIT4 As Range, rngZeit5 As Range, _
rngZEIT6 As Range, rngZEIT7 As Range, rngZEIT8 As Range, rngZEIT9 As Range, rngZeit10 As Range, _
rngZEIT11 As Range, rngZEIT12 As Range, rngZEIT13 As Range
Dim rngUnion As Range
Set rngZEIT1 = Range("H8:I38", "L8:M38")
Set rngZEIT2 = Range("P8:Q38", "T8:U38")
Set rngZEIT3 = Range("X8:Y38", "AB8:AC38")
Set rngZEIT4 = Range("AF8:AG38", "AJ8:AK38")
Set rngZeit5 = Range("AN8:AO38", "AR8:AS38")
Set rngZEIT6 = Range("AV8:AW38", "AZ8:BA38")
Set rngZEIT7 = Range("BD8:BE38", "BH8:BI38")
Set rngZEIT8 = Range("BL8:BM38", "BP8:BQ38")
Set rngZEIT9 = Range("BT8:BU8", "BX8:BYG38")
Set rngZeit10 = Range("CB8:CC38", "CF8:CG38")
Set rngZEIT11 = Range("CJ8:CK38", "CN8:CO38")
Set rngZEIT12 = Range("CQ8:CR38", "CT8:CU38")
Set rngZEIT13 = Range("QC8:QC38", "QT8:QU38")
Set rngUnion = Union(rngZEIT1, rngZEIT2, rngZEIT3, rngZEIT4, rngZeit5, rngZEIT6, rngZEIT7, _
rngZEIT8, rngZEIT9, rngZeit10, rngZEIT11, rngZEIT12, rngZEIT13)
If Not Intersect(Target, rngUnion) Is Nothing Then
If (GetAsyncKeyState(VK_DELETE) And &H8000) = &H8000 Then _
Target.Value = "0"
...
F R A G E :
Es nervt oft, dass man die ENTF-Taste genau 0,0xxxx Sekunden drücken muss, weil ansonsten nichts passiert, oder, wenn man zu lange drückt, die "00:00" erscheint und wieder verschwindet.
Kann man das Drücken der Tastatur durch weiteren Code bzw. Code-Verbesserung beeinflussen, so dass die Dauer des Drückens (fast) egal ist oder ist Excel mit seinem VBA hier an seinen Grenzen?
Vielen Dank schon mal!
Gruß, Jens