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

Web-Formular ausfüllen/Abfrage

Forumthread: Web-Formular ausfüllen/Abfrage

Web-Formular ausfüllen/Abfrage
10.02.2020 17:41:29
Michael
Ich bitte nochmal um Hilfe um eine kleine Änderung an einem Script durchzuführen, was ich irgendwie selbst nicht hin bekomme. Zwenn und Anton hatten mir schon mal weitergeholfen.
Ich möchte eine Abfrage/Ausfüllen des Formulars auf folgender Seite durchführen:
https://misc.firstdata.eu/CurrencyCalculator/fremdwaehrungskurse/calendar
Ich nutze dazu folgendes Script von Zwenn:

Sub KreditKartenWechselKurseHolen()
Dim browser As Object
Dim url As String
Dim knotenInput As Object
Dim knotenDropdown As Object
Dim knotenKalender As Object
Dim knotenEven As Object
Dim knotenOdd As Object
Dim knotenAlleZellen As Object
Dim knotenEineZelle As Object
Dim htmlZeile As Long
Dim zeile As Long
Dim startZeile As Long
Dim spalte As Long
Dim startSpalte As Long
Dim spalteWaehrung As Long
Dim datum As String
Dim al As Object
'Datumsabfrage aus Tabelle
If ActiveSheet.Range("C1").Value >= Date Then
datum = Date - 1
Cells(1, 3).Value = datum
End If
datum = CStr(Day(Cells(1, 3).Value))
'Start der Ausgabe in der Excel Tabelle
zeile = 2
spalte = 3
startZeile = zeile
startSpalte = spalte
spalteWaehrung = 2
url = "https://misc.firstdata.eu/CurrencyCalculator/fremdwaehrungskurse/calendar"
'Alle Währungen durchgehen
For zeile = startZeile To ActiveSheet.Cells(Rows.Count, spalteWaehrung).End(xlUp).Row
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Pauschal beide Haken in Checkboxen für Kreditkarten setzen
'Das sind die input-Tags mit den Indizes 2 und 3 in der NodeCollection
Set knotenInput = browser.document.getElementsByTagName("input")
knotenInput(2).Checked = True
knotenInput(3).Checked = True
'Währung in Dropdown wählen
'Habe das auf Antons Methode über Value geswitcht
'Man kann auch ein Array als LookUp Table mit allen Währungskürzeln der Seite anlegen,
'und darüber erst prüfen, ob es die in der Excel Tabelle eingetragene Währung überhaupt  _
gibt
Set knotenDropdown = browser.document.getelementbyid("Waehrung")
knotenDropdown.Value = ActiveSheet.Cells(zeile, spalteWaehrung).Value
'Aktuellsten Tag im angezeigten Kalendermonat setzen
'Allen auswählbaren Tagen sind Links hinterlegt
'Erster Link = der 1. des Monats
'Letzter Link = aktuell verfügbarstes Datum
'Set knotenKalender = browser.document.getelementsbyclassname("m1 calbody")(0). _
getElementsByTagName("a")
'knotenKalender(knotenKalender.Length - 1).Click
'mit selbst gewähltem Datum
Set knotenKalender = browser.document.getelementbyid("cal1Container")
For Each al In knotenKalender.all
If al.innertext = datum Then
al.Click
Exit For
End If
Next
'Submit Button anklicken
'Ist das input-Tag mit dem index 4
knotenInput(4).Click
'Manuelle Pause, damit die Ergebnisseite komplett geladen wird
Application.Wait (Now + TimeSerial(0, 0, 3))
'Inhalt der Ergebnistabelle in der Tabelle ausgeben aus der das Makro gestartet wurde
'Die Werte stehen in als gerade und ungerade gekennzeichneten Zeilen
'Für dieses Makro werden die ungeraden nicht benötigt, da immer nur 1 Datum pro Währung  _
bearbeitet wird
Set knotenEven = browser.document.getelementsbyclassname("even")
'Set knotenOdd = browser.document.getElementsByClassName("odd")
'Alle Zeilen der HTML Tabelle ausgeben
For htmlZeile = 0 To knotenEven.Length - 1
Set knotenAlleZellen = knotenEven(htmlZeile).getElementsByTagName("td")
For Each knotenEineZelle In knotenAlleZellen
Cells(zeile, spalte).Value = Trim(knotenEineZelle.innertext)
spalte = spalte + 1
Next knotenEineZelle
'zeile = zeile + 1
spalte = startSpalte
Next htmlZeile
'IE schließen
browser.Quit
Next zeile
End Sub

