我目前有两个模块可以按照我在谷歌发现的点点滴滴创建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
答案 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