Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excel - Application.SendKeys wartet nicht!

Excel - Application.SendKeys wartet nicht!
02.01.2005 00:13:02
Niels
Ich habe folgendes Problem:
Ich habe drei Arbeitsmappen offen: Mappe1, Mappe2, Mappe3
Mappe1 und Mappe2 enthalten keine Daten.
In Mappe3 befindet sich folgenes VBA-Programm:

Sub Test()
Windows("Mappe1").Activate
Range("C3").Activate
Application.SendKeys "1" + "{RETURN}", True
Windows("Mappe2").Activate
End Sub

Das Programm soll zu Mappe1 wechseln, Zelle C3 auswählen und mit Hilfe des Befehles Application.Sendkeys das Zeichen "1" in die Zelle in dieser Mappe eintragen. Anschließend soll das Programm Zur Mappe2 wechseln.
Leider wartet Excel nicht bis die 1 in Mappe1 eingetragen ist, sondern trägt die
1 in Mappe2 ein.
Wer weiß wie ich das Problem bei Verwendund des SendKeys-Befehles lösen kann.
Ich bin kein VBA-Anfänger!!! Mir ist klar das ich die 1 in die Zelle C3 auch einfacher z.B. mit Range("C3") = "1" eintragen kann. Dies ist jedoch ein sehr vereinfachtes Programm, um ein Problem zu zeigen, daß ich in gleicher Form in einem komplexeren Programm habe.
Hoffentlich kann mir jemand helfen. Ich habe schon Stunden nach einer Lösung gesucht und keine gefunden!!!
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel - Application.SendKeys wartet nicht!
Beate
Hallo Niels,
es gab da mal eine interessante Lösung - der Zusammenhang war anders - aber es könnte dir dienlich sein, musst du mal testen:
SendKeys "{F2}", True
SendKeys "{ENTER}", True
Stammt aus dem Thread:
http://www.excel-center.de/foren/read.php?2,845,845#msg-845
Und dort der Beitrag von Christian vom 2.11.2004 15:18h und er hat es auch erläutert.
Gruß,
Beate
Anzeige
AW: Excel - Application.SendKeys wartet nicht!
02.01.2005 00:42:01
Franz
Hallo Niels,
(gern gesehen hier werden Anrede und Gruß :-)))
hab jetzt nicht alles durchgelesen. Aber setz doch mal sowas wie
Application.Wait Time + TimeSerial(0, 0, 5)
vor die Sendkeys-Anweisung. Die "5" steht hier als Beispiel für 5 Sekunden, bei Bedarf anpassen.
Grüße
Franz
Anzeige
AW: Excel - Application.SendKeys wartet nicht!
02.01.2005 01:13:45
Niels
Hallo Franz W.!
Den Befehl Application.Wait... nach der Application.SendKeys Anweisung hatte ich schon probiert. Ohne Erfolg. Das Ergebnis ist das gleiche.
Bitte um weitere Ideen!
Danke
AW: Noch OFFEN !!! Lösungsvorschläge laufen nicht!
02.01.2005 01:24:05
Niels
Bisher leider noch keine funtionsfähige Lösung!
DAVOR!! NICHT DANACH!!!!!!!!!!!!
02.01.2005 08:36:08
Franz
Hallo Niels,
die Wait-Anweisung muss VVVOOORRR die Sendkeys-Anweisung!!! Das Problem ist ja, dass die Sendkeys-Anweisung kommt, wenn das entsprechende Programm noch nicht voll da ist. Darum werden die Tasten-Anweisung falsch ausgeführt.
Also eine kleine Pause einfügen bis alles soweit ist, dann deine Tastenanschläge losschicken!!!
Grüße
Franz
Anzeige
OFFEN !!! Neu eingestellt heute um 18:08:55
02.01.2005 18:23:35
Niels
Das Problem wurde in weiter vereinfachter Form heute um 18:08:55 neu eingestellt.
Hallo Franz W.!
Deine Lösung macht keinen Sinn. Das Problem ist ja nicht, das die Mappe1 zum Zeitpunkt wo der Sendkeys Befehl kommt nicht aktiv ist - das ist sie in jedem Fall - sondern das der Tastaturpuffer zu spät oder erst nach Programmablauf ausgelesen wird. Wie auch immer, um sicher zu gehen haben ich die Wait-Anweisung sowohl hinter als auch vor der Sendkeys-Anweisung ausprobiert. Das Problem bleibt jedoch bestehen.
Danke für Deinen Vorschlag.
Hallo Luschi!
Danke für Deine Überlegungen.
Leider führen Sie nicht zum Erfolg.
Viele Grüsse
Niels
Anzeige
Gelöst !!! Siehe neu eingestellt heute um 18:08:55
02.01.2005 18:41:54
Niels
Matthias G hat das Problem gelöst.
AW: Excel - Application.SendKeys wartet nicht!
PeterW
Hallo Niels,
vielleicht reicht die richtige Referenzierung:
Workbooks("Mappe1").Sheets("Tabelle_welche_auch_immer").Range("C3")= WasAuchImmer
Gruß
Peter
AW: Excel - Application.SendKeys wartet nicht!
Reinhard
Hi Niels,
probiers mal so:
In Mappe1, Tabelle1:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$3" Then Windows("Mappe2").Activate
End Sub

