Vba 消息框不总是可见的

Vba 消息框不总是可见的,vba,excel,Vba,Excel,我有以下VBA代码,用于从web下载文件,给我一条消息“从…下载数据”,下载后给我一条消息“下载到…”。这是我的密码: Sub DownloadFileFromWeb() Dim IE As Object Dim links As Variant, lnk As Variant Dim download_path As String download_path = "\\xxxxx\Save Raw File here.xls" Set IE = CreateObject("InternetEx

我有以下VBA代码,用于从web下载文件,给我一条消息“从…下载数据”,下载后给我一条消息“下载到…”。这是我的密码:

Sub DownloadFileFromWeb()
Dim IE As Object
Dim links As Variant, lnk As Variant
Dim download_path As String
download_path = "\\xxxxx\Save Raw File here.xls"
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.hkma.gov.hk/eng/market-data-and-statistics/monthly-statistical-bulletin/table.shtml#section2" 'load web page
While IE.Busy
  DoEvents  'wait until IE is done loading page.
Wend
Set links = IE.document.getElementsByTagName("a")
For Each lnk In links
     If Len(lnk.href) > 4 And Right(lnk.href, 4) = ".xls" And InStr(1, lnk.href, "http://www.hkma.gov.hk/media/eng/doc/market-data-and-statistics/monthly-statistical-bulletin/T080102.xls") <> 0 Then
            MsgBox "Downloading Data from " & lnk.href
            Download_File lnk.href, download_path
            MsgBox "Downloaded to - " & download_path
            Exit For
     End If
Next
End Sub

Function Download_File(ByVal vWebFile As String, ByVal vLocalFile As String) As Boolean
Dim oXMLHTTP As Object, i As Long, vFF As Long, oResp() As Byte

Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP")
oXMLHTTP.Open "GET", vWebFile, False 'Open socket to get the website
oXMLHTTP.Send 'send request

'Wait for request to finish
Do While oXMLHTTP.readyState <> 4
DoEvents
Loop

oResp = oXMLHTTP.responseBody 'Returns the results as a byte array

'Create local file and save results to it
vFF = FreeFile
If Dir(vLocalFile) <> "" Then Kill vLocalFile
Open vLocalFile For Binary As #vFF
Put #vFF, , oResp
Close #vFF

'Clear memory
Set oXMLHTTP = Nothing
End Function
从Web()下载子文件
模糊的物体
变光链路作为变型,lnk作为变型
将下载路径设置为字符串
下载\u path=“\\xxxxx\Save Raw File here.xls”
设置IE=CreateObject(“InternetExplorer.Application”)
即“导航”http://www.hkma.gov.hk/eng/market-data-and-statistics/monthly-statistical-bulletin/table.shtml#section2“'加载网页
趁我忙
DoEvents'等待IE完成加载页面。
温德
Set links=IE.document.getElementsByTagName(“a”)
对于链接中的每个lnk
如果Len(lnk.href)>4和Right(lnk.href,4)=“.xls”和InStr(1,lnk.href),”http://www.hkma.gov.hk/media/eng/doc/market-data-and-statistics/monthly-statistical-bulletin/T080102.xls)那么
MsgBox“从下载数据”&lnk.href
下载文件lnk.href,下载路径
MsgBox“下载到-”&下载路径
退出
如果结束
下一个
端接头
函数下载_文件(ByVal vWebFile作为字符串,ByVal vLocalFile作为字符串)作为布尔值
Dim-oXMLHTTP作为对象,i作为长,vFF作为长,oResp()作为字节
设置oXMLHTTP=CreateObject(“MSXML2.XMLHTTP”)
打开“GET”,vWebFile,False“打开套接字以获取网站
oXMLHTTP.Send“发送请求
'等待请求完成
执行oXMLHTTP.readyState 4时
多芬特
环
oResp=oXMLHTTP.responseBody'将结果作为字节数组返回

'创建本地文件并将结果保存到其中 vFF=自由文件 如果Dir(vLocalFile)“,则杀死vLocalFile 打开二进制文件作为#vFF的vLocalFile 放#vFF,oResp 关闭#vFF “清除内存 设置oXMLHTTP=Nothing 端函数
我的问题是,大多数时候我不会看到任何消息框出现,同时也不会下载任何东西。你能帮我一直收到留言吗


多谢各位

在我这边测试了你的代码,我看不出有错误。我已经下载了上百次了,它还没有坏。然而,我做了一些小的修改

将主子程序更改为以下内容:

Sub DownloadFileFromWeb()
Dim IE As Object
Dim links As Variant, lnk As Variant
Dim download_path As String
download_path = "C:\...\SavedFile.xls" 'Modify.
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.hkma.gov.hk/eng/market-data-and-statistics/monthly-statistical-bulletin/table.shtml#section8" 'load web page
While IE.Busy
  DoEvents  'wait until IE is done loading page.
Wend
Set links = IE.document.getElementsByTagName("a")
For Each lnk In links
     If Len(lnk.href) > 4 And Right(lnk.href, 4) = ".xls" And InStr(1, lnk.href, "T080102.xls") <> 0 Then
            If MsgBox("Downloading Data from " & lnk.href, vbOKOnly) = vbOK Then
                Download_File lnk.href, download_path
                MsgBox "Downloaded to - " & download_path
                Exit For
            End If
     End If
Next
End Sub
从Web()下载子文件
模糊的物体
变光链路作为变型,lnk作为变型
将下载路径设置为字符串
下载\u path=“C:\…\SavedFile.xls”'修改。
设置IE=CreateObject(“InternetExplorer.Application”)
即“导航”http://www.hkma.gov.hk/eng/market-data-and-statistics/monthly-statistical-bulletin/table.shtml#section8“'加载网页
趁我忙
DoEvents'等待IE完成加载页面。
温德
Set links=IE.document.getElementsByTagName(“a”)
对于链接中的每个lnk
如果Len(lnk.href)>4和Right(lnk.href,4)=“.xls”和InStr(1,lnk.href,“T080102.xls”)为0,则
如果MsgBox(“从”&lnk.href,vbOKOnly下载数据)=vbOK,则
下载文件lnk.href,下载路径
MsgBox“下载到-”&下载路径
退出
如果结束
如果结束
下一个
端接头
基本上,我只是改变了一件事:消息框将在下载文件之前等待您的输入。注意,如果MsgBox(…)=vbOKOnly,我是如何做到的。这样,它将等待您的输入而不会中断

对URL也有微小的更改。将
section2
更改为
section8
,因为这是您想要的表(不会影响任何内容,IMHO)


让我们知道这是否有帮助。

我不知道为贵公司的目录输入整个路径是否是一个明智的选择。不是说我们可以访问它,而是。。。无论什么有两件事:你的
下载路径是错误的。除非您的
Download\u文件
子例程/函数将
Download\u路径
作为下载文件的最终保存名称,否则您应该停止在文件夹级别。其次,
InStr
正在过压井上运行。您确定要下载的文件始终命名为
T080102.xls
?请澄清这一点,并提供下载文件的代码。我认为它有时是成功的,但有些东西阻碍了它。非常感谢,还删除了公司目录:)是的,文件将始终命名为T080102.xls。这也是正确的,有时它是成功的,有时它不是,这是恼人的一部分!下面是Download_文件以及函数Download_文件(ByVal vWebFile作为字符串,ByVal vLocalFile作为字符串)作为Boolean Dim oXMLHTTP作为对象,i作为长,vFF作为长,oResp()作为字节集oXMLHTTP=CreateObject(“MSXML2.XMLHTTP”)oXMLHTTP.Open“GET”,vWebFile,False“打开套接字以获取网站oXMLHTTP.Send“Send request”等待请求完成,而oXMLHTTP.readyState 4 DoEvents Loop oResp=oXMLHTTP.responseBody“将结果作为字节数组返回”“创建本地文件并将结果保存到其中vFF=FreeFile If Dir(vLocalFile)”“然后杀死vLocalFile打开vLocalFile以二进制形式作为#vFF Put#vFF,或sp Close#vFF清除内存集oXMLHTTP=Nothing End functionpologies,这是我在这里的第一篇文章!添加它!非常感谢你。目前似乎运行良好:)