Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
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

von VBA auf Web

von VBA auf Web
06.05.2013 11:18:25
VBA
Hallo zusammen,
kann man mittels VBA einen Wert in eine geöffnete Website eingeben.
Beispiel:
FireFox ist geöffnet
Seite "CortalConsors" ist geöffnet
Die Zahl 581005 ins WKN-Feld einfügen
Enter
Herzliche Grüße
Rolf

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: von VBA auf Web
06.05.2013 12:30:53
VBA
Hallo Rolf,
ja, das ist möglich. ABER: Nicht mit Firefox, sondern mit dem Internet Explorer.
Der Internet Explorer stammt auch aus dem Hause Microsofts und kann über die Objektbibliothek sehr bequem über VBA angesteuert werden. Bevor ich mit dem VBA-Code loslege stelle ich erst einmal die Frage, ob du überhaupt an einer Lösung mit dem Internet Explorer interessiert bist?
Viele Grüße
Martin

AW: von VBA auf Web
06.05.2013 12:58:59
VBA
Hallo Martin,
erstmals danke für deine Antwort.
Ja, an einer Lösung mit dem Internet Explorer bin ich interessiert und freue mich auf deine Ausführung.
Gruß Rolf

Anzeige
AW: von VBA auf Web
07.05.2013 09:45:42
VBA
Hallo Rolf,
entschuldige bitte, dass es etwas gedauert hat. Hier nun der Code:

Sub Request_CortalConsors()
Dim appIE As Object
Set appIE = CreateObject("InternetExplorer.application")
Do While appIE.Busy
Loop
appIE.navigate "http://www.cortalconsors.de"
appIE.Visible = True
While Not appIE.readyState = 4
Wend
With appIE.document.forms(1)
.elements("pattern").Value = "581005"
.submit
End With
End Sub
Ich habe es jetzt so geschrieben, dass ein neues Fenster vom Internet Explorer geöffnet wird (...weil du ja vermutlich normal den Firefox als Browser nutzt). Aber wenn du jetzt den Internet Explorer als Standard-Browser nutzt und weiterhin möchtest, dass eine bereits geladene Cortal-Consors-Seite gesucht werden soll und mit dieser 581005-Abfrage neue geladen werden soll, dann lass es mich wissen.
Viele Grüße
Martin

Anzeige
AW: von VBA auf Web
07.05.2013 10:50:00
VBA
Hallo Rolf,
jetzt habe ich noch die Abfrage mit eingebaut, ob bereits eine Seite von Cortal Consors geladen ist:
Sub Request_CortalConsors()
Dim appIE As Object, objSW As Object
Set appIE = CreateObject("InternetExplorer.Application")
Set objSW = CreateObject("Shell.Application")
For Each appIE In objSW.Windows
If InStr(appIE.LocationURL, "cortalconsors") > 0 Then
With appIE.Document.forms(1)
.elements("pattern").Value = "581005"
.submit
End With
Exit Sub
End If
Next
If MsgBox("Es ist keine Website von Cortal Consors geladen. Soll ein neues Fenster geöffnet  _
werden?", vbYesNo + vbQuestion) = vbNo Then Exit Sub
Set appIE = CreateObject("InternetExplorer.application")
Do While appIE.Busy
Loop
appIE.Navigate "http://www.cortalconsors.de"
appIE.Visible = True
While Not appIE.ReadyState = 4
Wend
With appIE.Document.forms(1)
.elements("pattern").Value = "581005"
.submit
End With
End Sub
Mal abgesehen vom Browser (Internet Explorer statt Firefox), solltest du jetzt wunschlos glücklich sein ;-)
Viele Grüße
Martin

Anzeige
AW: von VBA auf Web
07.05.2013 13:33:27
VBA
Hallo Martin,
recht herzlichen Dank für dein tolles Engagement.
Heute werde ich zwar nicht mehr dazukommen, all die Neuigkeiten auszuprobieren.
Dann aber - vermutlich am Mittwoch - werde ich mich nochmals melden und dir berichten.
Viele Grüße
Rolf

