Supportnet Computer Supportnet Games Supportnet Kochen Explipedia
Login: guestBesucher online: 218
Supportnet Computerforum
SUPPORT
Home
Forum
Tipps & Infos
Blitz Angebote
Members
Hilfe
Video

TOP THEMEN
SSD Test
Alles über SSDs

Android Tipps
iPad Tipps
Google Tipps
Windows 8 FAQ
Windows 7 FAQ
E-Mail FAQ
Netzwerk FAQ
Festplatten FAQ
Datenrettung FAQ
Bildbearbeitung FAQ

Top iPhone Apps
Computer Einsteiger
Die 5 besten...
Explipedia
Themen
Direktlinks

Neue Einträge
News einsenden News einschicken
Tipps einsenden Tipp einschicken

SN-LINKS

Suche
Befreundete Seiten
Top Seiten

Supportnet/Forum/Windows 10



Supportnet/Forum/Windows 10
von PClaus vom 11.05.2018, 01:02 Diese Seite den Supportnet Favoriten hinzufügen  Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden


Hi, gibt es eine Möglichkeit, im Excel ein alphanumerisches Zeichen einzugeben, ohne die Enter-Taste drücken zu müssen?

 (340 Hits)

Ich erstelle ein kleines "Programm" im Excel mit VBA, das am Monitor ein Farbfeld generiert, dem auf der Tastatur ein zugeordnetes Zeichen entspricht, das möglichst schnell eingegeben werden soll.
Die Zeit vom Erscheinen des Farbfeldes bis zur Eingabe wird dabei gemessen. Dafür kann ich aber nicht das zusätzliche Drücken der Enter-Taste brauchen.
Die Lösung des Problems hab ich bisher auf 3 Ebenen gesucht, leider ohne Erfolg.
1) In den Optionen von Excel.
2) Auf der Tastatur selbst und
3) über Makros.
Hier müsste mein bestehendes Makro an einer bestimmten Stelle der Ausführung automatisch unterbrochen werden, um das Zeichen (ohne Entertaste) manuell eingeben zu können. Unmittelbar danach sollte das Makro (ohne manuelle Aktivierung) weiterlaufen, denn da wäre ja dann das Enter drinnen.
Die kurze Dauer der Makro-Ausführung wäre für die Zeitmessung vernachlässigbar, sodass nur die tatsächliche Zeit bis zur Eingabe des Zeichens gemessen würde.
Wichtig: Keine zeitabhängige Unterbrechung, denn dann würde entweder nichts gemessen (Zeit zu kurz) oder immer nur die Dauer der Unterbrechung (Zeit ausreichend oder zu lang).
Ich habe es schon mit If-Codes versucht, aber dann ging gar nix mehr.
Bitte um Eure Hilfe!
LG PClaus


[1]  [2]  [>]  [>>] Antwort schreiben 50 Bonuspunkte

Antworten...
Antwort 1 von xlKing vom 12.05.2018, 20:36 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo PClaus,

Um Reaktionstests durchzuführen gibt es sicherlich bessere Software als Excel. Aber natürlich das trotzdem möglich. Leider hast du keinen Code gepostet. Hast du den in einem UserForm oder in einem Standardmodul?

Also war ich mal so frei, selbst ein paar simple Zeilen runterzuklackern. Bei mir muss man lediglich A bei Rot, S bei Grün oder D bei Blau drücken. Dein Code ist dann sicher etwas umfangreicher.

Für dich ist v.a. der Teil mit KeyPressed interessant. Hier wird nämlich eine Windowsfunktion verwendet, die überprüft ob eine bestimmte Taste gedrückt wurde.

Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer
Sub ReaktionMessen()

'Code zum Berechnen der Zufallsfarbe z.B.
Randomize Timer
FeldBreite = 50: Feldhoehe = 50 'Größe des Rechtecks
Messbereich = "A1:A20"


'Normale Tasteneingabe abschalten
Application.OnKey "a", ""
Application.OnKey "s", ""
Application.OnKey "d", ""

Range(Messbereich).ClearContents

