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
相关产品推荐
相关产品推荐

