Vba 用于从outlook保存电子邮件的宏-获取发件人';她姓什么

Vba 用于从outlook保存电子邮件的宏-获取发件人';她姓什么,vba,outlook,Vba,Outlook,我正在尝试使用Outlook宏,它可以简单地将电子邮件保存为带有特定格式的.msg文件,以便存档 与这里的另一个用户类似,我使用下面的代码,生成了文件格式“yymdd_sender_title.msg”,这正是我想要的,只是我需要只获取发件人的姓,而不是全名 非常感谢您的帮助 多谢各位 Option Explicit Public Sub SaveMessageAsMsg() Dim oMail As Outlook.MailItem Dim objItem As Object Dim sPat

我正在尝试使用Outlook宏,它可以简单地将电子邮件保存为带有特定格式的.msg文件,以便存档

与这里的另一个用户类似,我使用下面的代码,生成了文件格式“yymdd_sender_title.msg”,这正是我想要的,只是我需要只获取发件人的姓,而不是全名

非常感谢您的帮助

多谢各位

Option Explicit
Public Sub SaveMessageAsMsg()
Dim oMail As Outlook.MailItem
Dim objItem As Object
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
Dim sSenderName As String

enviro = CStr(Environ("USERPROFILE"))
For Each objItem In ActiveExplorer.Selection
If objItem.MessageClass = "IPM.Note" Then
Set oMail = objItem

sName = oMail.subject
ReplaceCharsForFileName sName, ""


sSenderName = oMail.SenderName
dtDate = oMail.ReceivedTime
sName = Format(dtDate, "yymmdd", vbUseSystemDayOfWeek, _
vbUseSystem) & "_" & sSenderName & "_" & sName & ".msg"

sPath = enviro & "\Documents\"
Debug.Print sPath & sName
oMail.SaveAs sPath & sName, olMSG

End If
Next

End Sub

Private Sub ReplaceCharsForFileName(sName As String, _
sChr As String _
)
sName = Replace(sName, "'", sChr)
sName = Replace(sName, "*", sChr)
sName = Replace(sName, "/", sChr)
sName = Replace(sName, "\", sChr)
sName = Replace(sName, ":", sChr)
sName = Replace(sName, "?", sChr)
sName = Replace(sName, Chr(34), sChr)
sName = Replace(sName, "<", sChr)
sName = Replace(sName, ">", sChr)
sName = Replace(sName, "|", sChr)
End Sub
选项显式
公共子存储消息asmsg()
将oMail设置为Outlook.MailItem
作为对象的Dim objItem
像细绳一样暗淡
Dim dtDate作为日期
像绳子一样模糊
Dim enviro As字符串
将sSenderName设置为字符串
enviro=CStr(环境(“用户档案”))
对于ActiveExplorer.Selection中的每个对象项
如果objItem.MessageClass=“IPM.Note”,则
设置oMail=objItem
sName=oMail.subject
ReplaceCharsForFileName sName“
sSenderName=oMail.SenderName
dtDate=oMail.ReceivedTime
sName=格式(dtDate,“yymmdd”,vbUseSystemDayOfWeek_
vbUseSystem)和“sSenderName&“sSenderName&”&sName&“.msg”
sPath=enviro&“\Documents\”
调试。打印sPath和sName
oMail.SaveAs sPath&sName,olMSG
如果结束
下一个
端接头
Private Sub-ReplaceCharsForFileName(sName作为字符串_
弦_
)
sName=替换(sName,“”,sChr)
sName=替换(sName,“*”,sChr)
sName=替换(sName,“/”,sChr)
sName=替换(sName,\,sChr)
sName=替换(sName,“:”,sChr)
sName=替换(sName,“?”,sChr)
sName=替换(sName,Chr(34),sChr)
sName=替换(sName,“,sChr)
sName=替换(sName,“|”,sChr)
端接头

如果地址条目的详细信息来自您所在的同一台Exchange服务器(AddressEntry.GetExchnageUserUser()),则只能检索地址条目的详细信息。否则,显示名称就是您得到的全部内容

如果地址条目的详细信息来自您所在的同一台Exchange服务器(AddressEntry.GetExchnageUserUser()),则只能检索该地址条目的详细信息。否则,显示名称就是您得到的全部内容

尝试使用

范例

    sSenderName = oMail.SenderName

    sSenderName = Split(sSenderName, " ")(1) 
然后是代码的其余部分

尝试使用

范例

    sSenderName = oMail.SenderName

    sSenderName = Split(sSenderName, " ")(1) 
然后是代码的其余部分


我不太明白你的回答。我对这种东西是完全陌生的,情况如下:我办公室的人把一堆又一堆的邮件保存为.msg文件,然后手工格式化。我在很多邮件上试用了该脚本,它似乎工作得很好,只是我希望它能包含发件人的名字。那么它们是否来自其他Exchange邮箱?请尝试objItem.Sender.GetExchangeUser.LastName。准备好处理objItem.Sender和objItem.Sender.GetExchangeUser返回的错误/空值。我不太理解您的答复。我对这种东西是完全陌生的,情况如下:我办公室的人把一堆又一堆的邮件保存为.msg文件,然后手工格式化。我在很多邮件上试用了该脚本,它似乎工作得很好,只是我希望它能包含发件人的名字。那么它们是否来自其他Exchange邮箱?请尝试objItem.Sender.GetExchangeUser.LastName。准备好处理objItem.Sender和objItem.Sender.GetExchangeUser返回的错误/空值。这是@HansUp的一个很好的示例,谢谢您的输入。我开始意识到可能有一个更根本的问题:我收件箱中的人的名字是“按原样”写的,这取决于他们如何设置他们的邮件帐户,也就是说,有时姓氏排在第一位,有时不排在第一位(Mike Johnson vs.Johnson,Mike)——还有一些更罕见的格式。我找到了一个解决方法,因此对于这两种常见情况,现在有两种不同的脚本要运行,即,您必须手动选择哪些邮件的格式为姓氏/姓氏,哪些邮件的格式为姓氏/姓氏。我想这是最好的:)这是来自@HansUp的一个很好的例子,谢谢你的投入。我开始意识到可能有一个更根本的问题:我收件箱中的人的名字是“按原样”写的,这取决于他们如何设置他们的邮件帐户,也就是说,有时姓氏排在第一位,有时不排在第一位(Mike Johnson vs.Johnson,Mike)——还有一些更罕见的格式。我找到了一个解决方法,因此对于这两种常见情况,现在有两种不同的脚本要运行,即,您必须手动选择哪些邮件的格式为姓氏/姓氏,哪些邮件的格式为姓氏/姓氏。我想这是最好的:)