Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Sendkeys ladet nicht in der Zelle, sondern in VBA

Sendkeys ladet nicht in der Zelle, sondern in VBA
14.02.2020 17:57:25
guennih
Hallo,
in den Tiefen meiner Makros verwende ich folgenden Code:

Application.ScreenUpdating = True
Cells(StrtZei, M_Sp_Sta).Select
FormulaTxt = "hier kommt eine lange Formel, die 255 Zeichen überschreitet, aber als  _
Matrixfunktion rein muss. deshalb wollte ich einen Trick anwenden und die Formel ohne Matrix in  _
_
_
die Zelle schreiben, und dann  mit Sendkeys F2 sowier [Ctrl][Shift][Return]senden"
Debug.Print "Formeln_einfügen: Formellänge= " & Len(FormulaTxt)
Debug.Print FormulaTxt
Selection.Formula = FormulaTxt
Cells(StrtZei, M_Sp_Sta).Application.ActiveWindow.Activate
SendKeys "{F2}", True
SendKeys "^+{Enter}", True

Die Sendkeys -Befehle landen aber nicht in der Zelle, sondern es aktiviert sich VBA und dieses bekommt den F2 ab
was mache ich falsch?
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
14.02.2020 18:16:55
Daniel
HI
Starte Makros, die SendKeys verwenden, immer direkt aus der Exceldatei (über das Menü "Makro" oder einen Button) und nicht aus dem Editor heraus, so dass Excel für Windows die aktive Datei ist, auf welche die Tastatureingaben wirken.
Ein testen der SendKeys-Funktionen im Einzelstepmodus (?Debug.Print?) ist daher logischerweise nicht möglich.
Gruß Daniel
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
14.02.2020 18:52:41
guennih
Ich starte das Makro von der Excel-Datei aus mit Button in der Ribbon-Leiste. Problem tritt auch auf, wenn ich VBA-Fenster geschlossen habe (also nicht nur wenn es im Hintergrund offen ist).
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
14.02.2020 19:40:37
Daniel
HI
dann kann ich das Problem nicht nachvollziehen.
bei mir funktioniert dein Code.
Gruß Daniel
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
14.02.2020 19:35:07
ChrisL
Hi
Autsch... wie wärs hiermit:
https://docs.microsoft.com/en-us/office/vba/api/excel.range.formulaarray
Müsstest die englische Schreibweise verwenden. Hierfür die Formel mal manuell eintragen und gucken:
debug.print activecell.formulaarray
Zudem ohne Schleife direkt auf den ganzen Bereich anwenden.
cu
Chris
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
14.02.2020 20:57:45
Luschi
Hallo guennih,
seit Windows-Vista macht der Vba-Befehl Application.SendKeys Probleme und M$ tut viel dafür, daß diese Probleme noch größer werden. So ist es seit Excel 2013 nicht mehr möglich, Folgendes in einem Zuge auszuführen:
- Vba-Kennwort einer AM entsperren
- gesamten Vba-Code zu löschen und neuen Vba-Code zu importieren
- Vba-Kennwort wieder zu setzen
- AM speichern
Diese Schritte liefen bei mir bis E_2010 in einem AddIn zur vollsten Zufriedenheit
Heute komme ich nur noch bis zur Vba-KW-Entsperrung, danach muß man sofort die weitere Ausführung abbrechen, sonst ist der KW-Schutz sofort wieder gesetzt und alles war umsonst!!!
Aber nun zu Deinem Problem und frohe Botschaft - Dir kann geholfen werden.
- folgende Array-Formel soll erstellt werden: =SUMME((C3:C5)*(D3:D5))
- der Code dazu sieht so aus:

Sub Machmal()
Dim WshShell As Object, s As String
Set WshShell = CreateObject("WScript.Shell")
With Range("G7")
.Value = ""
.Select
End With
s = "{F2}=SUMME{(}{(}C3:C5{)}*{(}D3:D5{)}{)}^+~"
WshShell.SendKeys s, True
Set WshShell = Nothing
End Sub
Es wird also das VBScript-Objekt 'WScript.Shell' benutzt, denn da hat M$ die Application.SendKeys-Zicken noch nicht eingebaut.
Nachteil alle Klammerarten gehören zu den Sondeertasten und müssen wie bei {F2} maskiert werden, deshalb {(} und {)}.
Bei mir läuft die Sache (E_2019 Pro+), aber nur von der Excel-Oberfläche mit Alt+F8 und nicht innerhalb des Vba-Editors.
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
16.02.2020 13:07:32
Guennih
Danke für den Tipp
Hat nichts erkenntliches verändert.
Was jetzt geholfen hat, war ein doevents nach dem Sendkeys
Dort steht in der Hilfe, dass alle Tastaturpuffer abgearbeitet werden.
ich hatte zu Testzwecken danach eine Warteschleife und dann einen "stop"
offensichtlich werden die Sendkeys-Befehle nicht innerhalb des Makros abgearbeitet, auch nicht bei Verwendung der wait-Option.
Trotzdem Danke für die Hilfe, ohne die Diskussion wär ich nicht auf den entscheidenden Test gekommen
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
16.02.2020 16:03:47
Luschi
Hallo guennih,
solange Du wirklich mit Excel-Version 'vor 2013' arbeitest, ist es so noch möglich. Wenn Du mal auf ein Update 'nach Excel 2010' umsteigst, sieht die Excel-Welt bei Application.SendKeys' schon wieder anders aus.
Gruß von Luschi
aus klein-Paris
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
16.02.2020 20:01:05
Guennih
Ein Excel-Update von 2010 auf vermutlich 2016 steht kutrz vor dem Rollout,
Weiß man denn, ob das Problem mit den Max 255 Zeichen bei FormulaArray damit behoben wird?
Dann brauche ich eine Verzweigung im Makro wo ich versionabhängig einmal mit Sendkeys und einmal mit FormulaArray arbeite.
Anzeige
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
17.02.2020 06:12:01
Luschi
Hallo guennih,
in Excel 2019 pro+ steht immer noch der Passus von max 255 Zeichen bei FormulaArray.
Gruß von Luschi
aus klein-Paris
AW: Sendkeys ladet nicht in der Zelle, sondern in VBA
17.02.2020 08:47:48
guennih
Na, das ist doch Abwärtskompatibilität vom Feinsten!
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

