Hallo Pauli,
ich fasse mich mal kurz und gebe Dir ein paar Hinweise, wo Du in Deinem Code aufräumen musst.
- In jedem Modul ganz oben sollte als erstes Option Explicit stehen. Dadurch wirst Du gezwungen alle Variablen zu deklarieren. Es geht auch ohne, aber dann treiben Dich kleinste Schreibfehler in einem Variablennamen bei der Fehlersuche in den Wahnsinn
- Wie gesagt, deklariere alle Variablen mit Dim und dem richtigen zugehörigen Datentyp
- Die Zeile On Error Resume Next löschst Du bitte ersatzlos. Sie sorgt dafür, dass kein Laufzeitfehler angezeigt wird. So findest Du im Zweifelsfall nicht raus, warum etwas nicht so funktioniert, wie Du es erwartest. On Error Resume Next macht z.B. Sinn, wenn der Versuch eine Objektvariable zu setzen und zu verwenden fehlschlägt. Anschließend wird die Fehlererkennung sofort wieder mit On Error GoTo 0 eingeschaltet. Z.B. versuchst Du mit Set nodeInput = doc.getElementByID("yourField") das Eingabefeld mit der ID yourField anzusprechen. Wenn es dieses Feld nicht gibt, dann wirft VBA sofort einen Laufzeitfehler. Den kannst Du abfangen, indem Du solche Zeilen in On Error Resume Next und On Error GoTo 0 kapselst. Ob das Element gefunden wurde, kannst Du anschließend mit If Not nodeInput Is Nothing Then prüfen. Es wird also gefragt, ob die Objektvariable nicht den Wert Nothing enthält. Ist das nämlich nicht der Fall, muss es ein Wert sein, der gefunden wurde und mit dem Du wie gewünscht weiterarbeiten kannst.
- Das Suchen des richtigen IE-Tabs kann man etwas anders gestalten, damit es keinen Fehler gibt, wenn nicht IE Fenster von der Shell gefunden werden. Dazu schreibe ich morgen etwas mehr
- Du änderst mit IE.document.getElementsByClassName("L")(12).innerHTML = ed den HTML-Quellcode der Seite. Das ist für Dein Vorhaben in jedem Fall falsch. Beim WebScraping wird der HTML-Code so gelassen, wie er ist.
- Insgesamt versuchst Du das Datum damit zu setzen, bevor Du das Eingabefeld aktivierst. Ich gehe davon aus, dass durch das Ändern des HTML-Codes auch die Events verschwinden. Sprich also nur das Element an, welches das Datum aufnehmen soll und führe dann einen Click darauf aus. Erst wenn das Eingabefeld erscheint, setzt Du das Datum und zwar über die Eigenschaft Value des input-Tags.
- Du sprichst das 13te Element mit der Klasse L an. Da würde ich versuchen das Zielelement vorher mehr einzugrenzen, um nicht so einen hohen Index verwenden zu müssen. Kann sein, dass der in Eurer Dokumentenverwaltung stabil ist. In der Regel wird der Zugriff auf hohe Indizes aber instabieler, je höher sie werden. Es passiert schnell, dass beim nächsten Aufruf der Seite eine Element davor wegfällt oder hinzukommt. Dann landest Du im falschen HTML Abschnitt
- In der Zeile IE.document.getElementsByClassName("L jsFscSel FscSel").Click verwendest Du gar keinen Index. Das ergibt auf jeden Fall einen Laufzeitfehler. Einen, den Du bisher wegen On Error Resume Next vielleicht noch gar nicht wahrgemnommen hast
Ich habe heute Abend keinen Nerv mehr ein Beispiel zu erstellen, sorry. Aber ich wollte Dir wenigstens ein paar Hinweise für Verbesserungen und das Herangehen da lassen.
Viele Grüße,
Zwenn
|