For i = 1 To Range(Messbereich).Cells.Count '20 Durchläufe bis Ende
  
  'Zufallsgenerator berechnet eine der drei Farben Rot, Grün oder Blau
  Farbe = Choose(Int(Rnd * 3) + 1, RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255))
  
  'Zufallsgenerator berechnet, wann innerhalb der nächsten 10 Sekunden das Feld kommt
  Start = Timer + Rnd * 10
  Do:  Loop Until Timer >= Start
  
  'Feld wird jetzt gezeichnet
  FeldTop = Application.UsableHeight / 2 - Feldhoehe / 2
  FeldLeft = Application.UsableWidth / 2 - FeldBreite / 2
  Set shp = ActiveSheet.Shapes.AddShape(msoShapeRectangle, FeldLeft, FeldTop, FeldBreite, Feldhoehe)
  shp.Fill.ForeColor.RGB = Farbe
  DoEvents
  
  'Warten auf Tastendruck
  Start = Timer
  Do
    Select Case Farbe
    Case RGB(255, 0, 0)
      KeyPressed = GetAsyncKeyState(vbKeyA)
    Case RGB(0, 255, 0)
      KeyPressed = GetAsyncKeyState(vbKeyS)
    Case RGB(0, 0, 255)
      KeyPressed = GetAsyncKeyState(vbKeyD)
    End Select
  Loop Until KeyPressed
  
  Range(Messbereich).Cells(i) = Timer - Start
  
  'Feld wird gelöscht
  shp.Delete
  DoEvents
Next i

'Normnale Tasteneingabe wieder einschalten
Application.OnKey "a"
Application.OnKey "s"
Application.OnKey "d"

MsgBox "Herzlichen Glückwunsch. Sie haben den Test erfolgreich beendet.", vbInformation, "Farbtest"

End Sub
Ich liege im Durchschnitt übrigens zwischen 0,3 und 0,6 Sekunden. Ist das gut?

Gruß Mr. K.


Antwort noch nicht bewertet
Antwort 2 von xlKing vom 12.05.2018, 21:27 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hi nochmal. Mir fällt grad noch ein, dass mein Excel ja schon etwas älter ist. Falls du planst die Datei auch
auf anderen Rechnern (z.B. bei Freunden oder Kunden) einzusetzen, solltest du die erste Zeile "Declare
Function usw." durch dieses Konstrukt ersetzen. Das beugt eventuellen Problemen mit Office 64bit vor.

#If VBA7 Then
Declare PtrSafe Function GetAsyncKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#Else
Declare Function GetAsyncKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#End If

Gruß Mr. K.


Antwort noch nicht bewertet
Antwort 3 von PClaus vom 12.05.2018, 22:36 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo xlKing,
danke für deine Antwort, habe deinen vorschlag versucht, auch mit den neuen FunctionCodes, leider ohne Erfolg, Excel stürzt ab - keine Rückmeldung (von Excel natürlich!)
Lg PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 4 von xlKing vom 12.05.2018, 22:59 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hmm, merkwürdig. Das ist die Variante man für Office 64bit auch überall im Netz finden kann. Bei mir funktioniert ja noch die alte Version tadellos.

Welche Excel Version hast du eigentlich? Liegt dier eine 64bit Version vor? Falls ja dann probier mal für die erste Declare Zeile diese Variante:

Private Declare PtrSafe Function GetAsyncKeyStateA Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As LongPtr) As Integer


oder von mir aus auch

Private Declare PtrSafe Function GetAsyncKeyStateA Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As LongPtr) As LongLong


Ist vom Prinzip eigentlich egal aber vielleicht hilfts.

Falls nicht, führe das Makro mal im Einzelschrittmodus aus und sag mir bei welcher Zeile der Absturz kommt.


Antwort noch nicht bewertet
Antwort 5 von PClaus vom 12.05.2018, 23:29 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

ich hab Excel 2013 32-bit
sorry, keine Ahnung, wie man das Makro im Einzelschrittmodus ausführt.
VBA markiert schon die Zeile "Sub Makro1()" gelb.
Ich schick dir die ersten Zeilen des Makros:

#If VBA7 Then
Declare PtrSafe Function GetAsyncKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#Else
Declare Function GetAsyncKeyState Lib "USER32" (ByVal vKey As Long) As Integer
#End If

Sub Makro1()

' Makro1 Makro
'

''Code zum Berechnen der Zufallsfarbe z.B.
Randomize Timer
FeldBreite = 50: Feldhoehe = 50 'Größe des Rechtecks
Messbereich = "A1:A20"


'Normale Tasteneingabe abschalten
Application.OnKey "a", ""
Application.OnKey "s", ""
Application.OnKey "d", ""

Range(Messbereich).ClearContents

For i = 1 To Range(Messbereich).Cells.Count '20 Durchläufe bis Ende

