Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1404to1408
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Werte in externes Programm übertragen
28.01.2015 22:31:14
Barbara
Hallo
ich würde gerne bestimmte Werte aus einer Excel-Tabelle in ein anderes Programm eintragen.
Ist vielleicht etwas ungewöhnlich, aber vielleicht geht es.
Händisch mache ich das so:
In Zelle A1 gehen,
Strg+C,
Alt+Tab (um in das andere Programm zu wechseln)
Strg+V (damit wird die Zwischenablage dort abgeladen)
Enter (bin noch immer im andere Programm)
0,5 Sekunden warten
Alt+Tab (um wieder zu Excel zurückzukehren)
Pfeil hinunter (Wechsel zu A2)
Und das ganze von vorne, 20 Mal soll das so gehen.
Manchmal macht das Probleme, ich glaube, wenn die Formatierung oder irgend etwas unpassendes mitkopiert wird. Oder vielleicht, wenn der Eintrag das Ergebnis einer Formel ist. Jedenfalls brauche ich dann einfach das Ergebnis. Dann muss ich den Wert händisch eintragen.
Hoffe, ihr könnt mir helfen.
LG,
Barbara

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wie lautet jetzt konkret die Frage?
28.01.2015 23:48:18
Frank
Hallo Barbara,
ich habe Deinen Beitrag so verstanden, dass Du wissen möchtest, wie man evtl. vorhandene Formeln alle in einen Wert umwandelt. Das geht am schnellsten, indem man alle Zellen markiert (mit Maus oder per Shift+Strg+Ende), den Markierungsrahmen am Rand mit der rechten Maustaste anfasst, um ein Stückchen verschiebt und ohne loszulassen wieder an den Ursprungsort schiebt. Nach dem Loslassen der Maustaste geht ein Kontextmenü auf, wo der dritte Eintrag "Hierhin nur als Werte kopieren" sein sollte. Das auswählen, fertig.
Besser wäre es natürlich, eine Tabelle hochzuladen, und uns mitzuteilen, bei welchen Zellen es Schwierigkeiten gibt.
Falls Deine Frage aber eigentlich darum geht, ob das auch per VBA realisierbar wäre - ja geht. Sendkeys wäre hier das Mittel der Wahl (löst aber nicht das Problem mit der Formatierung/Formel).
Grüsse,
Frank

Anzeige
AW: Wie lautet jetzt konkret die Frage?
29.01.2015 06:08:06
Barbara
Hi Frank,
ja Sendkeys klingt gut. Wie würde eine Routine konkret aussehen, die auf die beschriebene Art A1 bis A20 überträgt? Das ist mein Hauptproblem. Leider sind meine eigenen Versuche in diese Richtung misslungen.
Alles andere ist vorerst mal ein Nebenproblem.
LG,
Barbara

Tja, SendKeys geht nicht mehr...
29.01.2015 14:44:27
Frank
Hallo Barbara,
nach kurzem Ausprobieren (ich habe das schon seit Jahren nicht mehr gebraucht), muss ich feststellen, dass SendKeys zwar in der Online-Hilfe zu XL-VBA erwähnt wird, aber der Beispielode nicht funktioniert.
Dabei liefert sowohl die Funktion AppActivate, die man hierfür braucht, einen Laufzeitfehler (5: "Ungültiger Prozeduraufruf oder ungültiges Argument"), als auch eben Sendkeys mit Laufzeitfehler 70: "Zugiff verweigert".
Vielleicht ist das bei Dir ja nicht so, dann sollte der Code etwa so funktionieren:
Sub test1()
PID = Val(InputBox("PID eingeben:", "Eingabe notwendig", 9999))
If PID = 0 Or PID = 9999 Then Exit Sub
XL = ThisWorkbook.Name
WRD = PID
For I = 1 To 20
AppActivate XL
Cells(I, 1).Select
SendKeys "(^C)", True
AppActivate PID
SendKeys "(^V)", True
Next
End Sub

Die PID, nach der hier in der Inputbox gefragt wird ist die Prozessidentifikationsnummer. Die erfährt man aus dem Taskmanager unter dem Tab 'Details'. Manchmal funktioniert statt dessen auch der in Gänsefüsschen eingeschlossene Name der EXE, die dort aufgeführt ist - siehe auch Beispielcode zu SendKeys in der Onlinehilfe.
Grüsse,
Frank

Anzeige
Geht doch noch, nur anders
29.01.2015 15:06:49
Frank
Hallo nochmal,
Sub test1()
Set wshshell = CreateObject("WScript.Shell")
PID = Val(InputBox("PID eingeben:", "Eingabe notwendig", 9999))
If PID = 0 Or PID > 9998 Then Exit Sub
XL = ThisWorkbook.Name
WRD = PID
For I = 1 To 20
AppActivate XL
W = CStr(Cells(I, 1).Value)
AppActivate PID
wshshell.SendKeys W, True
wshshell.SendKeys "{ENTER}"
Next
End Sub

