Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1352to1356
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
Inhaltsverzeichnis

VBA: Einloggen und füllen Formularfelder Internet

VBA: Einloggen und füllen Formularfelder Internet
26.03.2014 08:20:17
Bobbis
Hallo VBA-Profis,
es ist etwas nervig. ...
Ich habe ein recht nützliches Excel-Template geschaffen, was es mir und meinen Kollegen ermöglicht die täglich im SAP CATS zu erfassenden Zeiten (was wir so den ganzen Tag treiben) über den Tag hinweg komfortabel zu pflegen. Am Tagesende sollen die Daten ins System übertragen werden. Jetzt dürfen wir aber SAP (SAPGUI) nicht mehr dafür nutzen und müssen dafür eine webbasierte Lösung nutzen. Diese lässt das einfügen ganzer Zeilen und auch copy&paste aus Excel nicht zu.
Um diesen Weg zu vereinfachen, dachte ich, wäre es prima, wenn man sich aus der Excel-Liste einfach automatisch im CATS-Portal anmeldet und die Daten dann feldweise in das dortige Formular automatisch eingetragen werden. Das spart Zeit gegenüber dem feldweisen Rumgefrickele (Auswahlboxen etc.)!
Jetzt habe ich bereits Stunden mit Recherche sowie jede Menge trial and error versucht _ Codingschnipsel aus dem web zum Laufen zu bringen. Bis zum Aufruf der Login-Seite hat es ja schon mal gereicht, aber weiter komme ich einfach nicht. Habe schon Dinge probiert wie das hier ...

Sub b()
Dim IEApp As Object
Dim IEDocument As Object
datum = "15.03.2009"
If Not IsDate(datum) Then Exit Sub
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate "https://cats.arvato-systems.de/GUI4CATS/gui4catsapp.html?locale=de"
'  Do: Loop Until IEApp.Busy = False
'  Do: Loop Until IEApp.Busy = False
Set IEDocument = IEApp.Document
Do: Loop Until IEDocument.ReadyState = "complete"
MsgBox IEDocument.body.innerText

... oder das hier ...
Public Sub IE_Automation()
'Needs references to Microsoft Internet Controls and Microsoft HTML Object Library
Dim baseURL As String
Dim IE As InternetExplorer
Dim HTMLdoc As HTMLDocument
Dim profileFrame As HTMLIFrame
Dim slotsDiv As HTMLDivElement
baseURL = "https://cats.arvato-systems.de/GUI4CATS/gui4catsapp.html?locale=de"
Set IE = New InternetExplorer
With IE
.Visible = True
'Navigate to the main page
.Navigate baseURL & "de.ast.cats.gui4cats.smartGWT.gui4cats/de.ast.cats.gui4cats. _
smartGWT.gui4cats.nocache.js"
While .Busy Or .ReadyState  READYSTATE_COMPLETE: DoEvents: Wend
'Get the profileFrame iframe and navigate to it
Set profileFrame = .Document.getElementById("profileFrame")
.Navigate baseURL & profileFrame.src
While .Busy Or .ReadyState  READYSTATE_COMPLETE: DoEvents: Wend
Set HTMLdoc = .Document
End With
'Display all the text in the profileFrame iframe
MsgBox HTMLdoc.body.innerText
'Display just the text in the slots_container div
Set slotsDiv = HTMLdoc.getElementById("slots_container")
MsgBox slotsDiv.innerText
End Sub

oder das ...
Sub Uebergabe_an_DPD()
Dim IEApp As Object
Dim IEDocument As Object
Dim link As Object
Dim LoginFrame As Object
'  Dim iFrm As HTMLIFrame
Set IEApp = CreateObject("InternetExplorer.Application")
IEApp.Visible = True
IEApp.Navigate "https://cats.arvato-systems.de/GUI4CATS/gui4catsapp.html?locale=de"
Do
DoEvents
Loop Until IEApp.ReadyState = 3
'    Do Until IEApp.READYSTATE = 4: DoEvents: Loop
'    Set iFrm = IEApp.Document.frames(1).Document.getElementById("iframe")
'    Debug.Print IEApp.Document
Dim iFrm As Object
For Each iFrm In IEApp.Document.getElementsByTagName("IFRAME")
Debug.Print iFrm.src
Next
'    Do: Loop Until IEApp.Busy = False
'    Do: Loop Until IEApp.Busy = False
'    Sleep 100
'    Set IEDocument = IEApp.Document
'    Do: Loop Until IEDocument.ReadyState = "complete"
Set LoginFrame = IEApp.Document.frames(0) '.frames(4).frames(1).frames(0)
'    Debug.Print LoginFrame.Document.Title
Debug.Print LoginFrame.Document.Title
MsgBox IEApp.body.innerText
IEApp.Navigate "https://cats.arvato-systems.de/GUI4CATS/"
'Vollständigen Aufbau der Internetseite abwarten und neu geöffnete Seite aktivieren
Do: Loop Until IEApp.Busy = False
Do: Loop Until IEApp.Busy = False
MsgBox IEApp.body.innerText
Set IEDocument = IEApp.Document
Do: Loop Until IEDocument.ReadyState  4
Debug.Print IEDocument.body.innerText
'Einloggen
IEDocument.getElementById("SAP ID").Value = "xxxxxx"
IEDocument.getElementById("PASSWORD").Value = "xxxxxx"
IEDocument.getElementById("Image1").Click
...