'Zufallsgenerator berechnet eine der drei Farben Rot, Grün oder Blau
Farbe = Choose(Int(Rnd * 3) + 1, RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255))

'Zufallsgenerator berechnet, wann innerhalb der nächsten 10 Sekunden das Feld kommt
Start = Timer + Rnd * 10
Do: Loop Until Timer >= Start

Hätte ich deine Anmerkungen weglassen sollen?
Ich kenn mich bei VBA sichtlich nicht so aus!


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 6 von xlKing vom 13.05.2018, 00:24 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Zitat:
VBA markiert schon die Zeile "Sub Makro1()" gelb.

Genau das ist der Einzelschrittmodus. Drück einfach immer wieder auf die Taste F8 um dich Zeile für Zeile durchzuhangeln. Dann
siehst du eher, wo das Problem liegen könnte. Die Kommentare sind egal. Hast du überhaupt die Datei User32.dll auf deinem
Computer? Liegt z.B. unter C:\Windows\System32 oder im Pfad C:\Windows\SysWOW64. Die wird dafür benötigt. Ansonsten fällt mir
momentan leider nicht mehr allzuviel dazu ein. Ferndiagnosen sind halt immer schwierig. Welches Windows hast du?


Antwort noch nicht bewertet
Antwort 7 von PClaus vom 13.05.2018, 02:01 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

also: ich hab User32.dll und die liegt in C:\Windows\System32, wie du richtig vermutet hast. Ich hab Windows 10.
Ich hab das makro mit F8 schrittweise untersucht, am schluss bleiben die markierungen der Zeilen innerhalb der Schleife und eine der farben erscheint im Excel. Wenn ich dann das Makro fortfahren will, stürzt das Excel ab.
LG und gute Nacht!


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 8 von xlKing vom 13.05.2018, 02:54 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hmm, dachte ich mir schon. Dreh- und Angelpunkt ist nunmal diese Funktion. Bei mir und Allen Anderen klappts doch auch.

Letzter Versuch, dann geb ich auf: Ersetze den Teil von Select Case bis End Select durch
Select Case Farbe
    Case RGB(255, 0, 0)
      KeyPressed = CBool(GetAsyncKeyState(vbKeyA) And &H1)
    Case RGB(0, 255, 0)
      KeyPressed = CBool(GetAsyncKeyState(vbKeyS) And &H1)
    Case RGB(0, 0, 255)
      KeyPressed = CBool(GetAsyncKeyState(vbKeyD) And &H1)
End Select
Das &H1 hatte ich absichtlich weggelassen um genauere Messungen im Millisekundenbereich zu ermöglichen.
Das Weglassen hat normalerweise keine Auswirkungen. Aber vielleicht reagiert dein System ja anders.

Mach auch mal testweise nur eine der beiden Declare Zeilen:
also entweder Declare PtrSafe Function GetAsyncKeyState Lib "USER32" (ByVal vKey As LongPtr) As Integer
oder Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer

Wenn auch das fehlschlägt dann prüfe, ob im VBA Editor unter Extras -> Verweise ein Verweis auf Visual Basic for Applications gesetzt (also angehakt) ist.
Schau dann noch im Objektkatalognach, ob es die
verwendeten Konstanten vbKeyA, vbKeyS, vbKeyD überhaupt noch gibt. Ich gehe davon aus, dass beides bereits vorhanden ist.

Übrigens: Vielleicht stürzt ja Excel nicht wirklich ab, sondern erwartet einfach nur einen Tastendruck auf die Tasten A S oder D. Die
Dauerschleife auf diese Tasten wartet kann u.U. wie ein Absturz wirken. Meist lässt sie sich aber auch durch Druck auf die Esc-
Taste abbrechen.

Das waren meine allerletzten Ideen. Wenn das nicht hilft, weiß ich leider auch nicht mehr weiter. Muss eben jemand mit
Excel2013 und Windows10 ran. Für den Moment wünsch ich dir erstmal eine gute Nacht.