So sollte das jetzt funktionieren.
Grüsse,
Frank

AW: Geht doch noch, nur anders
30.01.2015 16:53:25
Barbara
Danke für Deine Antwort,
hat jetzt ein bisschen länger gedauert, aber ich musste das erst mal testen.
Buchsteben und Zahlen gehen, aber wenn ich ENTER oder TAB machen will.
wshshell.SendKeys "{ENTER}" oder
wshshell.SendKeys "{TAB}"
haben keine Auswirkung.
Ich probiere das an einem Excel-Blatt aus, in das ich hinein kopieren will, Dieses Excel-Blatt hole ich mir vom Internet von unserem Firmenserver. Es ist aber kein zusätzliches excel imm Task-manager zusehen, sondern eine Datei wfic32.exe, dennoch die Tabelle ist excel. Händisches Drücken von TAB und ENTER funktioniert.
Aber:
wshshell.SendKeys "{ENTER}" oder
wshshell.SendKeys "{TAB}"
haben keinen Effekt.
Woran kann das liegen?

Anzeige
Von XL nach XL?
02.02.2015 00:16:01
Frank
Hallo,
das habe ich jetzt nicht verstanden. Du kopierst von einer XL-Mappe in eine andere? da braucht's das alles nicht.
Ach ja, bei SendKeys das ,True nicht vergessen. Das könnte wichtig sein.
Ohnehin ist dieser Umweg über den WindowsScriptingHost (WSH) nicht so sinnvoll. Eigentlich sollte SendKeys Bestandteil von VBA sein (-wie ja auch der Eintrag in der Online-Hilfe zeigt). Ist es das nicht mehr, weiss man auch nicht, wie kompatibel die Reste des Befehls im WSH sind.
Die Zeile WRD = PID in meinem Beispielcode ist übrigens von meinen eigenen Versuchen übriggeblieben und kann weg.
Grüsse,
Frank

Anzeige
AW: Von XL nach XL?
02.02.2015 20:18:08
Barbara
Hi Frank,
ja, das heisst es. Allerdings mit einer Einschränkung: Die Quelltabelle, also die, von der ich kopiere, habe ich mit meinem Excel-Programm geöffnet.
Auf die Zieltabelle komme ich so:
Eine bestimmte Seite auf der Konzern-Homepage öffnen, einloggen, auf einen bestimmten Button klicken.
Nun geht nach einer Wartezeit von ewigen 30 Sekunden eine Excel-Tabelle auf, in die ich in bestimmte Zellen händisch Werte eintragen soll. Diese Zellen liegen leider nicht genau untereinander, sondern auf der Seite verstreut. Die anderen Zellen sind gesperrt.
Dieses Programm ist offensichtlich nicht mein Excel-Programm, weil es im Task-Manager als eigene exe steht, alles Internet gesteuert.
Aus einer Ergebniszelle kann ich dann das Ergebnis ablesen. In dieser Zelle steht die Formel:
"=ERGEBNIS"
Die Berechnung selbst erfolgt im Verborgenen, die Module im VBA-Editor sind leer, Formeln sind keine zu finden. Die Berechnung bleibt also ein Geheimnis des Erstellers. Macht aber nichts.
Nach Ermittlung des Ergebnisses speichere ich dort die Tabelle, damit ich sie dort wieder öffnen kann. Aber nicht auf meiner Festplatte. Das wird verhindert. Ich komme sogar in den VBA-Editor. Was ich da hinein schreibe, kann ich zwar in der Sitzung ausführen, der Code wird dort aber nicht gespeichert.
So weit, so gut. Die haben meine Eingabewerte, und ich das Ergebnis.
Nur die Eingabe, die will ich automatisieren, weil ich die 30 Eingabewerte bereits vorbereitet in meiner Excel-Tabelle habe und nicht einzeln händisch rein klopfen will.
Und darauf konzentriert sich meine frage hier.
wie gesagt: Auf mein händisches Enter und Tab reagiert das Programm, aber auf Deine Sendkey-Methode geht Enter und Tab nicht, lediglich die direkte Eingabe in eine Zelle mit dem Senden von Strg-V.
Uff.