AW: von VBA auf Web
07.05.2013 14:58:13
VBA
Hallo Martin,
ich war doch zu neugierig und musste deinen Vorschlag gleich ausprobieren.
Ich bin begeistert, von dem, was möglich ist und von dem, was du kannst.
Vielleicht kannst du mir noch einen Schritt weiter helfen.
In der Spalte A stehen die WKNs verschiedener Aktien. Die For-Next Schleife öffnet alle der Reihe nach.
Ist es auch noch möglich, den jeweiligen Kurs aus der Website auf das Tabellenblatt zu bringen (wie von mir dilletantisch angedeutet)?
Sub Request_CortalConsors()
Dim appIE As Object
Dim i As Integer
Set appIE = CreateObject("InternetExplorer.application")
For i = 1 To 3
Do While appIE.Busy
Loop
appIE.Navigate "http://www.cortalconsors.de"
appIE.Visible = True
While Not appIE.ReadyState = 4
Wend
With appIE.Document.forms(1)
.elements("pattern").Value = Cells(i, 1)
.submit
End With
'Cells(i,2)= Kurs
Next
End Sub
Auf alle Fälle: Herzlichen Dank!
Viele Grüße
Rolf

Anzeige
AW: von VBA auf Web
07.05.2013 18:55:11
VBA
Hallo Rolf,
diese Aufgabe war schon deutlich schwieriger zu lösen und hat mich doch einige Zeit gekostet. Ich hatte etwas Schwierigkeiten durch die lange Ladezeit der Website (...mein Internet ist ziemlich lahm). Ich glaube, dass deine Aktienkurs-Kenntnisse vorteilhafter sind als meine Programmierkenntnisse. Wenn du die erste Million verdient hast, kannst du vielleicht an mich denken ;-)
Hier der neue Code:
Sub Request_CortalConsors()
Dim i As Long, objTag As Object
Dim appIE As Object, varHTML As Variant
Set appIE = CreateObject("InternetExplorer.application")
Do While appIE.Busy
Loop
appIE.navigate "http://www.cortalconsors.de"
appIE.Visible = True
While Not appIE.ReadyState = 4
Wend
For i = 1 To 3
With appIE.document.forms(1)
.elements("pattern").Value = Cells(i, 1) 'WKN auslesen
.submit
End With
Do: Loop Until appIE.Busy = False
Do: Loop Until appIE.ReadyState = 4
For Each objTag In appIE.document.All
varHTML = objTag.innerText
If objTag.nodeName = "FORM" Then
If InStr(varHTML, "Kurs vom ") Then
varHTML = Split(varHTML, vbCrLf)
varHTML = Split(varHTML(1), Chr(32))
varHTML = Replace(varHTML(0), ",", ".")
varHTML = CVar(varHTML)
Cells(i, 2) = varHTML 'Kurs schreiben
Exit For
End If
End If
Next objTag
Next i
End Sub
Viel Spaß!
Martin

Anzeige
AW: von VBA auf Web
07.05.2013 20:21:51
VBA
Hallo Martin,
meine bisherige Bekanntschaft mit deinen Kenntnissen zeigte mir doch, dass diese deutlich verlässlicher und fundierter sind als das Auf unf Ab der Kurse. Dessen ungeachtet werde ich deinem Wunsch nachkommen und mich bei der ersten Million melden. Bitte etwas Geduld mitbringen.
Morgen werde ich mich auf deine neuen Ausführungen stürzen - heute nochmals vielen Dank.
Eine gute Woche
und viele Grüße
Rolf

