VBA下载文件 使用WebBrowser 及 DoFileDownload
一、启动WebBrowser
在Excel打开时启动:先激活WebBrowser所在的表,继而在表激活事件中激活WebBrowser,在WebBrowser定位到网页。
1:在workbook启动时激活该webbrowser所在的worksheet
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("web").Activate
End Sub
2:在worksheet被激活时,设置webbrowser的页面导航
Private Sub Worksheet_Activate()
WebBrowser1.Activate
WebBrowser1.Navigate "https://...."
End Sub
也可以通过设置一个按钮激活,略过。
二、使用 URLDownloadToFile
1. 调用API前的声明
Private Declare PtrSafe 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
参数解释:
pCaller:如果调用的应用不是一个ActiveX组件,则可以设为Null
szURL:要下载的URL
szFileName:存储的文件名
dwReserved:必须为NULL
lpfnCB:与下载进度相关的东西
2. 创建一个调用API的功能函数,这里主要是用于后面判断是否下载文件成功
Public Function downloadFile(ByVal strURL As String, ByVal strFile As String) As Boolean
Application.EnableCancelKey = xlDisabled
Dim lngReturn&
'用lngReturn接收返回的结果
lngReturn = URLDownloadToFile(0, strURL, strFile, 0, 0)
' 注意:URLDownloadToFile函数返回0表示文件下载成功
'判断返回的结果是否为0,则返回True,否则返回False
If lngReturn = 0 Then
downloadFile = True
Else
downloadFile = False
End If
End Function
3. 创建下载的执行功能
Private Function DL_rpt(ByVal Down_link As String)
dim FileName$
FileName = "abc.tsv"
If downloadFile(Down_link , FileName) = True Then
msgbox "Download Successfully"
Else
msgbox "Download Failed"
End If
End Sub
PS:
- URLDownloadToFile 默认文件下载到当前excel工作簿的所在路径
- 如果有重复的文件名存在,则会直接覆盖
三、使用WebBrowser进入某个网页,然后调用DL_rpt功能
(因为下载的文件链接可能是要进入某个页面才能使用或看得到)
Sub Into_HomePage()
On Error GoTo Err_Handle '出错就去Err_Handle
Call wait_for_reaction '调用一个自定义等待网页响应的function
If WebBrowser1.Document.ReadyState = "complete" Then
WebBrowser1.Document.getElementById("searchAccount.searchString").innerText = 105030 '1
WebBrowser1.Document.all("go-btn").Click '2
a = WebBrowser1.Document.getElementById("row").Children.tags("tbody")(0).Children.tags("tr")(1) _
.Children.tags("td")(0).Children.tags("a")(0).innerText '3WebBrowser1.Document.getElementById("row").Children.tags("tbody")(0).Children.tags("tr")(1) _
.Children.tags("td")(0).Children.tags("a")(0).Click '3'上面两步是等待页面响应完成后,使用WebBrowser对网页进行操作:
1. 找到id为"searchAccount.searchString"的元素,填入105030
2. 对id为"go-btn"的元素进行点击操作
3. 获取某个id为"row",在这个id下面某个a标签的文本,然后a标签进行点击的操作,要理解Children.tags("tbody")(0).Children.tags("tr")(1)的意思
Call wait_for_reaction
Call msg_for_reaction_completed '只是为了看网页响应是否完成,可以省略
dim dl_URL$
dl_URL = "https://......."
Call DL_File(dl_URL)
End If
Exit Sub
Err_Handle:
Application.OnTime Now + TimeValue("0:0:5"), "Into_HomePage" '等待5秒,重新启动Into_HomePage这个过程
End Sub
Sub wait_for_reaction()
'设置5秒的等待时间,不断循环,直到网页响应完成,这DoEvent代表前面的VBA程序继续运行
Do While WebBrowser1.Document.ReadyState <> "complete" Or WebBrowser1.ReadyState <> READYSTATE_COMPLETE
t = Timer
While Timer < t + 5
DoEvents
Wend
Loop
End Sub
Sub msg_for_reaction_completed()
If WebBrowser1.Document.ReadyState = "complete" Then
MsgBox "WebPage Loaded Finished !"
End If
End Sub
四、webbrowser另一个文件下载功能:DoFileDownload 另存为
声明API调用
Private Declare PtrSafe Function DoFileDownload Lib "shdocvw.dll" (ByVal lpszFile As String) As Long
过程中调用
dim Download_Url as String
dim Save_File as String
Download_Url = "Https://......"
Save_File = StrConv(Download_Url, vbUnicode)
Call DoFileDownload(Save_File)
PS:会有弹窗确定是否下载,暂时未找到解决办法
有其他问题再继续完善....
VBA下载文件 使用WebBrowser 及 DoFileDownload相关推荐
- 【python】打开网页和下载文件
大家好,我是胡亥大魔王.今天介绍python中打开网页和下载文件 用webbrowser打开网页 webbrowser 是python自带的,打开浏览器获取指定网页 import webbrowser ...
- linux第三方模块参数,nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下)...
nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下),安装Nginx和HttpAccessKeyModule模块(参考LNMP环境 ...
- 用python下载文件的若干种方法汇总
压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...
- 初级版python登录验证,上传下载文件加MD5文件校验
服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...
- linux快捷上传下载文件
借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...
- 基于php下载文件的详解
基于php下载文件的详解 本篇文章是对php下载文件进行了详细的分析介绍,需要的朋友参考下 php下载文件,比如txt文件. 出现的效果就是,弹出浏览器自带的下载框,出现另存为操作.有时候会出现内存溢 ...
- java上传加密_Java上传下载文件并实现加密解密
使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...
- sftp shell 批量上传文件_Shell自动上传下载文件到SFTP服务器
1.说明 本文提供一个Shell脚本, 可以自动连接到SFTP服务器, 然后上传或者下载指定的文件, 进而可以使用Linux的corntab命令, 定时执行脚本上传下载文件, 实现文件的同步或者备份功 ...
- php 当前页面下载文件,php实现当前页面点击下载文件的简单方法
php实现当前页面点击下载文件的简单方法 发布于 2017-08-02 17:44:21 | 80 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...
- ASP.NET 下载文件方式
protected void Button1_Click(object sender, EventArgs e){/*微软为Response对象提供了一个新的方法TransmitFile来解决使用Re ...
最新文章
- 专注,专注,还是专注
- [C++] Lvalue and Rvalue Reference
- 关于系统用户数,并发用户数,在线用户数,吞吐量
- win10微软图标点击无反应_win10点击任务栏没反应?这样操作就可以了
- C#8.0宝藏好物Async streams
- python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...
- bash 学习笔记2
- 工作10年才懂的道理,早知道职位比现在高两级
- 按性别分类进行描述统计(SPSS操作)
- window下安装ruby与sass(附ruby)
- 社交网络分析算法(SNA)
- bat批处理脚本执行过程中,Windows运行窗口中出现中文乱码
- win7计算机的用户名和密码,win7文件共享访问需要输入用户名和密码如何解决
- 题解-hzy loves segment tree I
- matlab 古典概率求解,第1章数学建模古典概型解答.ppt
- ARM裸机开发篇3:ARM汇编语言程序设计
- np.arange()和 range()的用法及区别
- r语言 求几个数的最小公倍数_一课研究之“最小公倍数教学后学生知识技能情况分析”(20190417)...
- 化学数据分析计算机,化学实验数据分析系统1.1
- java eventbus_Guava学习笔记:EventBus
热门文章
- 【mcuclub】舵机-SG90
- 华为hicar支持车型列表_汽车大观| 华为的“汽车梦”
- 内核5.4以上, Realtek 8111网卡初始化失败
- 微信翻译生日快乐的代码_微信表情翻译表白代码彩蛋大全 微信表情加符号翻译意思全解...
- 寒门难出贵子,我当程序员让爸妈在老家长脸了
- 缠中说禅形态挖掘之九笔形态
- 使用决策树算法对Iris数据构建决策树
- envi神经网络分类原理,ENVI神经网络分类
- 三极管当做开关的导通方式
- 中国锂电池设备行业投资价值评估及竞争策略建议报告2021-2027年