我在尝试使用包装类在 VBA 中安排异步加载和解析 XML 文档时遇到错误。
按照这篇 msdn 文章和本教程中描述的想法,这些想法对于 MSXML2.XMLHTTP40.send 方法的异步处理非常有效,我尝试对 DOMDocument.loadXML 做类似的事情。
这是包装类的代码DOMMonitor
Private domDoc As MSXML2.DOMDocument
Public Event onXmlLoadComplete(d As MSXML2.DOMDocument)
Public Sub loadXML(XmlFilePath As String)
Set domDoc = CreateObject("MSXML2.DOMDocument")
domDoc.async = True
domDoc.onreadystatechange = Me ' error occurs here
domDoc.Load XmlFilePath
End Sub
Public Sub onLoadComplete()
If domDoc.readyState = "4" Then
RaiseEvent onXmlLoadComplete(domDoc)
End If
End Sub
我onLoadComplete
通过设置 VB_UserMemId = 0 设置了默认方法,因此应该在domDoc
fires时调用它onreadystatechange
。
但是,当我调用loadXML
Dim dm As DomMonitor
Set dm = New DomMonitor
dm.loadXML txtXMLData
我在这一行中收到以下运行时错误:
domDoc.onreadystatechange = Me
此对象无法接收“onreadystatechange”事件。编组对象的 IDispatch 接口时发生错误
我做错了什么,这里有一个好的解决方法吗?
提前致谢。
PS我重新发布事件的原因是我不一定要为此使用最终订阅者的默认方法。然而,就目前的情况来看,我什至没有达到那个阶段。