SendKeys in Excel VBA: Probleme und Lösungen


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und erstelle ein neues Makro, um den VBA-Code einzugeben.

  2. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub BeispielSendKeys()
        Application.ScreenUpdating = True
        Cells(1, 1).Select
        Selection.Formula = "Deine Formel hier"
        SendKeys "{F2}", True
        SendKeys "^+{Enter}", True
    End Sub
  3. Makro ausführen: Stelle sicher, dass du das Makro direkt aus Excel heraus startest, nicht aus dem VBA-Editor. Das ist wichtig, damit die SendKeys-Befehle korrekt in die Zelle eingegeben werden.


Häufige Fehler und Lösungen

  • Problem: SendKeys funktioniert nicht.

    • Lösung: Stelle sicher, dass du das Makro aus der Excel-Oberfläche startest. Wenn du das Makro aus dem VBA-Editor ausführst, erhält der Editor die Eingaben und nicht die Excel-Datei.
  • Problem: Eingaben landen im VBA-Editor anstatt in der Zelle.

    • Lösung: Verwende DoEvents nach dem SendKeys-Befehl, um sicherzustellen, dass alle Tastaturpuffer abgearbeitet werden. Beispiel:
    SendKeys "{F2}", True
    DoEvents
    SendKeys "^+{Enter}", True

Alternative Methoden

Wenn Application.SendKeys nicht zuverlässig funktioniert, kannst du alternative Methoden in Betracht ziehen:

  • WScript.Shell verwenden: Mit WScript.Shell kannst du Tasteneingaben steuern, ohne auf die Probleme von Application.SendKeys zu stoßen.

    Sub BeispielWshShell()
        Dim WshShell As Object
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.SendKeys "{F2}"
        WshShell.SendKeys "Deine Formel"
        WshShell.SendKeys "{ENTER}"
        Set WshShell = Nothing
    End Sub
  • FormelArray nutzen: Wenn du komplexe Formeln einfügen möchtest, die die 255 Zeichen überschreiten, erwäge die Verwendung von FormulaArray.


Praktische Beispiele

  • Einfügen einer Array-Formel:

    Sub EinfügenArrayFormel()
        Range("G7").FormulaArray = "=SUMME((C3:C5)*(D3:D5))"
    End Sub
  • Nutzung von SendKeys für komplexe Eingaben:

    Sub KomplexeEingabe()
        Dim WshShell As Object
        Set WshShell = CreateObject("WScript.Shell")
        WshShell.SendKeys "{F2}"
        WshShell.SendKeys "{(}"
        WshShell.SendKeys "C3:C5"
        WshShell.SendKeys "}"
        WshShell.SendKeys "*"
        WshShell.SendKeys "{(}"
        WshShell.SendKeys "D3:D5"
        WshShell.SendKeys "}"
        WshShell.SendKeys "{)}"
        WshShell.SendKeys "{ENTER}"
        Set WshShell = Nothing
    End Sub

Tipps für Profis

  • Vermeide SendKeys in kritischen Anwendungen: Wenn du mit wichtigen Daten arbeitest, nutze lieber gezielte Methoden wie Formula oder FormulaArray, um Eingabefehler zu vermeiden.
  • Teste in der richtigen Umgebung: Stelle sicher, dass du deine Makros immer in der Umgebung testest, in der sie letztendlich eingesetzt werden.
  • Nutze Kommentare: Kommentiere deinen Code ausgiebig, besonders wenn du SendKeys verwendest. So kannst du später leichter nachvollziehen, was du gemacht hast.

FAQ: Häufige Fragen

1. Funktioniert Application.SendKeys in Excel 2019?
Ja, jedoch gibt es bekannte Probleme, die seit Excel 2013 aufgetreten sind. Es wird empfohlen, alternative Methoden wie WScript.Shell zu verwenden.

2. Kann ich SendKeys für komplexe Formeln verwenden?
Ja, aber sei vorsichtig, da es zu unerwartetem Verhalten kommen kann. Überlege, ob du stattdessen FormulaArray nutzen kannst, um die Formel direkt einzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige