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

Füllen von Formular auf Website per VBA

Forumthread: Füllen von Formular auf Website per VBA

Füllen von Formular auf Website per VBA
17.10.2016 11:46:09
Formular
Hallo liebe Experten,
ich stehe vor dem Problem ein einfaches Formular im Intranet per VBA ausfüllen zu müssen. Exemplarisch möchte ich dazu im Feld "SAP Box" als Wert "F6P430" eintragen.
Dazu wollte ich folgendes Macro verwenden:

Sub WebsiteFuellen()
Dim WshShell As Object
Dim IEDoc As Object
Dim lngHwnd As Long
Dim clipboard As MSForms.DataObject
'open request website
Set WshShell = CreateObject("WScript.Shell")
Application.DisplayAlerts = False
Set IE = New InternetExplorer    'New InternetExplorerMedium
IE.Visible = False
IE.Navigate "https://xy.com/pcsubs.do"
'wait until IE is done loading the page
Do: Loop Until IE.Busy = False
Do: Loop Until IE.Busy = False
Do: Loop Until IE.Document.readyState = "complete"
IE.Visible = True
lngHwnd = FindWindow(vbNullString, IE)
If lngHwnd  0 Then
Call ShowWindow(lngHwnd, SW_NORMAL)
Call SetForegroundWindow(lngHwnd)
End If
Set IEDoc = IE.Document
Application.Wait Now + TimeValue("00:00:02")
IE.Document.getelementbyid("IO:5da05ea44fb616004679cf5d0210c717").Value = "F6P430"
IE.Visible = True
MsgBox ("please validate your entries before submitting")
Application.DisplayAlerts = True
lngHwnd = FindWindow(vbNullString, IE)
If lngHwnd  0 Then
Call ShowWindow(lngHwnd, SW_NORMAL)
Call SetForegroundWindow(lngHwnd)
End If
Set IE = Nothing
End Sub
Der Internet Explorer öffnet korrekt die entsprechende Website aber leider kommt als Fehlermeldung "Object required" in der Zeile: IE.Document.getelementbyid("IO:5da05ea44fb616004679cf5d0210c717").Value = "F6P430"
Die ID habe ich mir im Entwicklermodus von Firefox anzeigen lassen, ich vermute aber die ID ist falsch. Da die entsprechende Website im Intranet abgelegt ist, habe ich die Datei als source heruntergeladen und etwas anonymisiert ( https://www.herber.de/bbs/user/108821.txt ). Ich hoffe sie ist noch gut genug um die Object IDs zu finden.
Was muss ich an meinem Code ändern?
Danke und Gruss
Theo
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Füllen von Formular auf Website per VBA
17.10.2016 18:27:06
Formular
Hi Theo
Im File finde ich weder etwas mit "SAP", noch deine vermutete ID. Auch wenn ich mir die Datei als HTML abspeichere und im Browser betrachte lässt sich das passende Formular nicht finden.
Generell lassen sich solche Fragen ohne Zugriff auf die Webseite nur sehr schwer lösen und der Code in der Datei lässt auf eine komplexe Struktur mit Java-Script schliessen, was die Sache nicht einfacher macht.
Es kommt hinzu dass sich Webseiten auch schnell einmal ändern können, weshalb soche "Schnittstellen" meistens nicht nachhaltig sind...
Trotzdem ein paar Tipps:
Mit Formular meinte ich den Code-Teil, welcher ein "from-tag" enthält:
<form action="slushbucket.do" method="GET" style="display:inline" name="sys_personalize">
...
</form>
Es gibt die Methoden GET und POST.
Falls POST müsstest du deinen bestehenden Code verwenden und die richtige ID finden.
Ich habe allerdings die Hoffnung, dass es sich wie im obigen Beispiel um die GET Methode handelt. Bei GET befinden sich die Eingabewerte direkt im Link und sowas lässt sich leicht mit einem Hyperlink zusammen setzen.
z.B.
https://www.google.de/search?q=ein+paar+Tipps
=HYPERLINK("https://www.google.de/search?q=" & Eingabewert)
cu
Chris
Anzeige
AW: Füllen von Formular auf Website per VBA
17.10.2016 18:29:58
Formular
from-tag = form-tag*
Anzeige
Anzeige

Infobox / Tutorial

Füllen von Formularen auf Websites mit VBA


Schritt-für-Schritt-Anleitung

Um ein Formular auf einer Website per VBA auszufüllen, folge diesen Schritten:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (deineDatei.xlsx)", wähle "Einfügen" und dann "Modul".

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Sub WebsiteFuellen()
        Dim WshShell As Object
        Dim IE As Object
        Dim IEDoc As Object
        Dim lngHwnd As Long
    
        ' Internet Explorer öffnen
        Set WshShell = CreateObject("WScript.Shell")
        Set IE = CreateObject("InternetExplorer.Application")
        IE.Visible = True
        IE.Navigate "https://xy.com/pcsubs.do"
    
        ' Warten bis die Seite geladen ist
        Do While IE.Busy Or IE.readyState <> 4: DoEvents: Loop
    
        Set IEDoc = IE.document
    
        ' Wert im Formularfeld eintragen
        IEDoc.getElementById("IO:5da05ea44fb616004679cf5d0210c717").Value = "F6P430"
        MsgBox ("Bitte überprüfe deine Eingaben bevor du absendest.")
    
        ' Internet Explorer schließen
        IE.Quit
        Set IE = Nothing
    End Sub
  4. ID überprüfen: Stelle sicher, dass die ID (IO:5da05ea44fb616004679cf5d0210c717) korrekt ist. Du kannst sie im Entwicklermodus deines Browsers überprüfen, um sicherzustellen, dass sie mit dem Element auf der Website übereinstimmt.

  5. Makro ausführen: Drücke F5, um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Fehler: "Object required": Dieser Fehler tritt auf, wenn die ID des Formularfeldes nicht korrekt ist. Überprüfe die ID im Entwicklermodus deines Browsers.
  • Seite lädt nicht: Stelle sicher, dass du eine aktive Internetverbindung hast und die URL korrekt ist.
  • Internet Explorer öffnet sich nicht: Stelle sicher, dass Internet Explorer auf deinem Computer installiert und aktiviert ist.

Alternative Methoden

Wenn das Ausfüllen von Formularen über VBA nicht funktioniert, kannst du folgende Alternativen in Betracht ziehen:

  1. Selenium für VBA: Mit Selenium kannst du Webseiten automatisiert steuern und Formulare ausfüllen. Es ist flexibler als die Verwendung von Internet Explorer.

  2. HTTP-Anfragen: Wenn du die API der Website kennst, kannst du Daten direkt über HTTP-Anfragen senden, anstatt den Browser zu steuern.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du ein Formular in Google mit VBA ausfüllen kannst:

Sub GoogleSuchen()
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.Navigate "https://www.google.com"

    Do While IE.Busy Or IE.readyState <> 4: DoEvents: Loop

    ' Google Suchfeld ausfüllen
    IE.document.getElementsByName("q")(0).Value = "Excel VBA Tutorial"
    IE.document.getElementsByName("btnK")(0).Click
End Sub

Tipps für Profis

  • Verwende die richtige Methode: Achte darauf, ob die Website die GET- oder POST-Methode verwendet. Manche Formulare erfordern spezifische Methoden.
  • Fehlerbehandlung integrieren: Füge Error-Handling in deinen Code ein, um potenzielle Probleme frühzeitig zu erkennen.
  • Regelmäßige Updates der IDs: Da Webseiten sich häufig ändern, solltest du regelmäßig die IDs der Formulare überprüfen.

FAQ: Häufige Fragen

1. Warum funktioniert mein Makro nicht?
Überprüfe die URL und die IDs der Elemente. Sie könnten sich geändert haben.

2. Kann ich auch andere Browser verwenden?
Standardmäßig unterstützt VBA nur Internet Explorer. Für andere Browser solltest du Tools wie Selenium in Betracht ziehen.

3. Wie finde ich die ID eines Elements?
Du kannst den Entwicklermodus deines Browsers verwenden, um die Struktur der Webseite zu untersuchen und die IDs der Formularelemente zu finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige