我有一個過去在這個論壇中討論過的問題,但是雖然已經提出了針對特定案例的解決方案,但沒有一個對我有用。 我想分析一個包含最近股票報價的數據表。正是這是一個雅虎組合。該網址是「https://finance.yahoo.com/portfolio/pf_5/view/view_0」。 如果我嘗試通過Web連接將組合導入到我的工作表中,則在導入窗口中不會顯示任何內容。這項工作很好,直到前段時間,但似乎雅虎已更改代碼,以便內容不能再導入。所以我不能使用Excel連接中的網站導入我的投資組合。用URLDownloadToFile從網上下載html文件創建空文件
但我可以用Chrome下載文件,而無需輸入憑據(它們已經存儲在Chrome或Cookie中,不知道)到我的下載文件夾中作爲html文件,當我在瀏覽器中打開它時不僅會顯示像原始,但我也可以用Excel分析下載的文件。直接從瀏覽器下載的文件的文件長度爲256 kB。 因此,似乎服務器可以識別文件的使用方式並允許存儲它,但不能在線分析。
現在我正在嘗試編寫一個打開網站的vba子文件,下載該文件,然後分析存儲的版本。 分析部分工作正常,但我無法在代碼中包含工作下載。 當我使用URLDownloadToFile(0,URL1,URL2,0,0)方法(URL1是https地址,URL2是文件名和路徑)時,下載的文件只有75kB幷包含一些java代碼,但沒有數據在瀏覽器中觀看時在屏幕上顯示,當我嘗試將內容導入到Excel時,將不會導入任何內容。 因此,雖然URLDownloadToFile可能在大多數情況下工作,但它不適用於雅虎組合網頁。 我的問題是: 1)它可以幫助改變函數的參數(參數1 = pcaller?)。但是如何? 2)是否有任何其他已知的方法可用vba保存網頁而不逐行讀取它(也試過這個,也不管用)? 這兩種方法我試過:
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