Das funktioniert auch ganz gut. Leider werden so aber nur die Tage das aktuellen Monats gewertet.
Zwenn schrieb in dem damaligen Beitrag: „Man kann auch durch die Monate navigieren,“
Das bekomme ich aber nicht hin. Besser wäre sogar noch, wenn ich gleich ein Datum aus einer Zelle als Datum der Abfrage setzen könnte.
Danke für Eure Hilfe.
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Web-Formular ausfüllen/Abfrage
11.02.2020 20:39:48
Zwenn
Hallo Michael,
ich habe mir die Seite nochmal angesehen. Man kann auf den Tag genau immer das letzte halbe Jahr abrufen. Alles davor geht nicht mehr. Ich würde mit Datumsgrenzen arbeiten. In den nächsten Tagen komme ich allerdings nicht zu einer wie auch immer gearteten Umsetzung. Aber mehrere Kalenderdaten am Stück abzurufen kann automatisiert werden, soweit ich es einschätzen kann.
Viele Grüße,
Zwenn
Anzeige
AW: Web-Formular ausfüllen/Abfrage
12.02.2020 17:22:37
Michael
Hallo Zwenn, (endlich :-) )
Ja, man kann immer das letzte halbe Jahr abrufen. Die Datumsgrenzen stellen kein Problem dar. Das kann ich umsetzen.
Mehrere Kalenderdaten am Stück abzurufen ist auch nicht mein Ziel.
Ich bekomme es aber nicht hin, entweder
-gleich das Datum zu übermitteln
oder alternativ
-zumindest den Monat per Script zu ändern
Vielleicht kannst Du mir ja wenigstens einen kurzen Hinweis geben. Ich probiere dann etwas herum. Versuch macht klug – komme aber aktuell überhaupt nicht weiter.
Vielen Dank erst einmal
Michael
Anzeige
Web-Formular ausfüllen/Abfrage
12.02.2020 18:31:23
Anton
Hallo Michael,
so?:
Code in Zwischenablage:

Sub daten_online()
  Dim IEApp As Object, result As Object, datum As Date    
  Dim iTag As Integer, iRow As Integer, iCel As Integer    
  Dim jahr As String, monat As String, tag As String  
  datum = "9.1.2020" 'Datum anpassen
  tag = Day(datum)
  monat = Month(datum)
  jahr = Year(datum)
  If tag <= 9 Then tag = "0" & tag  
  If monat <= 9 Then monat = "0" & monat  
  Set IEApp = CreateObject("InternetExplorer.Application")  
  IEApp.Visible = True
  IEApp.Navigate "https://misc.firstdata.eu/CurrencyCalculator/fremdwaehrungskurse/calendar"
  Do: Loop Until IEApp.Busy = False    
  Do: Loop Until IEApp.Busy = False    
  Do: Loop Until IEApp.Document.ReadyState = "complete"    
  IEApp.Document.getelementsbyname("masterCardChecked")(0).Checked = True  
  IEApp.Document.getelementsbyname("visaChecked")(0).Checked = True  
  IEApp.Document.getelementbyid("Waehrung").Value = "CHF"   'Waehrung anpassen
  IEApp.Document.getelementbyid("hiddenSelectedDates").Value = jahr & monat & tag  
  IEApp.Document.getelementbyid("id1").submit
  Do: Loop Until IEApp.Busy = False    
  Do: DoEvents: Loop Until IEApp.Document.ReadyState = "complete"    
  Set result = IEApp.Document.getelementsbyclassname("resultsTable")(0)  
  If Not result Is Nothing Then    
    With ActiveSheet
      .Cells.Clear
      For iRow = 0 To result.Rows.Length - 1  
        For iCel = 0 To result.Rows(iRow).Cells.Length - 1  
          .Cells(iRow + 1, iCel + 1) = result.Rows(iRow).Cells(iCel).innertext
        Next
      Next
    End With  
  End If  
  IEApp.Quit
  Set IEApp = Nothing  
End Sub

mfg Anton
Anzeige
AW: Web-Formular ausfüllen/Abfrage
13.02.2020 19:07:13
Michael
Jo, jo, jo ... Anton - geile Sache ... so funktioniert es. Und ich war tatsächlich nur eine Code-Zeile davon entfernt. Aber die hat mich Nerven gekostet.
Vielen Dank für Deine Hilfe.
Eine seltsame Sache tritt jedoch immer mal wieder auf. Ab und an kommt ein Laufzeitfehler (424) auf browser.Document.getelementbyid("id1").submit
Der bleibt so lange, bis ich das System neustarte. Dann funktioniert es wieder. ?
Anzeige
AW: Web-Formular ausfüllen/Abfrage
13.02.2020 19:29:34
Anton
Hallo Michael,
Der bleibt so lange, bis ich das System neustarte. Dann funktioniert es wieder. ?
ohne deinen kompletten Code zu kennen (Beispielmappe?), ist es unmöglich dir weiter zu helfen.
mfg Anton
AW: Web-Formular ausfüllen/Abfrage
13.02.2020 20:08:51
Michael
Es passiert auch mit Deinem Code.
Leider nicht reproduzierbar. Zumindest habe ich noch nicht den Auslöser gefunden. Auch auf 2 unterschiedlichen Systemen aufgetreten.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

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