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

VBA修改URL自动匹配当日日期及运行报错问题求助

VBA自动拉取数据问题解决方案

1. URL自动更新为当日日期的实现方法

URL中的%2F是编码后的/符号,你只需要生成符合yyyy%2Fmm%2Fdd格式的当日日期字符串,替换原有URL中的固定日期部分即可,代码如下:

' 生成当日日期的URL编码格式
Dim todayStr As String
todayStr = Format(Date, "yyyy""%2F""mm""%2F""dd")

' 拼接得到动态URL
Dim website As String
website = "https://fclm-portal.amazon.com/reports/processPathRollup?reportFormat=HTML&warehouseId=&maxIntradayDays=1&spanType=Intraday&startDateIntraday=" & _
            todayStr & "&startHourIntraday=7&startMinuteIntraday=30&endDateIntraday=" & _
            todayStr & "&endHourIntraday=18&endMinuteIntraday=0&_adjustPlanHours=on&_hideEmptyLineItems=on&employmentType=AllEmployees"

如果需要自定义非当日的日期,把Date换成你指定的日期变量即可。

2. "Object variable or with block variable not set"报错解决

这个报错是因为你代码中调用的对象未正确初始化或者不存在,按以下步骤排查修复:

  • 首先补全HTML对象的初始化声明
    你现有代码没有初始化html对象,需要提前声明创建,推荐使用后期绑定无需额外引用库:
Dim html As Object
Set html = CreateObject("htmlfile")

如果要使用前期绑定,可在VBA编辑器的「工具-引用」中勾选「Microsoft HTML Object Library」,再声明Dim html As New HTMLDocument。

  • 修正请求语句的语法错误
    你现有代码中request.setRequestHeader和request.send写在了同一行,属于语法错误,要拆分为两行:
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
    ' 查找目标元素集合
    Dim targetElements As Object
    Set targetElements = html.getElementsByClassName("actualVolume numeric")
    ' 判断索引是否越界
    If targetElements.Length > 172 Then
        ObVolume = targetElements.Item(172).innerText
    Else
        MsgBox "未找到对应索引的目标元素,当前元素总数为:" & targetElements.Length
    End If
Else
    MsgBox "请求失败,状态码:" & request.Status
End If

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:05