AW: von VBA auf Web
08.05.2013 07:00:06
VBA
Hallo Rolf,
ich habe den Code noch etwas optimiert. Jetzt gibt es eine If-Abfrage weniger, weil nur noch die Forms (appIE.document.forms statt appIE.document.all) durchlaufen werden. Nimm also besser diesen Code:
Sub Request_CortalConsors()
Dim i As Long, objForm As Object, j As Long
Dim appIE As Object, varHTML As Variant
Set appIE = CreateObject("InternetExplorer.application")
Do While appIE.Busy
Loop
appIE.navigate "http://www.cortalconsors.de"
appIE.Visible = True
While Not appIE.ReadyState = 4
Wend
For i = 1 To 3
With appIE.document.forms(1)
.elements("pattern").Value = Cells(i, 1) 'WKN auslesen
.submit
End With
Do: Loop Until appIE.Busy = False
Do: Loop Until appIE.ReadyState = 4
For Each objForm In appIE.document.forms
varHTML = objForm.innertext
If InStr(varHTML, "Kurs vom ") Then
varHTML = Split(varHTML, vbCrLf)
varHTML = Split(varHTML(1), Chr(32))
varHTML = Replace(varHTML(0), ",", ".")
Cells(i, 2) = CVar(varHTML) 'Kurs schreiben
Exit For
End If
Next objForm
Next i
End Sub
Viele Grüße
Martin

Anzeige
AW: von VBA auf Web
08.05.2013 09:12:22
VBA
Hallo Martin,
ich habe fast ein schlechtes Gewissen, dich so mit Fragen zu belegen. Aber diesmal muss ich es einfach ignorieren, da sonst deine bisherige Arbeit bei mir nur halb funktioniert.
Bei dieser Zeile: varHTML = Replace(varHTML(0), ",", ".")
bricht das Makro ab;
Fehlermeldung: Index außerhalb des gültigen Bereichs.
Das gilt für beide Versionen, die du geschrieben hast.
Vielleicht ist es nur eine Kleinigkeit.
Viele Grüße
Rolf

AW: von VBA auf Web
08.05.2013 10:39:43
VBA
Hallo Rolf,
hab kein schlechtes Gewissen, das Programmieren macht mir Spaß und gerne lerne ich etwas dabei. Ich bin über die Fehlermeldung etwas überrascht, weil der Code bei mir wunderbar durchläuft und bei dir doch der selbe HTML-Quelltext ausgelesen wird wie bei mir. An der betreffenden Stelle versuche ich eigentlich nur das Währungszeichen zu entfernen und das Komma durch einen Punkt zu ersetzen (...beim Programmieren ist der Punkt das Komma). Da ich den Grund für die Fehlermeldung nicht kenne, übernehme ich den Kurs jetzt mal mit Währungszeichen. Bitte ersetze mal folgenden Abschnitt und versuche es erneut:

For Each objForm In appIE.document.forms
varHTML = objForm.innertext
If InStr(varHTML, "Kurs vom ") Then
varHTML = Split(varHTML, vbCrLf)
Cells(i, 2) = varHTML(1) 'Kurs schreiben
Exit For
End If
Next objForm

Viele Grüße
Martin

Anzeige
AW: von VBA auf Web
08.05.2013 11:01:37
VBA
Hallo Martin,
das Programm öffnet die drei Webseiten, wird nicht mehr unterbrochen, aber endet ohne die Kursübergabe in Cells(i,2).
Gruß
Rolf

AW: von VBA auf Web
08.05.2013 11:09:35
VBA
Hallo Rolf,
macht es dir etwas aus mal deine Excel-Datei hochzuladen? Ich würde gerne mal prüfen, ob die HTML-Seiten mit den anderen Kursen anders aufgebaut sind (...meine derzeit einzige Erklärung). Falls es so ist, müsste ich irgendwelche Fallunterscheidungen einbauen.
Viele Grüße
Martin

AW: von VBA auf Web
08.05.2013 11:16:20
VBA
https://www.herber.de/bbs/user/85240.xlsm
Hallo Martin,
hoffe, dass das Hochladen klappt. Kenne mich da nicht aus.
Gruß
Rolf

