ラッパー クラスを使用して、VBA で XML ドキュメントの非同期読み込みと解析を調整しようとすると、エラーが発生します。
MSXML2.XMLHTTP40.send メソッドの非同期処理で完全に機能したこの msdn 記事とこのチュートリアルで説明されているアイデアに従って、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 インターフェイスのマーシャリング中にエラーが発生しました
私は何を間違っていますか?ここで良い回避策はありますか?
前もって感謝します。
PS イベントを再公開する理由は、この目的のために最終サブスクライバーのデフォルトのメソッドを必ずしも使用したくないからです。しかし、現状ではその段階にすら達していません。