Antwort noch nicht bewertet
Antwort 9 von PClaus vom 13.05.2018, 23:00 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo xlKing,
danke dir vielmals für deine Mühe, egal, obs funktioniert oder nicht!
Ich probier jetzt einmal all deine vorschläge durch und sag dir dann bescheid.
LG PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 10 von PClaus vom 14.05.2018, 01:27 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Also:
Ich habe deine Vorschläge mit den Declare Zeilen versucht, -> excel stürzt ab. Nein, ich warte schon bis das Excel sagt Keine Rückmeldung und alles blass wird.
Ja, Verweis auf VBA ist gesetzt und ja, die Konstanten vbKeyA, vbKeyS, vbKeyD gibt es.
Ich hätte aber einen anderen Vorschlag:
Ich habe ja viele Schritte, die du in VBA programmiert hast (Farbauswahl, Zuordnung zu Buchstaben, Zeitrechnung etc.) schon im Excel "programmiert" und lasse das VBA nur diese Schritte aneinanderreihen mit "Aufzeichnen", viel mehr kann ich im VBA nicht. Natürlich schaue ich mir dann die Codes der Aufzeichnung an und versuche, daraus zu lernen.
Was mir dzt. fehlt, ist ein Code, der es ermöglicht, dass die VBA-Ausführung bei Erscheinen des Farbfeldes so lange unterbrochen wird, bis der Nutzer eine Taste drückt (ohne Enter!), dann das Programm sofort weiterläuft und damit selbst das Enter generiert. Auswertung, ob wahr oder falsch und zeitrechnung mach ich schon wieder im Excel.
Ich schicke dir mein VBA und bitte dich, dass du mir vielleicht so einen Code eingeben könntest?! Ich lasse im VBA die Zeile frei, wo das programm auf die Eingabe warten sollte, ist das o.k.? Vielleicht brauchen wir dann gar keine Declare Zeile?

Sub Start()
'
' Start Makro
'

'
Range("D5").Select
Selection.Copy
Range("E5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F5").Select
Application.CutCopyMode = False
Selection.Copy
Range("G5").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("D18").Select

Range("D18").Select
Selection.Copy
Range("D19").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("D18").Select
Selection.ClearContents
End Sub

Vielleicht kommen wir so besser zum Ziel.
Danke, PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 11 von xlKing vom 14.05.2018, 12:55 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo PCLaus, Hier ein paar Anmerkungen dazu.

Zitat:
Was mir derzeit fehlt, ist ein Code, der es ermöglicht, dass die VBA-Ausführung bei Erscheinen des Farbfeldes so lange unterbrochen wird, bis der Nutzer eine Taste drückt (ohne Enter!)

Genau das ist der Problemteil. Das geht leider nur über eine Dauerschleife wie Do Loop die sich solange wiederholt bis KeyPressed = True ist. Um den Tastendruck abzufragen ist die Declare-Zeile von essentieller Wichtigkeit. Du kannst alternativ auch ein Userform verwenden. Das macht aber nur Sinn, wenn du auch die Ausgabe (z.B. Messzeiten) im Formular darstellst. Dann sollten es aber nicht zu viele Messzeiten sein.

Zitat:
Nein, ich warte schon bis das Excel sagt Keine Rückmeldung und alles blass wird.

Das kann auch vorkommen wenn eine Dauerschleife wie Do Loop ausgeführt wird. Wie gesagt müsste in meinem obigen Beispiel dann je nach Farbe einfach nur die Taste A S oder D gedrückt werden. Aber das hast du sicher bereits ausprobiert.

Zitat:
Ich habe ja viele Schritte, die du in VBA programmiert hast (Farbauswahl, Zuordnung zu Buchstaben, Zeitrechnung etc.) schon im Excel "programmiert"

Und wo genau? Bis jetzt sehe ich in deinem Code nur, dass du bestimmte Werte in die jeweils nächste Spalte bzw. Zeile kopierst. Wo entsteht hier das Farbfeld?

Vielleicht hab ich dein Projekt ja auch falsch verstanden. Beschreib doch nochmal genau was, wann, wo und wie passieren soll. Was möchtest du mit dem Tastendruck erreichen? Soll eine bestimmte Taste gedrückt werden oder nur irgendeine beliebige?

Gruß Mr. K.