Anzeige
AW: von VBA auf Web
08.05.2013 11:33:03
VBA
Hallo Rolf,
du wirst es mir nicht glauben, aber deine Datei läuft bei mir fehlerfrei durch und schreibt alle Kurse richtig in Spalte B. Ich kann das Problem leider noch immer nicht nachvollziehen. Ein neuer Ansatz: Bitte verwende nachfolgenden Code und mache ein Screenshot von einer MsgBox. Bei mir steht der Kurs in der zweiten Zeile:
Userbild

Sub Request_CortalConsors2()
Dim i As Long, objForm As Object, j As Long
Dim appIE As Object, varHTML As Variant
Set appIE = CreateObject("InternetExplorer.application")
Do While appIE.Busy
Loop
appIE.navigate "http://www.cortalconsors.de"
appIE.Visible = True
While Not appIE.ReadyState = 4
Wend
For i = 1 To 3
With appIE.document.forms(1)
.elements("pattern").Value = Cells(i, 1) 'WKN auslesen
.submit
End With
Do: Loop Until appIE.Busy = False
Do: Loop Until appIE.ReadyState = 4
For Each objForm In appIE.document.forms
varHTML = objForm.innertext
If InStr(varHTML, "Kurs vom ") Then
MsgBox varHTML
varHTML = Split(varHTML, vbCrLf)
'Sheets("Tabelle1").Activate
Cells(i, 2) = varHTML(1) 'Kurs schreiben
Exit For
End If
Next objForm
Next i
[c1] = "ENDE"
End Sub
Viele Grüße
Martin

Anzeige
AW: von VBA auf Web
08.05.2013 11:10:04
VBA
Hallo Martin,
noch eine Feststellung, die ich gerade machte.
Wenn ich die Zellen B1:B3 vorher fülle, dein Programm dann starte, werden B1:B3 geleert.
Also schreibt es in diese Zellen hinein, allerdings ohne Inhalt.
Gruß
Rolf

AW: von VBA auf Web
08.05.2013 11:14:22
VBA
Hallo Ralf,
das ist schon logisch. Das Problem liegt beim Auslesen der Website. Wenn du in die Zellen A1 bis A3 jeweils "581005" schreibst, funktioniert es dann? - So hatte ich es getestet.
Viele Grüße
Martin

AW: von VBA auf Web
08.05.2013 11:53:38
VBA
Hallo Martin,
es klappt!
Ich habe nur bei varHTML(1) durch (3) ersetzt.
"Cells(i, 2) = varHTML(3) 'Kurs schreiben"
Nochmals vielen Dank!
Ich hoffe bei meinem nächsten Problem einen ebenso geduldigen Lehrer zu finden.
Viele Grüße
Rolf

AW: von VBA auf Web
08.05.2013 12:01:33
VBA
Hallo Rolf,
das freut mich. Vermutlich hast du meinen letzten Post übersehen:
https://www.herber.de/forum/messages/1312204.html
Ich kann den Grund zwar nicht nachvollziehen, aber bei dir scheint der Kurs nach der Zeile "varHTML = objForm.innertext" in der vierten Zeile (darum varHTML(3)) der Variable zu stehen, während der Kurs bei mir in der zweiten Zeile steht (darum varHTML(1)). Du solltest jetzt auch wieder die Zeilen mit dem Punkt und dem Komma einbinden, damit die Kurse als Zahlen ohne Währungseinheit in die Zellen übertragen werden.
Viele Grüße
Martin

AW: von VBA auf Web
08.05.2013 13:47:52
VBA
Hallo Martin,
den Screenshot habe ich jetzt als Bild zwar auf dem Desktop liegen, weiß aber nicht, wie ich ihn hierher bringe. Der Kurs steht übrigens auch in der 2. Zeile.
Die Zeilen ohne Währungseinheit klappen auch jetzt noch nicht. Das stört aber nicht, da diese auf dem Tabellenblatt leicht (auch für mich) zu entfernen ist.
Viele Grüße
Rolf

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige