我收到一個錯誤,試圖安排使用包裝類在VBA中異步加載和解析XML文檔。在VBA中捕獲MSXML2.DOMDocument的onreadystatechange錯誤
繼this msdn article和this tutorial已經非常完美了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
我已經通過設置VB_UserMemId = 0製成onLoadComplete
默認方法的代碼,所以它應該被調用時domDoc
火災onreadystatechange
。
然而,當我調用loadXML
Dim dm As DomMonitor
Set dm = New DomMonitor
dm.loadXML txtXMLData
我得到以下運行時錯誤在這行:
domDoc.onreadystatechange = Me
此對象不能擊沉 '的onreadystatechange' 事件。編組對象的IDispatch接口時發生錯誤
我在做什麼錯,是否有一個很好的解決方法?
在此先感謝。
P.S.我重新發布該事件的原因是,我不一定要爲此使用最終用戶的默認方法。然而,就目前情況來看,我甚至沒有達到這個階段。
真的VBA?這不是一種處理事件的VBA方式...... – 2013-03-13 16:13:38
我知道我很高興在這裏使用Java,但我必須堅持使用VBA來解決這個問題。這裏的技巧是當'onreadystatechange'被觸發時,它會隱式地調用被指定爲屬性值的類實例的默認方法。再次,它像XMLHTTP40的魅力一樣。 – Valentin 2013-03-13 16:42:05
一如既往,'MSXML2.DOMDocument'是來自「Microsoft XML,v3.0」的「MSXML2.DOMDocument30」的同義詞。要使用更新的「Microsoft XML,v6.0」,您需要使用'MSXML2.DOMDocument60' – barrowc 2013-03-13 18:56:22