Antwort noch nicht bewertet
Antwort 12 von PClaus vom 14.05.2018, 19:47 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo xlKing!
Danke für deine Antwort und Infos! Habe daraus wieder viel gelernt.
Du hast recht, ich habe dir meine Berechnungen im Excel nicht gezeigt.
Also:
In Zelle B5 wird eine Zufallszahl generiert (=ZUFALLSBEREICH(1;9)).
In D5 wird der Zufallszahl ein Buchstabe zugeordnet mit =SVERWEIS auf eine Tabelle, in der Zahlen Buchstaben zugeordnet sind.
Dieser Buchstabe wird nach E5 kopiert und damit fixiert. (Makro)
In F5 wird die aktuelle Uhrzeit angegeben mit =JETZT().
Diese Uhrzeit wird nach G5 kopiert, um die Startzeit zu fixieren. (Makro)
Gleichzeitig wird über "Bedingte Formatierung" von A10:A12 ein Farbfeld gemalt, das dem generierten Buchstaben entspricht.
In G8 wird mit =JETZT() die aktuelle Uhrzeit angegeben, die der letzten Eingabe entspricht (könnte man verbessern durch ein weiteres Kopieren direkt nach der Eingabe des Buchstaben, fällt mir gerade auf).
Nun wird die Zelle D18 aktiviert. (Makro) Das ist die Zelle, in die die manuelle Eingabe des Buchstaben erfolgen soll.
Daher sollte hier die Ausführung des Makros unterbrochen werden bis unmittelbar nach der Eingabe.
Dann wird die Zelle D18 wieder aktiviert (entspricht dzt. dem Enter). (Makro)
Nun wird D18 nach D19 kopiert, um die Eingabe für die Auswertung (Wahr oder Falsch etc.) zu fixieren. (Makro)
Gleichzeitig wird im Excel auch die Dauer vom Erscheinen des Farbfeldes bis zur manuellen Eingabe des entsprechenden Buchstaben gemessen durch =G8-G5.
Als letzter Schritt wird wieder die Zelle D18 aktiviert und Inhalt entfernt (Makro) und wäre so wieder bereit für die nächste Eingabe.

Noch nicht berücksichtigt dabei ist eine Wiederholung des prozesses, dafür würde ich zur Not das Makro kopieren und dranhängen, auch 40mal.
Eventuell gewünschte Pausen zwischen Schritten würde ich dann mit "Application.OnTime Now + TimeValue("0:00:5")" für 5 s versuchen, wäre das ok?

Ich hoffe, ich konnte es verständlich erklären.
LG PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 13 von xlKing vom 15.05.2018, 00:15 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

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.

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
Wie gesagt: Elegant ist das nicht, sollte aber auch gehen. Hab hier bewusst nur wenig verändert. Probiers mal
aus.


Antwort noch nicht bewertet
Antwort 14 von PClaus vom 15.05.2018, 01:32 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Danke! Sieht gut aus!
Probiers aber erst morgen, bin heute schon zu müd.
LG PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 15 von PClaus vom 15.05.2018, 20:16 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo xlKing!
Danke vielmals!
Code und Eingabe des Buchstaben funktioniert ohne Enter! Auch die Wiederholungen funktionieren!
Was aber leider noch nicht funktioniert:
Bei Eingabe des Buchstaben generiert mein Excel Befehl Zufallsbereich sofort eine neue Zahl und damit ein neues Farbfeld.
Und Excel vergleicht jetzt den eingegebenen Buchstaben mit dem neuen Farbfeld, was natürlich selten stimmt.
Auch die dauer wird nur am Ende des Ablaufes gemessen und dazwischen nur die Zeiten, die der PC zur Berechnung braucht, also 1/100stel Sekunden.
Ich arbeite seit Stunden daran, leider bisher ohne Erfolg.
Jetzt mach ich eine Pause und arbeite dann weiter.
Danke und LG PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 16 von xlKing vom 15.05.2018, 23:12 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo PClaus.

Klar tut es das. Eine Formel wie Zufallsbereich wird immer neu berechnet, sobald irgendwo eine Eintragung gemacht wird. Deshalb kopierst du ja den Buchstaben per Makro von D5 nach E5. Um ihn zu sichern. Durch das Kopieren entsteht schon ein neuer Buchstabe. Ein weiterer entsteht durch Kopieren von F5 nach G5 und ein Dritter durch die Eintragung des Tastendrucks in D18. Vergleiche also D18 mit E5 bzw. beziehe die Bedingte Formatierung auf E5 und alles ist gut.

Wenn dich die zwischendurch entstehenden Buchstaben verständlicherweise verwirren, kannst du die Berechnung auch kurzfristig abschalten. Schreibe dazu in das Startmakro nach dem letzten OnKey Befehl:

Application.Calculate
Application.Calculation = xlCalculationMa
nual

sowie in das Weiter Makro ebenfalls nach dem letzten OnKey Befehl aber vor die Zeile End den Befehl: Application.Calculation = xlCalculationAutomatic

