Hallo PClaus, OK lag ich also zumindest nicht ganz so falsch.
Grundsätzlich ist erstmal alles OK, was funktioniert und in einer Weise geschrieben ist, die du verstehst. Ob der Code dann auch
elegant ist, ist eine ganz andere Frage. Da dieser sich aber im Hintergrund befindet, wo er nicht auffällt ist das eher
nebensächlich.
Eine (!) der eleganteren Varianten hab ich bereits in Antwort1 gepostet. Warum die bei dir nicht funktioniert - Keine Ahnung. Es
geht aber auch anders. In deinem Fall kannst du auch direkt Application.Onkey verwenden. Dazu musst du den Code in mehrere
Teilmakros unterteilen und in einem allgemeinen Modul (z.B. Modul1) ablegen.
[code]Const wdh = 20
Dim akt As Integer
Sub Start()
'
' Start Makro
'
Application.OnKey "a", "TasteA"
Application.OnKey "b", "TasteB"
Application.OnKey "c", "TasteC"
Application.OnKey "d", "TasteD"
Application.OnKey "e", "TasteE"
Application.OnKey "f", "TasteF"
Application.OnKey "g", "TasteG"
Application.OnKey "h", "TasteH"
Application.OnKey "i", "TasteI"
Range("D5").Copy
Range("E5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F5").Copy
Range("G5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D18").Select
Application.CutCopyMode = False
End Sub
Sub TasteA()
Range("D18").Value = "A"
Weiter
End Sub
Sub TasteB()
Range("D18").Value = "B"
Weiter
End Sub
Sub TasteC()
Range("D18").Value = "C"
Weiter
End Sub
Sub TasteD()
Range("D18").Value = "D"
Weiter
End Sub
Sub TasteE()
Range("D18").Value = "E"
Weiter
End Sub
Sub TasteF()
Range("D18").Value = "F"
Weiter
End Sub
Sub TasteG()
Range("D18").Value = "G"
Weiter
End Sub
Sub TasteH()
Range("D18").Value = "H"
Weiter
End Sub
Sub TasteI()
Range("D18").Value = "I"
Weiter
End Sub
Sub Weiter()
Range("D18").Copy
Range("D19").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("D18").Select
Selection.ClearContents
akt = akt + 1 'zum nächsten Level hochschalten
If akt < wdh Then
Start 'wenn Anzahl nochn nicht erreich dann neuer Start
Else
'Tasten wieder für normale Nutzung freigeben
Application.OnKey "a"
Application.OnKey "b"
Application.OnKey "c"
Application.OnKey "d"
Application.OnKey "e"
Application.OnKey "f"
Application.OnKey "g"
Application.OnKey "h"
Application.OnKey "i"
End
End If
End Sub[/code]Wie gesagt: Elegant ist das nicht, sollte aber auch gehen. Hab hier bewusst nur wenig verändert. Probiers mal
aus.