2017-11-10 324 views
0

我有一个简单的问题,我想。我想通过直接访问http链接来查看png。VBA.navigate直接去下载

问题是,我一直在直接下载。

我敢打赌,这只是一个翻转开关的地方。

Sub CamelGraph() 'ASIN As String 

    Dim ASIN As String 
    ASIN = "0395967392" 


    Set ie = CreateObject("InternetExplorer.Application") 
    Dim URL As String 
    URL = "https://charts.camelcamelcamel.com/us/" & ASIN & "/sales-rank.png?force=1&zero=0&w=725&h=440&legend=1&ilt=1&tp=1y&fo=0&lang=en" 


    ie.Visible = True 
    apiShowWindow ie.hwnd, sw_maximize 
    ie.navigate URL 

End Sub 
+1

请在问号后查看网址参数。其中一个可能导致文件下载而不是在网站上显示。如果有“dl”参数,我会确定的。也许“force = 1”为“强制下载”= true?你可以从删除所有参数开始,看看会发生什么。 –

回答

0

我认为这与浏览器类型(即IE和Chrome)以及正在使用的MIME类型有关。虽然您可以在单个计算机上或解决方法(如Chrome重定向器)中解决此问题,但也可以考虑下载该文件,然后使用Shell命令打开它?我知道这并不完美,但我认为它会在不同的机器上提供更一致的结果。

下面是一些VBA代码来下载一个文件,然后你可以壳牌它与默认的应用程序打开它:

Sub DownloadFile() 

Dim myURL As String 
myURL = "https://YourWebSite.com/?your_query_parameters" 

Dim WinHttpReq As Object 
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") 
WinHttpReq.Open "GET", myURL, False, "username", "password" 
WinHttpReq.send 

myURL = WinHttpReq.responseBody 
If WinHttpReq.Status = 200 Then 
    Set oStream = CreateObject("ADODB.Stream") 
    oStream.Open 
    oStream.Type = 1 
    oStream.Write WinHttpReq.responseBody 
    oStream.SaveToFile "C:\file.csv", 2 ' 1 = no overwrite, 2 = overwrite 
    oStream.Close 
End If 

End Sub 

祝你好运,杰森!

0

尝试导航到空白页.Navigate "about:blank"首先在浏览器窗口中显示图像。

Option Explicit 

Sub Test() 

    With CreateObject("InternetExplorer.Application") 
     .Visible = True 
     .Navigate "about:blank" 
     Do While .readyState <> 4 Or .Busy 
      DoEvents 
     Loop 
     .Navigate "https://charts.camelcamelcamel.com/us/0395967392/sales-rank.png?force=1&zero=0&w=725&h=440&legend=1&ilt=1&tp=1y&fo=0&lang=en" 
     Do While .readyState <> 4 Or .Busy 
      DoEvents 
     Loop 
     Do While .Document.readyState <> "complete" 
      DoEvents 
     Loop 
    End With 

End Sub