In Mappe3, Modul1:
Sub Test()
Windows("Mappe1").Activate
Range("C3").Activate
Application.SendKeys "1" + "{RETURN}", Wait
End Sub
Gruß
Reinhard
Anzeige
AW: Excel - Application.SendKeys wartet nicht!
Luschi
Hallo Nils,
der Sendkeys-Befehl schreibt in den Tastaturpuffer und hat dann seine Arbeit getan. den Resat muß dann Excel machen, nämlich diesen Puffer auslesen.
Deshalb ist die Reihenfolge bein Sendkeys-Beehl folgende:
1. Sendkeys-Befels
2. Zelle mit Select-Befehl auswählen. (jetzt wird der Tastaturpuffer ausgelesen)
also:
Application.SendKeys "1" + "{RETURN}", True
Range("C3").Activate
Gruß von Luschi
aus klein-Paris
Anzeige
völlig OT
Reinhard
Hi Luschi,
du kommst aus Heddernheim?
Gruß
Reinhard
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel: Lösung für Application.SendKeys wartet nicht


Schritt-für-Schritt-Anleitung

Um das Problem mit Application.SendKeys in Excel VBA zu lösen, kannst du die folgenden Schritte befolgen:

  1. Öffne das VBA-Editor-Fenster in Excel (Alt + F11).
  2. Füge ein neues Modul hinzu (Einfügen > Modul).
  3. Kopiere den folgenden Code in das Modul:
Sub Test()
    ' Wartezeit vor der Eingabe
    Application.Wait Now + TimeValue("00:00:02") ' 2 Sekunden warten
    Windows("Mappe1").Activate
    Range("C3").Activate
    Application.SendKeys "1" + "{ENTER}", True
    Windows("Mappe2").Activate
End Sub
  1. Passe die Wartezeit an, falls nötig. Du kannst die Zeit in TimeValue ändern, um länger oder kürzer zu warten.
  2. Führe das Makro aus, um zu testen, ob die Eingabe jetzt korrekt in Mappe1 erfolgt.

Häufige Fehler und Lösungen

  • Fehler: SendKeys gibt falsche Eingaben zurück

    • Lösung: Stelle sicher, dass du eine Wartezeit (wie oben beschrieben) vor SendKeys einfügst. Der Befehl Application.Wait sollte vor dem SendKeys-Befehl stehen.
  • Fehler: Application.SendKeys wartet nicht

    • Lösung: Verwende True als zweiten Parameter von SendKeys, um sicherzustellen, dass Excel wartet, bis die Tastenanschläge verarbeitet wurden.

Alternative Methoden

Wenn Application.SendKeys nicht die gewünschten Ergebnisse liefert, kannst du folgende Alternativen verwenden:

  • Direkte Zuweisung: Anstatt SendKeys zu verwenden, kannst du direkt Werte zuweisen:
Workbooks("Mappe1").Sheets("Tabelle1").Range("C3").Value = "1"
  • Verwendung von Worksheet_Change: Du kannst die Worksheet_Change-Ereignisprozedur nutzen, um Aktionen auszulösen, wenn Änderungen in bestimmten Zellen vorgenommen werden.
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$3" Then
        Windows("Mappe2").Activate
    End If
End Sub

Praktische Beispiele

Hier ist ein Beispiel, das den SendKeys-Befehl in Kombination mit einer Wartezeit verwendet:

Sub BeispielSendKeys()
    Application.Wait Now + TimeValue("00:00:01") ' 1 Sekunde warten
    Application.SendKeys "Hallo" + "{ENTER}", True
End Sub

Dieses Beispiel erwartet, dass das Eingabefeld bereit ist, um die Zeichen anzunehmen, bevor es die Tastenanschläge sendet.


Tipps für Profis

  • Vermeide SendKeys, wenn möglich: Es ist oft besser, direkt auf Zellen zuzugreifen, anstatt SendKeys zu verwenden, da dies zu weniger Fehlern führt.
  • Wartezeiten optimieren: Teste verschiedene Wartezeiten, um herauszufinden, welche für deine spezifische Anwendung am besten funktioniert.
  • Debugging: Nutze das Debugging-Tool von VBA, um sicherzustellen, dass dein Code wie erwartet funktioniert.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen SendKeys und direkter Zuweisung in VBA?
SendKeys simuliert Tastatureingaben, während die direkte Zuweisung Werte direkt in eine Zelle schreibt, was in der Regel zuverlässiger ist.

2. Warum funktioniert Application.SendKeys manchmal nicht?
Das kann daran liegen, dass der Tastaturpuffer nicht rechtzeitig ausgelesen wird. Eine Wartezeit vor dem SendKeys-Befehl kann helfen, dieses Problem zu lösen.

3. Gibt es eine bessere Alternative als SendKeys?
Ja, die direkte Zuweisung von Werten zu Zellen oder die Verwendung von Ereignisprozeduren sind oft bessere Alternativen, um unerwartete Ergebnisse zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige