Outlook VBA中的XML文档
我正在尝试将Outlook VBA中的XML文档,vba,outlook,Vba,Outlook,我正在尝试将VB.NET中的内容改编为与outlookvba一起使用 通过纠正VBA的语法,我取得了一些进展,但我不知道如何解决行中的“编译错误:未定义用户定义类型” Dim CurrentXML As XmlDocument 工具>引用包括Microsoft XML v6.0,但在对象浏览器中搜索XmlDocument不会返回任何结果 完整代码如下: Sub Search2() ' https://stackoverflow.com/a/50145011/18573 Dim sFilter
VB.NET
中的内容改编为与outlookvba
一起使用
通过纠正VBA的语法,我取得了一些进展,但我不知道如何解决行中的“编译错误:未定义用户定义类型”
Dim CurrentXML As XmlDocument
工具>引用包括Microsoft XML v6.0,但在对象浏览器中搜索XmlDocument不会返回任何结果
完整代码如下:
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代码应如下所示
选项显式
次级搜索2()
' https://stackoverflow.com/a/50145011/18573
'添加引用Microsoft XML,v6.0
作为字符串的Dim sFilter
Dim oExplorer作为资源管理器
昏暗的景色
Dim-oXML作为DOMDocument60
作为IXMLDOMNodeList的Dim cFilterNodes
作为IXMLDOMNodeList的Dim cViewNodes
作为IXMLDOMNode的筛选器节点的Dim
Dim oParentNode作为IXMLDOMNode
长得一样暗
我想我会坚持多久
sFilter=“urn:schemas:httpmail:subject类似于“%builderror%”
设置oXML=newDOMDocument60
设置oExplorer=ActiveExplorer
如果不是,那么Explorer什么都不是
设置oView=oExplorer.CurrentView
如果不是,oView什么都不是
oXML.LoadXML oView.XML
设置cFilterNodes=oXML.getElementsByTagName(“过滤器”)
如果cFilterNodes.Length>0,则
对于y=0到cFilterNodes.Length-1
过滤器节点集=过滤器节点(y)
如果oFilterNode.HasChildNodes,则
对于i=oFilterNode.ChildNodes.Length-1到0步骤-1
oFilterNode.RemoveChild of ilternode.ChildNodes(i)
下一个
如果结束
下一个
过滤器节点集=过滤器节点(0)
oFilterNode.appendChild oXML.createTextNode(sFilter)
其他的
设置cViewNodes=oXML.getElementsByTagName(“视图”)
如果cViewNodes.Length>0,则
设置oParentNode=cViewNodes(0)
过滤器节点集=oXML.createElement(“过滤器”)
oParentNode.AppendFilterNode的子级
oFilterNode.appendChild oXML.createTextNode(sFilter)
如果结束
如果结束
其他的
设置cViewNodes=oXML.getElementsByTagName(“视图”)
如果cViewNodes.Length>0,则
设置oParentNode=cViewNodes(0)
过滤器节点集=oXML.createElement(“过滤器”)
oParentNode.AppendFilterNode的子级
oFilterNode.appendChild oXML.createTextNode(sFilter)
如果结束
如果结束
oView.XML=oXML.XML
oView.申请
如果结束
端接头
尝试XmlDocument
->DOMDocument
,XmlNodeList
->IXMLDOMNodeList
,XmlNode
。还要注意在VBA中对Dim
语句使用逗号。或者不要在这里使用逗号。谢谢@omegastripes,还有关于Dim语句中逗号的额外建议。我不知道这件事,肯定会被它绊倒的。如果您可以将您的评论转换为答案,那么我可以接受。还有许多其他问题,如TryCast
,非空
,封送
,以及缺少设置
关键字。还有什么是ExplorerObj
?非常感谢您这么做。我不得不将DOMDocument
更改为DOMDocument60
。这很容易,但还有另一个问题:在设置cFilterNodes=oXML.getElementsByTagName(“过滤器”)之后,长度为空,因为我没有设置任何过滤器。因此,我按照您的示例添加了一个节点,就像您在没有当前视图时所做的那样。事实上,我不确定CurrentView何时为null,但这并不重要。