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

如何将网页抓取的信息写入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:

  1. 打开VBA编辑器(Alt+F11)
  2. 点击菜单栏的「工具」→「引用」
  3. 找到并勾选「Microsoft HTML Object Library」,点击确定

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:32:49