【问题标题】:VBA XML Code/Not Running under Office 2013 and/or work networkVBA XML 代码/不在 Office 2013 和/或工作网络下运行
【发布时间】:2015-12-30 21:24:11
【问题描述】:

我修改了这个现有代码,以从国家气象服务提要中解析出一些 XML 数据。它在我的家用电脑(excel 2007)上运行没有问题。它不能在我的工作电脑/网络上使用 excel 2013 运行。

抛出以下错误。

运行时错误“-2147012894 (80072ee2)”:
自动化错误

有什么见解吗?网络问题还是 2007 到 2013 的兼容性问题?我可以毫无问题地在浏览器中解析提要。

Option Explicit

Sub GetData()


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Variables
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim ws As Worksheet
Set ws = ActiveSheet

Dim Req As New ServerXMLHTTP
Dim Resp As New DOMDocument
Dim i As Integer
Dim Wthr As IXMLDOMNode
Dim geo As IXMLDOMNode
Dim cell As Range
Dim fn As WorksheetFunction
Dim y As Integer
Dim x As Integer


Set fn = Application.WorksheetFunction

Dim Eff, Exp, et, severity As String
Dim splitstring As Variant


ws.Range("A6").CurrentRegion.Clear

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Get Weather Alerts
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Req.Open "GET", "https://alerts.weather.gov/cap/us.atom", False
Req.send
Resp.LoadXML Req.responseText

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Write alerts to worksheet
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
y = 1
For Each Wthr In Resp.getElementsByTagName("entry")
    i = i + 1


    severity = Wthr.SelectNodes("cap:severity")(0).Text
et = Wthr.SelectNodes("cap:event")(0).Text

   For Each geo In Wthr.SelectNodes("cap:geocode")
   splitstring = Split(geo.SelectNodes("value")(0).Text, " ")
   For x = LBound(splitstring) To UBound(splitstring)
   y = y + 1
   ws.Cells(y, 1).Value = splitstring(x)
   ws.Cells(y, 2).Value = severity
     ws.Cells(y, 3).Value = et
   Next x
   Next

Next Wthr

End Sub

【问题讨论】:

  • 哪一行给出了错误?
  • 我不确定。唯一弹出的是一个显示自动化错误的消息框。
  • 使用 F8 单步执行代码并查看在哪一行出现错误
  • 不显示任何错误,它将单步执行代码然后运行。
  • 添加Option Explicit 然后编译。您可能只是缺少 VBA 参考。

标签: xml vba excel xmlhttprequest serverxmlhttp


【解决方案1】:

看来问题是 ServerXMLHTTP。 ServerXMLHTTP 不会自动发现代理设置,我的公司使用代理脚本(我应该包含此信息)。

如果我使用 XMLHTTP,代码就会运行。我相信代码使用 ServerXMLHTTP 是因为缓存问题,所以我不确定是否会遇到其他问题。

修改后的代码

Option Explicit

Sub GetData()


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Variables
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim ws As Worksheet
Set ws = ActiveSheet

Dim Req As New XMLHTTP
Dim Resp As New DOMDocument
Dim i As Integer
Dim Wthr As IXMLDOMNode
Dim geo As IXMLDOMNode
Dim cell As Range
Dim fn As WorksheetFunction
Dim y As Integer
Dim x As Integer


Set fn = Application.WorksheetFunction

Dim Eff, Exp, et, severity As String
Dim splitstring As Variant


ws.Range("A6").CurrentRegion.Clear

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Get Weather Alerts
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Req.Open "GET", "https://alerts.weather.gov/cap/us.atom", False
Req.send
Resp.LoadXML Req.responseText

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Write alerts to worksheet
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
y = 1
For Each Wthr In Resp.getElementsByTagName("entry")
    i = i + 1


    severity = Wthr.SelectNodes("cap:severity")(0).Text
et = Wthr.SelectNodes("cap:event")(0).Text

   For Each geo In Wthr.SelectNodes("cap:geocode")
   splitstring = Split(geo.SelectNodes("value")(0).Text, " ")
   For x = LBound(splitstring) To UBound(splitstring)
   y = y + 1
   ws.Cells(y, 1).Value = splitstring(x)
   ws.Cells(y, 2).Value = severity
     ws.Cells(y, 3).Value = et
   Next x
   Next

Next Wthr

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    相关资源
    最近更新 更多