Damit stehen in D5 und E5 die gleichen Buchstaben drin. Alternativ kannst du auch auf die Formel verzichten und die Zahl direkt im Makro generieren. Dafür brauchst du wie in Antwort 1 gezeigt die Zeile Randomize Timer zum Initialisieren des Zufallsgenerators sowie die Zeile Range("E5") = Int(Rnd * 9) + 1 um eine Zahl zwischen 1 und 9 zu generieren.

Mit der Dauer ist es ähnlich. Eine Formel wie Jetzt() gibt halt immer die Zeit zum Berechnungszeitpunkt (also nach Zelleintrag) aus.
Alternativ kannst du im Makro Weiter gleich als erste Zeile unter der Sub einen Befehl wie Range("G9") = ["=Now()"] - Range("G5") einbauen. Aber Achtung: Die Zielzelle (hier G9) muss das richtige Zahlenformat "s,000" haben um Sekunden und Millisekunden korrekt anzuzeigen.

Gruß Mr. K.


Antwort noch nicht bewertet
Antwort 17 von PClaus vom 15.05.2018, 23:20 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo xlKing!
Danke für deine neuen Vorschläge!!
Ich werde das alles durchprobieren und melde mich dann wieder.
LG PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 18 von xlKing vom 15.05.2018, 23:22 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Kleine Korrektur: der Letzte Teil war Quatsch. So wärs richtig:
Range("G9") = ["=Now()-G5"]


Antwort noch nicht bewertet
Antwort 19 von PClaus vom 15.05.2018, 23:46 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Danke, alles klar.
Aber ich kämpfe immer noch mit dem Ergebnis der Eingabe.
Du schreibst: "Vergleiche also D18 mit E5 bzw. beziehe die Bedingte Formatierung auf E5 und alles ist gut."
Beides hatte ich schon vorher, das Problem ist aber, dass die Eingabe nicht mit dem vorher generierten Buchstaben verglichen wird sondern mit dem neuen, der bei der Eingabe selbst generiert wird. Das System überholt sich sozusagen selbst, deshalb hilft auch mein Kopieren von D5 nach E5 nix, weil der Code auch das mit dem neuen Buchstaben macht.
Verstehst du, was ich meine? Ist nicht leicht zu erklären.
Ich versuchs einmal mit einem Beispiel:
Nach dem Start erscheint auf E5 ein Buchstabe mit rotem Farbfeld.
In dem Augenblick, wenn ich den richtigen Buchstaben drücke, wechselt E5 auf einen neuen Buchstaben mit gelbem Farbfeld.
Nun wird mein Buchstabe für rot mit dem von gelb verglichen, das hat noch gar nix mit der Auswertung zu tun, das System "weiß gar nichts mehr von rot".

LG PClaus


Antwort noch nicht bewertet Als gute Antwort bewerten
Antwort 20 von xlKing vom 16.05.2018, 00:01 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hattest du nicht geschrieben, du generierst den Buchstaben in D5 und kopierst ihn dann als Wert nach E5? Wie kann er sich dann
zwischendurch ändern?

Frage: Wie startest du das Makro eigentlich? Vielleicht über ein Ereignis wie z.B. Worksheet Change? Das wäre für mich im Moment
die logischste Erklärung für das von dir beschriebene Verhalten. In diesem Fall ruft sich das Ereignis durch Makro-Eingabe in die
Zelle selbst wieder auf. Das kannst du aber über Application.EnableEvents = False abschalten.


Antwort noch nicht bewertet



Beitrag  1 bis 20 von 24
[1]  [2]  [>]  [>>]


Antwort schreiben
    Bitte einen 'Nickname' wählen.
Nickname:*
    (eMail-Adresse wird nicht veröffentlicht.)
eMail:
Nachricht: Ich möchte bei Antworten benachrichtigt werden.
    Hilfe zur Beitragsformatierung gibts [hier]
                   
Antwort:*
  Die Nutzungsbedingungen habe ich gelesen und akzeptiert.

MACHEN SIE IHRE WEBSITE ATTRAKTIVER
Sie haben eine eigene Website und wollen Ihre Besucher auf den Supportnet-Service aufmerksam machen? Kopieren Sie einfach den Quellcode in Ihre Seite und jeder Besucher Ihrer Seite kann direkt auf die Supportnet-Datenbank zugreifen.

My Supportnet


SUCHE

Gruppen im Forum
Betriebsysteme
Software
Hardware
Netzwerk
Programmierung
Sonstiges

Impressum © 1997-2018 Supportnet
Version: supportware 1.8.230E / 18.10.2010, Startzeit:Fri May 18 11:28:04 2018