如何在VBA

时间:2015-12-30 15:26:56

标签: xml vba outlook

我目前有两个模块可以按照我在谷歌发现的点点滴滴创建VBA中的要求。

我想将它们合并到Outlook可以处理的一个过程中。

第一个模块保存带有outlook的日期扩展名的XML电子邮件附件,并由outlook规则激活。

第二个使用getElementsByTagName显示位于我的硬盘驱动器中的文件中的序列号。

有没有办法将这两者合并为一个自动化流程,从电子邮件中保存XML附件并使用xml附件中的序列号元素标记名称重命名?

下面列出了每种代码。

第1单元:

Public Sub saveXMLtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim dateFormat
Dim saveFolder As String
saveFolder = "C:\temp\xml folder\"
dateFormat = Format(Now, "mm-dd-yyyy H-mm-ss")

 For Each objAtt In itm.Attachments
    If InStr(objAtt.DisplayName, ".xml") Then
     objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName & dateFormat & ".xml"

      End If
      Set objAtt = Nothing
      Pause 1
      Next
End Sub

第2单元:

Sub GetSN()

Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.SetProperty "SelectionLanguage", "XPath"
xmlDoc.async = False
xmlDoc.Load ("C:\Temp\savetest.xml")

Set nodeXML = xmlDoc.getElementsByTagName("SerialNumber")
For i = 0 To nodeXML.Length - 1
MsgBox nodeXML(i).Text

Next
End Sub

1 个答案:

答案 0 :(得分:0)

你基本上拥有了你所需要的一切,并且实际上可以将你的代码组合成一个例程并进行一些细微的改动。

GetSN例程中,您当前正在消息框MsgBox nodeXML(i).Text中显示序列号。

您应该将其分配给变量,以便以后轻松引用它,而不是这样做。

serialNumber = nodeXML(i).Text

现在在'saveXMLtoDisk'中只需在保存文件时包含此内容。

objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName & " " & serialNumber & " " & dateFormat & ".xml"

用最简单的术语,将GetSN的内容放在现有saveXMLtoDisk例程的顶部,然后进行上述更改。

编辑以回复comment有关从附加的XML文件中提取序列号的信息。

我认为最简单的方法是在PC上某处保存附加XML文件的临时副本,然后在致电xmlDoc.Load时参考。一旦捕获了序列号,就可以删除此临时副本并使用格式正确的名称保存永久副本。我在下面复制了一个完整的代码示例(与我更改原始代码的代码一致的注释)。

Public Sub saveXMLtoDisk(itm As Outlook.MailItem)
    Dim objAtt As Outlook.Attachment
    Dim dateFormat As String
    Dim saveFolder As String
    saveFolder = "C:\temp\xml folder\" 
    dateFormat = Format(Now, "mm-dd-yyyy H-mm-ss")

     For Each objAtt In itm.Attachments
        If InStr(objAtt.DisplayName, ".xml") Then

            ' Save the XML to a temporary location
            Dim tempXML As String: tempXML = "C:\temp\attachment.xml"
            Dim serialNumber As String

            ' Start of GetSN Code
            Set xmlDoc = CreateObject("Microsoft.XMLDOM")
            xmlDoc.SetProperty "SelectionLanguage", "XPath"
            xmlDoc.async = False
            ' Open the temporary copy of the XML attachment that has been saved.
            xmlDoc.Load (tempXML)

            Set nodeXML = xmlDoc.getElementsByTagName("SerialNumber")
            For i = 0 To nodeXML.Length - 1
                serialNumber = nodeXML(i).Text
            Next

            Set nodeXML = Nothing
            Set xmlDoc = Nothing
            ' End of GetSN Code

            objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName & " " & serialNumber & " " & dateFormat & ".xml"

            ' Remove the temporary copy of the XML attachment
            Kill tempXML

        End If

        Set objAtt = Nothing
        Pause 1
    Next
End Sub