Outlook VBA中的XmlDocument [英] XmlDocument in Outlook VBA

查看:84
本文介绍了Outlook VBA中的XmlDocument的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将此答案改编为与Outlook VBA一起使用,我相信它在VB.NET中.

I am trying to adapt this answer, which I believe is in VB.NET, for use with Outlook VBA.

我通过更正VBA的语法取得了一些进步,但是我不知道如何在线上解决"Compile error: User-defined type not defined"

I made some progress by getting the syntax corrected for VBA, but I do not know how to resolve "Compile error: User-defined type not defined" on the line

Dim CurrentXML As XmlDocument

工具>引用包括Microsoft XML v6.0,但是在对象浏览器"中搜索XmlDocument不会返回任何结果.

Tool > References includes Microsoft XML, v6.0 but searching for XmlDocument in Object Browser returns no results.

完整的代码如下:

Sub Search2()
' https://stackoverflow.com/a/50145011/18573

Dim sFilter As String
Dim CurrentExplorer As Outlook.Explorer
Set CurrentExplorer = Nothing
Dim CurrentView As Outlook.View
Set CurrentView = Nothing

' ERROR ON THE FOLLOWING LINE
Dim CurrentXML As XmlDocument
Set CurrentXML = New XmlDocument

Dim CurrentFilterNodes, CurrentViewNodes As XmlNodeList
Dim CurrentFilterNode, CurrentParentNode As XmlNode


sFilter = "urn:schemas:httpmail:subject LIKE '%Build Error%'"

CurrentExplorer = TryCast(ExplorerObj, Outlook.Explorer)

If (CurrentExplorer Is Not Nothing) Then
    CurrentView = CurrentExplorer.CurrentView
    If (CurrentView Is Not Nothing) Then

    CurrentXML.LoadXML (CurrentView.xml)
    CurrentFilterNodes = _
        CurrentXML.getElementsByTagName("filter")
    If CurrentFilterNodes.Count > 0 Then
        For y = 0 To CurrentFilterNodes.Count - 1
            CurrentFilterNode = CurrentFilterNodes(y)
            If CurrentFilterNode.HasChildNodes Then
                For i = CurrentFilterNode.ChildNodes.Count - 1 To 0 Step -1
                    CurrentFilterNode.RemoveChild (CurrentFilterNode.ChildNodes(i))
                Next i
            End If
        Next y
        CurrentFilterNode = CurrentFilterNodes(0)
        CurrentFilterNode.appendChild ( _
            CurrentXML.createTextNode(sFilter))
    Else
        CurrentViewNodes = CurrentXML.getElementsByTagName("view")
        If CurrentViewNodes Is Not Nothing Then
            CurrentParentNode = CurrentViewNodes(0)
            CurrentFilterNode = CurrentXML.createElement("filter")
            CurrentParentNode.appendChild (CurrentFilterNode)
            CurrentFilterNode.appendChild (CurrentXML.createTextNode(sFilter))
        End If
    End If
    CurrentView.xml = CurrentXML.InnerXml
    CurrentView.Apply

    Marshal.ReleaseComObject (CurrentView)

End If
End Sub

推荐答案

Outlook的VBA代码应如下所示

The VBA code for Outlook should look like as follows

Option Explicit

Sub Search2()

    ' https://stackoverflow.com/a/50145011/18573
    ' Add reference Microsoft XML, v6.0

    Dim sFilter As String
    Dim oExplorer As Explorer
    Dim oView As View
    Dim oXML As DOMDocument60
    Dim cFilterNodes As IXMLDOMNodeList
    Dim cViewNodes As IXMLDOMNodeList
    Dim oFilterNode As IXMLDOMNode
    Dim oParentNode As IXMLDOMNode
    Dim y As Long
    Dim i As Long

    sFilter = "urn:schemas:httpmail:subject LIKE '%Build Error%'"
    Set oXML = New DOMDocument60
    Set oExplorer = ActiveExplorer

    If Not oExplorer Is Nothing Then
        Set oView = oExplorer.CurrentView
        If Not oView Is Nothing Then
            oXML.LoadXML oView.XML
            Set cFilterNodes = oXML.getElementsByTagName("filter")
            If cFilterNodes.Length > 0 Then
                For y = 0 To cFilterNodes.Length - 1
                    Set oFilterNode = cFilterNodes(y)
                    If oFilterNode.HasChildNodes Then
                        For i = oFilterNode.ChildNodes.Length - 1 To 0 Step -1
                            oFilterNode.RemoveChild oFilterNode.ChildNodes(i)
                        Next
                    End If
                Next
                Set oFilterNode = cFilterNodes(0)
                oFilterNode.appendChild oXML.createTextNode(sFilter)
            Else
                Set cViewNodes = oXML.getElementsByTagName("view")
                If cViewNodes.Length > 0 Then
                    Set oParentNode = cViewNodes(0)
                    Set oFilterNode = oXML.createElement("filter")
                    oParentNode.appendChild oFilterNode
                    oFilterNode.appendChild oXML.createTextNode(sFilter)
                End If
            End If
        Else
            Set cViewNodes = oXML.getElementsByTagName("view")
            If cViewNodes.Length > 0 Then
                Set oParentNode = cViewNodes(0)
                Set oFilterNode = oXML.createElement("filter")
                oParentNode.appendChild oFilterNode
                oFilterNode.appendChild oXML.createTextNode(sFilter)
            End If
        End If
        oView.XML = oXML.XML
        oView.Apply
    End If

End Sub

这篇关于Outlook VBA中的XmlDocument的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