Anzeige
Von XL nach XL
03.02.2015 11:12:51
Frank
Hallo Barbara,
wenn das so ist, sollte SendKeys gar nicht nötig sein. Versuch es statt dessen mal so:
MeinWB = "Name_meiner_XL.xlsx"
ZielWB  ="Name_der_Mappe_auf_Server.xlsx"
ZielTab  ="BlattName_in_Zieltabelle"
for i = 1 to 20
Zielzeile = i + Offset
Workbooks(ZielWB).Sheets(ZielTab).cells(ZielZeile, ZielSpalte) = Workbooks(MeinWB).Sheets(" _
Tabelle 1").cells(i, 1)
next

Zielzeile muss berechnet werden, wenn nicht beginnend ab Zeile 1 eingetragen werden soll, sondern z. B. ab Zeile 5, Spalte C. Dann wäre Zielzeile = i + 4 und Zielspalte = 3
Grüsse,
Frank

Anzeige
AW: Von XL nach XL
03.02.2015 17:35:49
Barbara
Hallo Frank,
Das ergibt einen
"Laufzeitfehler '9': Index außerhalb des gültigen Bereichs"
Ich glaube, weil das ZielWB nicht gefunden wird, da ein externes Excel gestartet wird. Die Zieldatei ist auch mit dieser Schleife

For Each wkb In Application.Workbooks
MsgBox wkb.Name
Next

nicht zu finden.
Was kann man da tun?
LG,
Barbara

AW: Von XL nach XL
03.02.2015 17:56:39
Barbara
Und noch was:
Dieser Code
Sub test()
Dim w, ws
Set ws = CreateObject("wscript.shell")
AppActivate ThisWorkbook.Name
w = Cells(2, 1).Value
AppActivate 4516
Application.Wait (Now + TimeValue("0:00:03"))
ws.SendKeys w, True
Application.Wait (Now + TimeValue("0:00:03"))
ws.SendKeys "{ENTER}"
End Sub
macht Schwierigkeiten.
Ohne Wait vor dem Eintragen wird nur das halbe Wort (oder Zahl) in die Zelle eingetragen
Mit Wait,wie im Code zu sehen, geht es. Aber das Enter danach zeigt keine Reaktion, die Zelle bleibt die aktive.
Aber so weit waren wir ja schon vorgestern.
LG,
Barbara

Anzeige
ScriptingHost
03.02.2015 18:42:26
Frank
Hallo Barbara,
ich habe den Thread nochmal offen gestellt.
Solche Beschränkungen sind, ohne in der Originalumgebung rumprobieren zu können, natürlich schwer zu umgehen.
Zur Problematik oben: Hast Du es schonmal mit {DOWN}, True versucht? Und steht eigentlich der Cursor in der Zelle oder ist die Zelle nur markiert?
Noch eine Frage, die zwar das Problem nicht behebt, aber Dir trotzdem die Arbeit erleichtern könnte: In der Zielmappe stehen die Zellen genauso untereinander, wie in Deiner eigenen? Da solltest Du eigentlich auch alles in einem Rutsch markieren und kopieren können, oder?
Grüsse,
Frank

Anzeige
AW: ScriptingHost
05.02.2015 17:17:56
Barbara
Hallo Frank,
"Ich habe den Thread nochmal offen gestellt."
Danke. Hab das gar nicht beachtet.
Jetzt wundert mich nur, ob ich dieses Thema weiter führen kann. Denn im Forum finde ich es nicht mehr, und der Bookmark, den ich mir für dieses Thema gesetzt habe, führt zu einer nicht editierbaren herber-Seite, die alle Beiträge zu diesem Thema anzeigt.
Der einzige Zugang zum Antwortformular, der mir bleibt, ist lediglich über den Link im Benachrichtigungsmail. Nicht ganz durchsichtig, das Ganze.
Nun mal zu Deinem ersten Absatz:
Ja, DOWN und andere habe ich probiert, funktioniert nicht. Auch nicht, wenn ich den VBA-Editor dieser komischen Excel-Version (die übrigens ein englisches Menü hat) öffne und dort was mit sendkeys schreiben lassen will. Selbes Ergebnis: Die Buchstaben werden gesendet und auch abgebildet, alle folgenden Befehle, wie zB ws.SendKeys "{DOWN}", True zeigen keine Wirkung.
Andererseits, wenn ich das Ganze auf ein Word-Dokument loslasse, um zu sehen, ob und wie sendkeys überhaupt arbeitet, da wird alles ohne Probleme wunschgemäß ausgeführt.
Zusammenfassend kann man sagen: Bestimmte Anwendungen führen keine Sendkey-Befehle aus, nur Buchstabeneingaben.
Zu Deinem zweiten Absatz:
"In der Zielmappe stehen die Zellen genauso untereinander, wie in Deiner eigenen?"
Nein, diese Zellen liegen leider nicht genau untereinander, sondern auf der Seite verstreut. Die anderen Zellen sind gesperrt. (siehe 02.02.2015 20:18:08)
Das bedeutet, auch wenn ich die Anordnung auf meiner Quelltabelle nachbilde, kann ich nicht das Ganze als Block "in einem Rutsch" rüber kopieren, weil damit auch versuche, in die dazwischenliegenden Zellen zu kopieren, und die sind gesperrt.
Also, ich habe auch schon daran gedacht.
Danke für Dein Interesse und Deine Hilfe.
LG,
Barbara
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige