You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过VBA操作巴西央行汇率页面实现单选按钮选中与CSV自动下载

VBA采集巴西央行汇率数据解决方案

一、原有IE操作代码修复

你现有代码失败的核心原因有两个:

  • 页面加载等待逻辑被注释,DOM未渲染完成时无法定位到元素
  • 同name表单元素的索引从0开始计数,第二个单选按钮对应索引为1,不是2

修复后的完整可运行代码如下:

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

Sub Web_Taxes()
    Dim IE As Object
    Dim URL As String
    Dim savePath As String
    savePath = "C:\Temp\BASES\TBEX-OB08\todasasmoedas.csv"
    
    ' 创建IE对象
    Set IE = CreateObject("InternetExplorer.Application")
    URL = "https://www.bcb.gov.br/estabilidadefinanceira/historicocotacoes"
    IE.Visible = True ' 可以设置为False后台运行
    IE.Navigate URL
    
    ' 等待页面加载完成
    Do While IE.busy Or IE.ReadyState <> 4
        DoEvents
    Loop
    ' 额外等待1秒确保动态元素渲染完成
    Application.Wait Now + TimeValue("00:00:01")
    
    ' 选中第二个单选按钮(索引从0开始,第二个对应索引1)
    IE.document.All.Item("RadOpcao").Item(1).Checked = True
    
    ' 点击Pesquisar按钮
    IE.document.querySelector("input[value='Pesquisar']").Click
    
    ' 等待查询结果加载完成
    Do While IE.busy Or IE.ReadyState <> 4
        DoEvents
    Loop
    Application.Wait Now + TimeValue("00:00:02")
    
    ' 获取生成的CSV下载链接直接下载,避免处理IE下载弹窗
    Dim csvURL As String
    csvURL = IE.document.querySelector("a[href*='gerarCSVTodasAsMoedas']").href
    URLDownloadToFile 0, csvURL, savePath, 0, 0
    
    ' 关闭IE释放资源
    IE.Quit
    Set IE = Nothing
    MsgBox "文件下载完成,保存路径:" & savePath
End Sub

二、更推荐的方案:直接构造ID参数下载(无需启动IE)

你观察到的ID每日递增的规则是正确的,该方案完全可行,且稳定性远高于操作IE,无需处理浏览器兼容、弹窗等问题,代码更简洁:

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

Sub DownloadTaxByID()
    Dim baseURL As String
    Dim targetID As Long
    Dim savePath As String
    Dim folderPath As String
    
    baseURL = "https://ptax.bcb.gov.br/ptax_internet/consultaBoletim.do?method=gerarCSVTodasAsMoedas&id="
    ' 可根据需要修改目标ID,批量下载直接循环ID范围即可
    targetID = 61795 ' 示例为2021年8月11日对应的ID
    folderPath = "C:\Temp\BASES\TBEX-OB08\"
    savePath = folderPath & "todasasmoedas.csv"
    
    ' 检查保存文件夹是否存在,不存在则创建
    If Dir(folderPath, vbDirectory) = "" Then
        MkDir folderPath
    End If
    
    ' 直接下载文件
    Dim returnVal As Long
    returnVal = URLDownloadToFile(0, baseURL & targetID, savePath, 0, 0)
    
    If returnVal = 0 Then
        MsgBox "下载成功,文件已保存至:" & savePath
    Else
        MsgBox "下载失败,请检查ID是否有效、网络是否正常"
    End If
End Sub

如果需要批量下载历史数据,只需要给targetID设置循环范围即可,比如要下载2021年8月全月数据,设置ID从61764循环到61795即可。

三、其他采集方案

如果需要处理大量历史汇率数据、做自动化清洗计算,也可以使用Python实现:

  • 用requests库构造下载请求,直接获取CSV内容
  • 用pandas库批量处理CSV数据,做格式转换、指标计算、数据库存储等操作,效率远高于VBA。

内容的提问来源于stack exchange,提问作者Ludson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 15:24:04