我用VBA为Excel2010编写了一个宏,用于从返回XML的API中检索数据。我自愿这样做是为了帮助我的妻子和她的同事做大量的体力劳动。因此,宏用在企业环境中,安全设置不在我的控制范围内,而且我从未在企业环境中工作过,我也不知道这种可能性是什么。
然而,it人员表示,他们愿意提供帮助,但不知道如何修复它。因此,我想知道在座的任何人是否可以指出正确的方向,如何让它在所有PC上工作。
代码如下所示,它可以在我妻子所有同事和我自己的家用电脑上运行。它也可以在一些工作PC上工作,但在一些不能工作的PC上工作。objDoc.Load
部件上的代码失败,它显示了我的错误消息:
MsgBox ("There was an error when connecting to the API)
我想知道是否有企业设置或个人Excel设置阻止访问宏中的外部URL。我不会感到惊讶,因为这将是很好的安全性,但我想也应该有一种方法来将API的url列入白名单?
有没有人知道如何解决这个问题?在代码中,在Excel2010设置中,或者在我不知道的任何Office企业设置中?
Dim strUrl as String
Dim objDoc As Object
Set objDoc = CreateObject("MSXML2.DOMDocument")
objDoc.async = False
strUrl = {api URL}
If objDoc.Load(strUrl) Then
'it worked!
Else
MsgBox ("There was an error when connecting to the API)
Exit Function
End If
发布于 2018-06-07 04:57:14
通过缩小误差域来实现方法
显然,使用后期绑定的代码会被执行,但会显示一条错误消息。通常,XML代码包含不可读的字符实体(例如,与符号&
)。通过将代码中的完整Else
块替换为以下语句,可以缩小错误字段的范围:
Dim xPE As Object ' Set xPE = CreateObject("MSXML2.IXMLDOMParseError")
Dim strErrText As String
Set xPE = objDoc.parseError
With xPE
strErrText = "Load error " & .ErrorCode & " xml file " & vbCrLf & _
Replace(.URL, "file:///", "") & vbCrLf & vbCrLf & _
xPE.reason & _
"Source Text: " & .srcText & vbCrLf & vbCrLf & _
"Line No.: " & .Line & vbCrLf & _
"Line Pos.: " & .linepos & vbCrLf & _
"File Pos.: " & .filepos & vbCrLf & vbCrLf
End With
MsgBox strErrText, vbExclamation
Set xPE = Nothing
Exit Function
附加提示
如果使用Set objDoc = CreateObject("MSXML2.DOMDocument")
将objDoc
对象设置为内存,通常会得到较旧的版本(3.0),因此在大多数情况下,最好显式使用Set objDoc = CreateObject("MSXML2.DOMDocument.6.0")
来获取最新的6.0版本。
https://stackoverflow.com/questions/50721158
复制相似问题