如何将网页抓取的信息写入Excel单元格?附VBA抓取示例代码
将抓取的EURUSD汇率写入Excel单元格的VBA实现
你已经完成了最核心的网页抓取部分,要把获取到的price值写入Excel单元格其实非常直观,下面给你几种实用的实现方式,还补充了一些让代码更稳健的细节:
1. 基础写法:写入指定单元格
在获取到price值之后,直接通过Excel的Range对象赋值即可。比如要写入当前工作表的A1单元格,只需添加一行代码:
' 写入当前活动工作表的A1单元格 Range("A1").Value = price
如果要指定具体工作表(比如Sheet2的B2单元格),明确写出工作表名称即可:
Sheets("Sheet2").Range("B2").Value = price
2. 进阶写法:同时记录抓取时间
对于汇率数据来说,记录对应的抓取时间会让数据更有价值。你可以把时间写入相邻单元格,并设置合适的格式:
' 写入汇率到A1,抓取时间到B1 Range("A1").Value = price Range("B1").Value = Now() ' 给时间单元格设置清晰的格式 Range("B1").NumberFormat = "yyyy-mm-dd hh:mm:ss"
3. 稳健写法:添加错误处理
网页结构可能会变更,或者网络问题导致抓取失败,加入错误处理能避免代码崩溃,还能给出明确的提示:
' 开启错误捕获 On Error Resume Next price = html.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").Item(0).innerText ' 关闭错误捕获 On Error GoTo 0 ' 判断是否成功获取到数据 If IsEmpty(price) Then Range("A1").Value = "抓取失败:未找到汇率元素" Else Range("A1").Value = price Range("B1").Value = Now() Range("B1").NumberFormat = "yyyy-mm-dd hh:mm:ss" End If
完整可运行代码
把以上内容整合后,完整的代码如下(还加入了请求状态判断,进一步提升稳定性):
Sub GetEURUSDRate() Dim request As Object Dim response As String Dim html As New HTMLDocument Dim website As String Dim price As Variant website = "https://finance.yahoo.com/quote/EURUSD=X?p=EURUSD=X" Set request = CreateObject("MSXML2.XMLHTTP") On Error Resume Next request.Open "GET", website, False request.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" request.send ' 检查请求是否成功 If request.Status = 200 Then response = StrConv(request.responseBody, vbUnicode) html.body.innerHTML = response price = html.getElementsByClassName("Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)").Item(0).innerText On Error GoTo 0 If IsEmpty(price) Then Range("A1").Value = "无法获取汇率数据:元素未找到" Else ' 写入汇率和对应时间 Range("A1").Value = price Range("B1").Value = Now() Range("B1").NumberFormat = "yyyy-mm-dd hh:mm:ss" End If Else Range("A1").Value = "请求失败,状态码:" & request.Status End If ' 释放对象内存 Set request = Nothing Set html = Nothing End Sub
注意事项
运行前请确保在VBA编辑器中引用了Microsoft HTML Object Library:
- 打开VBA编辑器(Alt+F11)
- 点击菜单栏的「工具」→「引用」
- 找到并勾选「Microsoft HTML Object Library」,点击确定
内容的提问来源于stack exchange,提问作者Tania Allegra
相关产品推荐
相关产品推荐

