Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1504to1508
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
Inhaltsverzeichnis

Application.OnKey "{Del}"

Application.OnKey "{Del}"
19.07.2016 21:25:26
Jens
Hallo liebe Excel-Profis!
Ich kriege eine Schleife nicht hin und bitte um Hilfe (falls es überhaupt geht):
Aufgabe: Wenn der User im Bereich A1:A3 "ENTF" drückt, soll in die aktive Zelle dieses Bereichs ein "zzz" gesetzt werden.
Im Tabellenblatt steht:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A3")) Is Nothing Then
Application.OnKey "{del}", "zzz"
Else
Application.OnKey "{del}"
End If
End Sub

Im Modul1 steht:
Sub zzz()
ActiveCell.Value = "zzz"
End Sub
Mein Problem besteht jetzt darin, dass beim Drücken von ENTF im Bereich A1:A3 ein "zzz" in die Zellen geschrieben wird, aber AUCH in anderen Bereichen (außerhalb), wenn anschließend dort ENTF gedrückt wird. Klickt man danach wieder im Bereich A1:A3 auf ENTF passiert nichts.
Wie muss eine Schleife aussehen, geht das überhaupt oder kann man es anders lösen?
Danke schon mal.
Jens

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.OnKey "{Del}"
19.07.2016 23:37:17
Mullit
Hallo,
das würde man eher über Api machen:
Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
   ByVal vKey As Long) As Integer
                 
Private Const VK_DELETE As Long = &H2E

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Cells(1, 1).Resize(3, 1)) Is Nothing Then
  If (GetAsyncKeyState(VK_DELETE) And &H8000) = &H8000 Then
    Application.EnableEvents = False
    Target.Value = "zzz"
    Application.EnableEvents = True
  End If
 End If
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
AW: Application.OnKey "{Del}"
19.07.2016 23:49:33
Mullit
Hallo,
...und den KeyEvent gibt's schließlich nur einmal, also reicht:
Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32.dll" ( _
   ByVal vKey As Long) As Integer
                 
Private Const VK_DELETE As Long = &H2E

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Cells(1, 1).Resize(3, 1)) Is Nothing Then _
  If (GetAsyncKeyState(VK_DELETE) And &H8000) = &H8000 Then _
    Target.Value = "zzz"
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 12

Gruß, Mullit
Anzeige
Das war eine ganz dumme Idee, ...
20.07.2016 01:36:47
Luc:-?
…Jens,
mit der man sich nur die Datei versaut! :-/
1. solltest du mal nachlesen, was eine Schleife (auch zyklische Verarbeitung oder Zyklus genannt) ist; das hier jedenfalls nicht! Das ist eine EntscheidungsStruktur mit 2 Wegen, in PAPs auch P{x=y?} geschrieben (Wege: P und  ̅P).
2. solltest du ebenfalls (in der VBE-Hilfe) nachlesen, was Application.OnKey eigentlich bedeutet. Zitat zum 2.Parameter (Procedure):
Eine Zeichenfolge, die den Namen der auszuführenden Prozedur festlegt. Falls Procedure eine leere Zeichenfolge ("") ist, hat das Drücken von Key keine Wirkung. Diese Form von OnKey ändert die normale Bedeutung von Tastenanschlägen in Microsoft Excel. Ist Procedure nicht angegeben, erhält Key die ursprüngliche Bedeutung in Microsoft Excel zurück und alle bisher mit der OnKey-Methode vorgenommenen Tastenzuweisungen werden gelöscht.
Das erklärt das Verhalten deines Konstrukts zur Genüge!
Vorschlag:
Überschreibe Target direkt, wenn es leer ist (zB durch Löschung) oder einen bestimmten Wert hat (meinethalben das Ergebnis einer SymbolTasten-Betätigung). Dabei solltest du aber zeitweilig die EreignisReaktion ausschalten! Bspp gibt's genug im Archiv…
Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Application.OnKey "{Del}"
20.07.2016 06:56:21
Jens
Danke, danke, Euch beiden! Eure Beiträge muss ich jetzt erst mal "verstehen" lernen...
@ Mullit: ich gucke es mir heute Nachmittag sofort an!
@ Luc:-?: Ich kenn mich einigermaßen mit Formeln und so aus, aber nicht mit so was. Ich weiß auch, dass ich "Schleife" hätte in "" schreiben sollen, denn damit meinte ich das "Ein- und Ausschalten" der OnKey-Anweisung. Natürlich habe ich das Forum und andere Seiten stundenlang durchsucht (mein Code ist auch von hier) und dann ausprobiert, sonst hätte ich keine Frage gestellt. Wäre nett, wenn du mir für mein kleines Beispiel ein Beispiel geben könntest. Deinen Ausführungen kann ich nicht so recht folgen, da ich VBA nie "von der Pike auf" gelernt habe, sondern ein Hobby-Excler bin, der gelegentlich mal "Ausflüge" in diese Regionen nimmt. Danke schon mal und einen schönen Tag für alle hier!
Anzeige
AW: Application.OnKey "{Del}"
20.07.2016 16:24:06
Jens
@ Mullit!
Riesendank! Klappt wunderbar. Das ist das, was ich wollte.
Habe auch ein wenig auf der Seite https://vbarchiv.net/api/details.php?id=getasynckeystate gelinst ;-)
LG,
JENS

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige