Microsoft Excel

Herbers Excel/VBA-Archiv

Schnellerfassung in Excel

Betrifft: Schnellerfassung in Excel von: Wolli
Geschrieben am: 21.08.2008 10:10:48

Hallo zusammen.

Versuche eine Schnellerfassung in Excel zu bauen ohne ein Formular zu bemühen.

Es geht um das Auswerten von Schulungsfeedbackbögen.
12 ja/nein - Fragen.

Also Antwort immer 1 oder 0! (einstellige Eingabe).

Der Ablauf soll so sein, daß Excel sofort in die naechste Zeile springt wenn ein Zeichen eingegeben wird.
Somit würde man sich bei jeder Eingabe das drücken der ENTER - Taste sparen. Das sind dann bei 1000 Schulungen rund 10000 Tastendrücke weniger!

Würde mich sehr über eine brauchbare Antwort freuen.

Lieben Dank im voraus,

Wolli

  

Betrifft: AW: Schnellerfassung in Excel von: Heiko S.
Geschrieben am: 21.08.2008 11:30:23

Hallo Wolli,

also wenn du nur die Tasten 1 und Null willst z.B. so:
Ist als Anregung zu verstehen, mal ein leeres Tabellenblatt öffnen Code starten und Tasten drücken.




Option Explicit

Private Declare

Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Const VK_ESC = &H1B   'Taste ESC
Private Const VK_0 = &H30     'Taste 0
Private Const VK_1 = &H31     'Taste 1
   

Sub Nur_0_1()
Application.StatusBar = "Nur Tasten 0 und 1, Beenden mit [ESC]"
Do
    If GetAsyncKeyState(VK_0) = -32767 Then
        ActiveCell = "0"
        ActiveCell.Offset(1, 0).Activate
    End If
        
    If GetAsyncKeyState(VK_1) = -32767 Then
        ActiveCell = "1"
        ActiveCell.Offset(1, 0).Activate
    End If
Loop While Not GetAsyncKeyState(VK_ESC) = -32767
Application.StatusBar = False
End Sub






Andere Idee, erstmal alles mit 0 oder 1 auffüllen und dann per Maus (Über SelectionChange) die Felder anwählen die halt geändert werden müssen.




Gruß Heiko

PS: Rückmeldung wäre nett !


  

Betrifft: AW: Schnellerfassung in Excel von: Heiko S.
Geschrieben am: 21.08.2008 13:42:33

Hallo Wolli,

kann ich selber brauchen, darum hier eine etwas weiter entwickelte Version.

Option Explicit

Private Declare

Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Const VK_ESC = &H1B   'Taste ESC
Private Const VK_0 = &H30     'Taste 0
Private Const VK_1 = &H31     'Taste 1
Private Const VK_PLI = &H25   'Taste Pfeil Links
Private Const VK_PRE = &H27   'Taste Pfeil Rechts
Private Const VK_PRA = &H26   'Taste Pfeil Rauf
Private Const VK_PRU = &H28   'Taste Pfeil Runter
   

Sub Nur_0_1()
Dim varHelp As Variant
Dim strHelp As String
Application.StatusBar = "Nur Tasten 0 und 1, Beenden mit [ESC]"
Do
    If GetAsyncKeyState(VK_0) = -32767 Then
        ActiveCell = "Nein"
        ActiveCell.Offset(1, 0).Activate
    End If
    If GetAsyncKeyState(VK_1) = -32767 Then
        ActiveCell = "Ja"
        ActiveCell.Offset(1, 0).Activate
    End If
    If GetAsyncKeyState(VK_PLI) = -32767 Then
        If ActiveCell.Column > 1 Then
            ActiveCell.Offset(0, -1).Activate
        End If
    End If
    If GetAsyncKeyState(VK_PRE) = -32767 Then
        If ActiveCell.Column < 255 Then
            ActiveCell.Offset(0, 1).Activate
        End If
    End If
    If GetAsyncKeyState(VK_PRA) = -32767 Then
        If ActiveCell.Row > 1 Then
            ActiveCell.Offset(-1, 0).Activate
        End If
    End If
    If GetAsyncKeyState(VK_PRU) = -32767 Then
        If ActiveCell.Row < 65535 Then
            ActiveCell.Offset(1, 0).Activate
        End If
    End If
    ' Und hier dann automatisch gleich in die nächste Spalte wenn 10 Zeilen voll sind
    If ActiveCell.Row = 11 Then ActiveCell.Offset(-10, 1).Activate
    varHelp = ActiveCell
    strHelp = ActiveCell.Address
Loop While Not GetAsyncKeyState(VK_ESC) = -32767
DoEvents
Range(strHelp).Activate
ActiveCell = varHelp
Application.StatusBar = False
End Sub






Gruß Heiko

PS: Rückmeldung wäre nett !