如何将文件名的长度限制在允许的最大值内



当我试图向30个收件人和60个收件人发送电子邮件时,会出现错误:

运行时错误'-2147286788(800300fc(

Item.SaveAs sPath & sName, olMSG就是问题所在。

代码中有注释Sname可能需要限制字符长度

我认为代码试图根据电子邮件的主题、时间和日期以及收件人的电子邮件名称来创建文件名,但文件名中的字符太多。

完整的代码如下。它在ThisOutlookSession模块中。

Option Explicit
Private WithEvents Items As Outlook.Items
Private WithEvents SentItems As Outlook.Items
Private Sub Application_Startup()
Dim Ns As Outlook.NameSpace
Set Ns = Application.GetNamespace("MAPI")
Set Items = Ns.GetDefaultFolder(olFolderInbox).Items
Set SentItems = Ns.GetDefaultFolder(olFolderSentMail).Items
End Sub
Private Sub Items_ItemAdd(ByVal Item As Object)
If TypeOf Item Is Outlook.MailItem Then
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
enviro = CStr(Environ("USERPROFILE"))
sName = Item.Subject & "-" & Item.SenderName
ReplaceCharsForFileName sName, "_"
dtDate = Item.ReceivedTime
sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
vbUseSystem) & Format(dtDate, "-hhnnss", _
vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"
sPath = enviro & "EmailInbox"
Debug.Print sPath & sName
Item.SaveAs sPath & sName, olMSG
End If
End Sub
Private Sub SentItems_ItemAdd(ByVal Item As Object)
If TypeOf Item Is Outlook.MailItem Then
Dim sPath As String
Dim dtDate As Date
Dim sName As String
Dim enviro As String
enviro = CStr(Environ("USERPROFILE"))
'Save name is the email subject plus who the email was sent to
sName = Item.Subject & "-" & Item.To 'might need restricting character length
ReplaceCharsForFileName sName, "_"
dtDate = Item.ReceivedTime
sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
vbUseSystem) & Format(dtDate, "-hhnnss", _
vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"
sPath = enviro & "EmailSent Items"
Debug.Print sPath & sName
Item.SaveAs sPath & sName, olMSG
End If
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, Chr(34), sChr)
sName = Replace(sName, "<", sChr)
sName = Replace(sName, ">", sChr)
sName = Replace(sName, "|", sChr)
End Sub

为了简单起见,假设限制为250个字符。

按日期长度减少:

Len(Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
vbUseSystem) & Format(dtDate, "-hhnnss", _
vbUseSystemDayOfWeek, vbUseSystem))

按路径长度减少:

Len(enviro & "EmailSent Items")

说上面的两个数字加上100。剩下150个字符。

一个简单的解决方案是:

'Save name is the email subject plus who the email was sent to
'sName = Item.Subject & "-" & Item.To
sName = left(Item.Subject, 50)  & "-" & left(Item.To, 99)

一个更通用的解决方案将包括根据其他人的不同enviro长度动态计算50和99。

最新更新