求助:开发每日抓取美国国债收益率曲线数据的VBA宏
美国国债收益率曲线数据自动抓取VBA解决方案
以下是可自动从指定URL抓取每日国债收益率表格数据的VBA代码,同时会解释关键的HTML元素定位逻辑,帮你理解网页结构的处理方式:
完整VBA代码
Sub 抓取国债收益率数据() Dim IE As Object Dim doc As Object Dim table As Object Dim row As Object Dim cell As Object Dim i As Integer, j As Integer ' 初始化IE对象 Set IE = CreateObject("InternetExplorer.Application") IE.Visible = False ' 后台运行,隐藏浏览器窗口 ' 打开目标URL IE.Navigate "https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value_month=202212" ' 等待页面完全加载 Do While IE.Busy Or IE.ReadyState <> 4 DoEvents Loop ' 获取HTML文档对象 Set doc = IE.Document ' 定位目标表格:页面内的收益率表格带有class属性"views-table",直接通过该类名定位 Set table = doc.getElementsByClassName("views-table")(0) ' 取第一个匹配的表格 ' 清空当前工作表原有数据 ThisWorkbook.ActiveSheet.Cells.Clear ' 遍历表格行与单元格,写入Excel i = 1 For Each row In table.Rows j = 1 For Each cell In row.Cells ThisWorkbook.ActiveSheet.Cells(i, j).Value = cell.innerText j = j + 1 Next cell i = i + 1 Next row ' 释放资源并关闭IE IE.Quit Set IE = Nothing Set doc = Nothing Set table = Nothing MsgBox "数据抓取完成!" End Sub
关键逻辑说明
- HTML元素定位:目标页面的收益率表格使用了
views-table类名,通过getElementsByClassName方法可直接定位到表格,避免了复杂的标签层级定位。 - 页面加载等待:
Do While IE.Busy Or IE.ReadyState <> 4确保页面完全加载后再执行后续操作,防止因加载未完成导致的元素找不到问题。 - 数据写入:遍历表格的每一行和单元格,将
innerText(单元格文本内容)写入Excel工作表。
每日自动运行设置
要实现每日自动拉取,可通过Windows任务计划程序配合Excel宏完成:
- 将包含该宏的文件保存为启用宏的工作簿(.xlsm)。
- 打开Windows任务计划程序,创建新任务,设置每日触发时间。
- 操作选项中选择启动程序,程序路径选Excel安装路径(如
C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE),添加参数为/e "你的文件完整路径"。 - 在Excel的
ThisWorkbook对象中添加以下代码,实现打开文件时自动执行宏:
Private Sub Workbook_Open() Call 抓取国债收益率数据 End Sub
注意:运行前需确保Excel启用宏,且Internet Explorer组件可用;若偏好Edge/Chrome内核,可改用Selenium工具,但原生IE方式更适配VBA环境。
内容的提问来源于stack exchange,提问作者Austin Eveland
相关产品推荐
相关产品推荐

