VBA 取代 Excel 2010 及更早版本中的 WebService 和 FilterXML

VBA 取代 Excel 2010 及更早版本中的 WebService 和 FilterXML

我在 Excel 2016 中创建了一个 Excel 电子表格,该电子表格使用 WebService 和 FilterXML 公式与 Bing 的 API 交互并从中拖回数据。这些公式在 Excel 2016 中运行良好,但当在旧版本的 Excel 2010 等中加载电子表格时,它会生成 #Name? 错误并且不会返回结果。我相信这是因为 Webservice 和 FilterXMl 公式与旧版本的 Excel 不兼容。

基本上,代码应该:

从 Sheet2 工作表中的单元格 C2 中获取 API 密钥 从单元格 C25 中获取起始位置(这是一个变量,用户可以更改) 从单元格 D25 中获取终止位置(这是一个变量,用户可以更改) 从单元格 C27 中获取交通方式(这是一个变量,用户可以更改) URL 应显示在 C29 中(当前代码为:=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(distance.url,"$1",C25),"$2",D25),"$3",travel.mode),"$k",bingmaps.key)

这将在单元格 C31 中生成一个响应 - 即原始输出(这是目前正在使用 WebService 的地方)。代码为:=WEBSERVICE(C29) 这将在单元格 C32 中生成一个状态代码 - 即 200(这是目前正在使用 =FILTERXML(C31,"//StatusCode[1]" 的地方)

然后在单元格 C34 中使用 =FILTERXML(C31,"//TravelDistance[1]") 获取从 C31 出发的行程距离 然后在单元格 C35 中使用 =FILTERXML(C31,"//TravelDuration[1]") 显示从 C31 出发的持续时间(分钟)

谢谢。

答案1

哦,天哪,我猜升级旧客户端可能比尝试在旧版本的 Excel 中可靠地实现这一点更容易。我记得几年前在 VBA 中使用过 IE 对象。不是很稳定,但当时我正在加载整个网站,而不仅仅是一个 http get 调用。

请在这里查看更多深入信息。https://stackoverflow.com/questions/3521876/calling-web-service-using-vba-code-in-excel-2010

我最近使用的一个更简单的技巧是将网络数据直接拉入 Excel 作为网络数据源(数据 > 来自网络)。我将 Twitter 源的整个 html 响应直接转储到空白表中,然后使用搜索和查找公式来查找我想要的数据行和列。我想提醒一下,我甚至可以在数据刷新后自动运行“文本到列”向导。这一切都是在没有 VBA 的情况下完成的,因此不需要 xlsm 文件,人们也不必担心启用宏。

附言:我现在尝试在当前计算机(Windows 10、Office 2016)上打开同一张表格,而不是在旧计算机(Windows 7、Office 2010 或 13?)上打开。它抱怨浏览器中禁用了 JavaScript(我假设它在内部仍然是 Internet Explorer 对象,而不是 Edge)。

相关内容