一、启动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:

  1. URLDownloadToFile 默认文件下载到当前excel工作簿的所在路径
  2. 如果有重复的文件名存在,则会直接覆盖

三、使用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   '3

WebBrowser1.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相关推荐

  1. 【python】打开网页和下载文件

    大家好,我是胡亥大魔王.今天介绍python中打开网页和下载文件 用webbrowser打开网页 webbrowser 是python自带的,打开浏览器获取指定网页 import webbrowser ...

  2. linux第三方模块参数,nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下)...

    nginx 的第三方模块ngx_http_accesskey_module 来实现下载文件的防盗链步骤(linux系统下),安装Nginx和HttpAccessKeyModule模块(参考LNMP环境 ...

  3. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  4. 初级版python登录验证,上传下载文件加MD5文件校验

    服务器端程序 import socket import json import struct import hashlib import osdef md5_code(usr, pwd):ret = ...

  5. linux快捷上传下载文件

    借助securtCRT,使用linux命令sz可以很方便的将服务器上的文件下载到本地,使用rz命令则是把本地文件上传到服务器 其中,对于sz和rz的理解与记忆我用了如下的方法(因为很多时候容易搞混): ...

  6. 基于php下载文件的详解

    基于php下载文件的详解 本篇文章是对php下载文件进行了详细的分析介绍,需要的朋友参考下 php下载文件,比如txt文件. 出现的效果就是,弹出浏览器自带的下载框,出现另存为操作.有时候会出现内存溢 ...

  7. java上传加密_Java上传下载文件并实现加密解密

    使用 Jersey 服务器实现上传,使用 HTTP 请求实现下载 引入依赖 在 pom.xml 中添加 Jersey 相关依赖 com.sun.jersey jersey-client 1.18.1 ...

  8. sftp shell 批量上传文件_Shell自动上传下载文件到SFTP服务器

    1.说明 本文提供一个Shell脚本, 可以自动连接到SFTP服务器, 然后上传或者下载指定的文件, 进而可以使用Linux的corntab命令, 定时执行脚本上传下载文件, 实现文件的同步或者备份功 ...

  9. php 当前页面下载文件,php实现当前页面点击下载文件的简单方法

    php实现当前页面点击下载文件的简单方法 发布于 2017-08-02 17:44:21 | 80 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...

  10. ASP.NET 下载文件方式

    protected void Button1_Click(object sender, EventArgs e){/*微软为Response对象提供了一个新的方法TransmitFile来解决使用Re ...

最新文章

  1. 专注,专注,还是专注
  2. [C++] Lvalue and Rvalue Reference
  3. 关于系统用户数,并发用户数,在线用户数,吞吐量
  4. win10微软图标点击无反应_win10点击任务栏没反应?这样操作就可以了
  5. C#8.0宝藏好物Async streams
  6. python3语音识别模块_零基础教你玩转语音控制,学习语音控制技术,打造智能生活很简单...
  7. bash 学习笔记2
  8. 工作10年才懂的道理,早知道职位比现在高两级
  9. 按性别分类进行描述统计(SPSS操作)
  10. window下安装ruby与sass(附ruby)
  11. 社交网络分析算法(SNA)
  12. bat批处理脚本执行过程中,Windows运行窗口中出现中文乱码
  13. win7计算机的用户名和密码,win7文件共享访问需要输入用户名和密码如何解决
  14. 题解-hzy loves segment tree I
  15. matlab 古典概率求解,第1章数学建模古典概型解答.ppt
  16. ARM裸机开发篇3:ARM汇编语言程序设计
  17. np.arange()和 range()的用法及区别
  18. r语言 求几个数的最小公倍数_一课研究之“最小公倍数教学后学生知识技能情况分析”(20190417)...
  19. 化学数据分析计算机,化学实验数据分析系统1.1
  20. java eventbus_Guava学习笔记:EventBus

热门文章

  1. 【mcuclub】舵机-SG90
  2. 华为hicar支持车型列表_汽车大观| 华为的“汽车梦”
  3. 内核5.4以上, Realtek 8111网卡初始化失败
  4. 微信翻译生日快乐的代码_微信表情翻译表白代码彩蛋大全 微信表情加符号翻译意思全解...
  5. 寒门难出贵子,我当程序员让爸妈在老家长脸了
  6. 缠中说禅形态挖掘之九笔形态
  7. 使用决策树算法对Iris数据构建决策树
  8. envi神经网络分类原理,ENVI神经网络分类
  9. 三极管当做开关的导通方式
  10. 中国锂电池设备行业投资价值评估及竞争策略建议报告2021-2027年