Ich weiß, das steckt sicher voller Fehler und ist auch nicht hübsch, aber darum geht es mir auch (noch) gar nicht.
Ich komme nur bis zur Anweisung "Navigate" und dann erhalte ich Fehler auf die "Webseitewarteschritte" oder erhalte die Meldung, das die Verbindung zur webseite verloren gegangen ist.
Ich habe versucht mit diesen Debug-Anweisungen irgendwas (HTML-Quelltext vielleicht) zu erkennen oder auch in einer Messagebox angezeigt zu bekommen. Funktioniert alles nicht.
Ich habe auch gelesen dass es da Unterschiede mit

Do: Loop Until IEDocument.ReadyState = "complete"
zu

Do Until IEDocument.READYSTATE = 4: DoEvents: Loop
gibt ... hmmm. Das verstehe ich aber auch nicht.
Dann habe ich noch erkannt, dass die aufgerufene Seite wohl mit "iframe" arbeitet und so die Formularfelder gar nicht direkt angezeigt werden und wohl der HTML-Code sehr versteckt ist.
Ich komme einfach nicht mehr sinnvoll weiter und brauche jetzt Hilfe.
Wer kann mir hier zur Lösung weiterhelfen?
Danke Euch!

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einloggen und füllen Formularfelder Internet
29.03.2014 07:09:22
schauan
Hallo Bobbis,
kommt der Fehler bei Navigate eventuell nur im zweiten Beispiel? Dort hört die baseurl mit de auf und der Ansatz geht mit de weiter. Problematisch wird's, wie Du schon schreibst, wenn die codes versteckt sind - bzw. wenn da noch js läuft usw.
Ich hatte da auch mal was geschrieben. Hier war der Punkt, dass, vielleicht auch wegen der Scripte oder ... einige Eingabefelder nur mit SENDKEYS ordentlich auszufüllen gingen.
http://clever-forum.de/read.php?11,282974,284133#msg-284133
Einen anderer Ansatz hatte ich bei Google maps. Das ist von Deinem Problem noch weiter weg, aber das ist ein Beispiel für programmtechnische Unterstützung von einem Seitenbetreiber.
http://clever-forum.de/read.php?11,271924,272353#msg-272353
Allerdings hilft das alles nicht, wenn Deine Verbindung, warum auch immer, verloren geht. :-(
 Hoffe, geholfen zu haben. Grüße, André aus G in T  (xls 97-2013)

Anzeige
AW: Einloggen und füllen Formularfelder Internet
29.03.2014 14:06:28
Bobbis
Hallo André,
im Prinzip läuft ja keines der Coding und wurde auch schon von mir aufgrund des Ausprobieren mehr und mehr verbogen. Bei allen verschiedenen Varianten komme ich wie gesagt schon mal gar nicht dazu das Login zu befüllen.
Danke Dir für den Ansatz mit "SENDKEY". Kenne ich noch nicht und möglicherweise hilft mir das ja. Nur ich habe ja auch dafür neben dem korrekten VBA das Problem, dass ich noch nicht mal sicher sagen kann worauf ich den "fokus" setzen muss. Ich rate mehr die Feld-IDs anstatt diese wirklich herausgefunden zu haben indem ich mich versuche in dem .js-Script aus dem ersten Quelltextfenster durchzuhangeln. Bin eben auch nicht wirklich web-Kenner erfahren und kann nicht einschätzen ob ich dort überhaupt fündig werden würde oder ob es nicht irgendwelche anderen Quelltextsourcen zu berücksichtigten gibt.
Ich werde es mal mit den mir bekannten IDs austesten.
Ich würde das Thema gern offen lassen in der Hoffnung, das es möglicherweise noch jemanden gibt, der das Problem schon in gleicher/vergleichbarer Weise befüllt bekommen hat und so schon ein wirklich funktionierendes Coding hat.
Wenn ich noch nicht mal das Login schaffe zu überwinden ... wie wird dann erst das Befüllen der Zeiten in dem Webformular ... mal sehen ;-)
Anzeige

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige