Ich habe ein Problem, das in diesem Forum in der Vergangenheit diskutiert wurde, aber obwohl Lösungen für die spezifischen Fälle vorgeschlagen worden waren, war keiner für mich nützlich. Ich möchte eine Datentabelle mit aktuellen Aktienkursen analysieren. Genau dies ist ein Yahoo-Portfolio. Die URL lautet "https://finance.yahoo.com/portfolio/pf_5/view/view_0". Wenn ich versuche, das Portfolio über eine Webverbindung in mein Arbeitsblatt zu importieren, ist im Importfenster kein Inhalt zu sehen. Dies funktioniert bis vor einiger Zeit gut, aber es scheint, dass Yahoo den Code geändert hat, so dass der Inhalt nicht mehr importiert werden kann. Daher kann ich die Website nicht mehr in einer Excel-Verbindung verwenden, um mein Portfolio zu importieren.HTML-Datei-Download aus dem Internet mit URLDownloadToFile erstellt leere Datei
Aber ich kann die Datei mit Chrome ohne Eingabe von Anmeldeinformationen herunterladen (sie sind bereits in Chrome oder in einem Cookie gespeichert, weiß nicht) zu meinem Download-Ordner als HTML-Datei und wenn ich es in einem Browser öffnen wird nicht nur wie das Original angezeigt, sondern ich kann die heruntergeladene Datei auch mit Excel analysieren. Die Dateilänge der direkt vom Browser heruntergeladenen Datei beträgt 256 kB. So scheint es, dass der Server erkennt, wie die Datei verwendet wird, und ermöglicht es, sie zu speichern, aber nicht online zu analysieren.
Jetzt versuche ich eine vba Sub zu schreiben, die die Website öffnet, lädt die Datei herunter und analysiert dann die gespeicherte Version. Der Analyseteil funktioniert einwandfrei, aber ich kann keinen funktionierenden Download in den Code einfügen. Wenn ich die URLDownloadToFile (0, URL1, URL2, 0, 0) -Methode (URL1 ist die https-Adresse und URL2 ist der Dateiname und Pfad), die heruntergeladene Datei hat nur 75kB und enthält einige Java-Code, aber es gibt keine Daten, die auf dem Bildschirm zu sehen sind, wenn ich sie mit dem Browser betrachte, und wenn ich versuche, den Inhalt nach Excel zu importieren, wird nichts importiert. Während URLDownloadToFile in den meisten Fällen funktioniert, funktioniert es nicht mit den Yahoo-Portfolio-Webseiten. Meine Frage ist: 1) Könnte es helfen, die Parameter der Funktion zu ändern (Parameter 1 = pcaller?). Aber wie? 2) Gibt es noch eine andere bekannte Methode in vba, um eine Webseite zu speichern, ohne sie zeilenweise zu lesen (probiert dies auch und funktioniert auch nicht)? Dies sind zwei Methoden, die ich versuchte:
Option Explicit
'Declarations
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
'Download Code
Sub download()
Dim done
Dim URL1 As String
Dim URL2 As String
URL1 = "https://finance.yahoo.com/portfolio/pf_5/view/v1"
URL2 = "C:\Users\xxx\Downloads\pf1 - Yahoo Finance Portfolios.html"
'This will provide a return value to test.
'Note the ( ) around the args
done = URLDownloadToFile(0, URL1, URL2, 0, 0)
'Test.
If done = 0 Then
MsgBox "File has been downloaded!"
Else
MsgBox "File not found!"
End If
End Sub
Sub SaveWebFile() 'this creates an "empty" file!
Dim URL1 As String
Dim URL2 As String
URL1 = "https://finance.yahoo.com/portfolio/pf_5/view/v1"
URL2 = "C:\Users\xxxx\Downloads\pf1 - Yahoo Finance Portfolios.html"
Set fso = CreateObject("Scripting.fileSystemObject")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL1, False
.send
Text = .responseText
End With
Set objOutputFile = fso.CreateTextFile(URL2, True)
objOutputFile.Write Text
objOutputFile.Close
End Sub