Vba 将电子邮件从子文件夹移动到硬盘驱动器
我很想知道如何将电子邮件从特定的子文件夹移动到我的硬盘。基本上,我的收件箱有大约20个子文件夹。我希望能够将所有电子邮件从子文件夹1移动到我的硬盘Vba 将电子邮件从子文件夹移动到硬盘驱动器,vba,outlook,outlook-2010,Vba,Outlook,Outlook 2010,我很想知道如何将电子邮件从特定的子文件夹移动到我的硬盘。基本上,我的收件箱有大约20个子文件夹。我希望能够将所有电子邮件从子文件夹1移动到我的硬盘 是否有一个宏专门转到该文件夹并将所有电子邮件移动到我的硬盘上?当然,我确实希望将所有电子邮件保存在.msg中,而不是.txt文件。我希望您可以开发一个VBA宏或加载项来完成工作。请确保开始 MailItem类的方法将Microsoft Outlook项目保存到指定路径并以指定文件类型的格式保存。如果未指定文件类型,则使用MSG格式(.MSG)。要保存
是否有一个宏专门转到该文件夹并将所有电子邮件移动到我的硬盘上?当然,我确实希望将所有电子邮件保存在.msg中,而不是.txt文件。我希望您可以开发一个VBA宏或加载项来完成工作。请确保开始 MailItem类的方法将Microsoft Outlook项目保存到指定路径并以指定文件类型的格式保存。如果未指定文件类型,则使用MSG格式(.MSG)。要保存的文件类型可以是以下OlSaveAsType常量之一:olHTML、olMSG、olRTF、olTemplate、olDoc、olTXT、olVCal、olVCard、olICal或OLMSGUICODE。例如:
Sub SaveAsMSG()
Dim myItem As Outlook.Inspector
Dim objItem As Object
Set myItem = Application.ActiveInspector
If Not TypeName(myItem) = "Nothing" Then
Set objItem = myItem.CurrentItem
strname = objItem.Subject
'Prompt the user for confirmation
Dim strPrompt As String
strPrompt = "Are you sure you want to save the item? " & _
"If a file with the same name already exists, " & _
"it will be overwritten with this copy of the file."
If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then
objItem.SaveAs Environ("HOMEPATH") & "\My Documents\" & strname & ".msg", olMSG
End If
Else
MsgBox "There is no current active inspector."
End If
End Sub
这将允许您选择outlook文件夹和硬盘驱动器文件夹,该文件夹和所有子文件夹中的所有电子邮件都将保存到您的硬盘
Option Explicit
Sub SaveMsgToFolders()
Dim i, j, n As Long
Dim sSubject As String
Dim sName As String
Dim sFile As String
Dim sReceived As String
Dim sPath As String
Dim sFolder As String
Dim sFolderPath As String
Dim SaveFolder As String
Dim Prompt As String
Dim Title As String
Dim iNameSpace As NameSpace
Dim olApp As Outlook.Application
Dim SubFolder As MAPIFolder
Dim olmItem As MailItem
Dim FSO, ChosenFolder As Object
Dim Folders As New Collection
Dim EntryID As New Collection
Dim StoreID As New Collection
Set FSO = CreateObject("Scripting.FileSystemObject")
Set olApp = Outlook.Application
Set iNameSpace = olApp.GetNamespace("MAPI")
Set ChosenFolder = iNameSpace.PickFolder ' // Chose Outlook Folder
If ChosenFolder Is Nothing Then
GoTo ExitSub:
End If
Prompt = "Please enter the path to save all the emails to."
Title = "Folder Specification"
sPath = BrowseForFolder
If sPath = "" Then
GoTo ExitSub:
End If
If Not Right(sPath, 1) = "\" Then
sPath = sPath & "\"
End If
Call GetFolder(Folders, EntryID, StoreID, ChosenFolder)
For i = 1 To Folders.Count
sFolder = StripIllegalChar(Folders(i))
n = InStr(3, sFolder, "\") + 1
sFolder = Mid(sFolder, n, 256)
sFolderPath = sPath & sFolder & "\"
SaveFolder = Left(sFolderPath, Len(sFolderPath) - 1) & "\"
If Not FSO.FolderExists(sFolderPath) Then
FSO.CreateFolder (sFolderPath)
End If
Set SubFolder = olApp.Session.GetFolderFromID(EntryID(i), StoreID(i))
On Error Resume Next
For j = 1 To SubFolder.Items.Count
Set olmItem = SubFolder.Items(j)
sReceived = ArrangedDate(olmItem.ReceivedTime)
sSubject = olmItem.Subject
sName = StripIllegalChar(sSubject)
sFile = SaveFolder & sReceived & "_" & sName & ".msg"
sFile = Left(sFile, 256)
olmItem.SaveAs sFile, 3
Next j
On Error GoTo 0
Next i
ExitSub:
End Sub
Function StripIllegalChar(StrInput)
Dim RegX As Object
Set RegX = CreateObject("vbscript.regexp")
RegX.Pattern = "[\" & Chr(34) & "\!\@\#\$\%\^\&\*\(\)\=\+\|\[\]\{\}\`\'\;\:\<\>\?\/\,]"
RegX.IgnoreCase = True
RegX.Global = True
StripIllegalChar = RegX.Replace(StrInput, "")
ExitFunction:
Set RegX = Nothing
End Function
Function ArrangedDate(sDateInput)
Dim sFullDate As String
Dim sFullTime As String
Dim sAMPM As String
Dim sTime As String
Dim sYear As String
Dim sMonthDay As String
Dim sMonth As String
Dim sDay As String
Dim sDate As String
Dim sDateTime As String
Dim RegX As Object
Set RegX = CreateObject("vbscript.regexp")
If Not Left(sDateInput, 2) = "10" And _
Not Left(sDateInput, 2) = "11" And _
Not Left(sDateInput, 2) = "12" Then
sDateInput = "0" & sDateInput
End If
sFullDate = Left(sDateInput, 10)
If Right(sFullDate, 1) = " " Then
sFullDate = Left(sDateInput, 9)
End If
sFullTime = Replace(sDateInput, sFullDate & " ", "")
If Len(sFullTime) = 10 Then
sFullTime = "0" & sFullTime
End If
sAMPM = Right(sFullTime, 2)
sTime = sAMPM & "-" & Left(sFullTime, 8)
sYear = Right(sFullDate, 4)
sMonthDay = Replace(sFullDate, "/" & sYear, "")
sMonth = Left(sMonthDay, 2)
sDay = Right(sMonthDay, Len(sMonthDay) - 3)
If Len(sDay) = 1 Then
sDay = "0" & sDay
End If
sDate = sYear & "-" & sMonth & "-" & sDay
sDateTime = sDate & "_" & sTime
RegX.Pattern = "[\:\/\ ]"
RegX.IgnoreCase = True
RegX.Global = True
ArrangedDate = RegX.Replace(sDateTime, "-")
ExitFunction:
Set RegX = Nothing
End Function
Sub GetFolder(Folders As Collection, EntryID As Collection, StoreID As Collection, Fld As MAPIFolder)
Dim SubFolder As MAPIFolder
Folders.Add Fld.FolderPath
EntryID.Add Fld.EntryID
StoreID.Add Fld.StoreID
For Each SubFolder In Fld.Folders
GetFolder Folders, EntryID, StoreID, SubFolder
Next SubFolder
ExitSub:
Set SubFolder = Nothing
End Sub
Function BrowseForFolder(Optional OpenAt As String) As String
Dim ShellApp As Object
Set ShellApp = CreateObject("Shell.Application"). _
BrowseForFolder(0, "Please choose a folder", 0, OpenAt)
On Error Resume Next
BrowseForFolder = ShellApp.self.Path
On Error GoTo 0
Select Case Mid(BrowseForFolder, 2, 1)
Case Is = ":"
If Left(BrowseForFolder, 1) = ":" Then
BrowseForFolder = ""
End If
Case Is = "\"
If Not Left(BrowseForFolder, 1) = "\" Then
BrowseForFolder = ""
End If
Case Else
BrowseForFolder = ""
End Select
ExitFunction:
Set ShellApp = Nothing
End Function
选项显式
子存储MsgToFolders()
暗i,j,n等于长
作为字符串的Dim SSObject
像绳子一样模糊
将文件设置为字符串
被认为是字符串
像细绳一样暗淡
作为字符串的Dim-sFolder
将文件夹路径设置为字符串
将文件夹设置为字符串
将提示变暗为字符串
将标题设置为字符串
Dim iNameSpace作为名称空间
Dim olApp作为Outlook.Application
将子文件夹变暗为MAPIFolder
Dim olmItem作为邮件项
Dim FSO,选择文件夹作为对象
将文件夹暗显为新集合
Dim EntryID作为新集合
将StoreID设置为新集合
设置FSO=CreateObject(“Scripting.FileSystemObject”)
设置olApp=Outlook.Application
Set iNameSpace=olApp.GetNamespace(“MAPI”)
设置ChosenFolder=iNameSpace.PickFolder'//选择Outlook文件夹
如果ChosenFolder什么都不是,那么
后藤进出口银行:
如果结束
Prompt=“请输入保存所有电子邮件的路径。”
Title=“文件夹规范”
sPath=浏览文件夹
如果sPath=”“,则
后藤进出口银行:
如果结束
如果不正确(sPath,1)=“\”则
sPath=sPath&“\”
如果结束
调用GetFolder(文件夹、EntryID、StoreID、ChosenFolder)
对于i=1到文件夹。计数
sFolder=StripIllegalChar(文件夹(i))
n=仪表(3,S文件夹,“\”)+1
sFolder=Mid(sFolder,n,256)
sFolderPath=sPath&sFolder&“\”
SaveFolder=Left(sFolderPath,Len(sFolderPath)-1)和“\”
如果不存在FSO.FolderExists(sFolderPath),则
FSO.CreateFolder(sFolderPath)
如果结束
Set SubFolder=olApp.Session.GetFolderFromID(EntryID(i)、StoreID(i))
出错时继续下一步
对于j=1到子文件夹.Items.Count
Set olmItem=SubFolder.Items(j)
sReceived=ArrangedDate(olmItem.ReceivedTime)
sSubject=olmItem.Subject
sName=StripIllegalChar(SSObject)
sFile=SaveFolder&sReceived&“\u”&sName&“.msg”
sFile=左(sFile,256)
olmItem.SaveAs文件,3
下一个j
错误转到0
接下来我
进出口银行:
端接头
函数StripIllegalChar(StrInput)
Dim RegX作为对象
设置RegX=CreateObject(“vbscript.regexp”)
RegX.Pattern=“[\”&Chr(34)和“\!\@\\\\\$\%\^\&\*\(\)\=\+\\\\\[\]\\\\\\\\\\\\\\\\\\?\/\,]”
RegX.IgnoreCase=True
RegX.Global=True
StripIllegalChar=RegX.Replace(StrInput,“”)
退出功能:
Set RegX=Nothing
端函数
函数排列数据(sDateInput)
将sFullDate设置为字符串
以字符串形式显示时间
将sAMPM设置为字符串
像线一样暗的时间
朦胧如弦
朦胧的烟雾如弦
朦胧的烟雾如细绳
把星期四当作绳子
将sDate设置为字符串
将sDateTime设置为字符串
Dim RegX作为对象
设置RegX=CreateObject(“vbscript.regexp”)
如果未离开(sDateInput,2)=“10”和_
非左(sDateInput,2)=“11”和_
不左(sDateInput,2)=“12”然后
sDateInput=“0”&sDateInput
如果结束
sFullDate=左侧(sDateInput,10)
如果正确(sFullDate,1)=“”,则
sFullDate=左(sDateInput,9)
如果结束
sFullTime=Replace(sDateInput,sFullDate&“”,“”)
如果Len(sFullTime)=10,则
sFullTime=“0”&sFullTime
如果结束
sAMPM=正确(sFullTime,2)
TIME=sAMPM&“-”&左(sFullTime,8)
sYear=右侧(sFullDate,4)
sMonthDay=替换(sFullDate,“/”&sYear,“”)
斯蒙特=左(斯蒙特日,2)
星期四=右侧(星期一,Len(星期一)-3)
如果Len(sDay)=1,则
sDay=“0”和sDay
如果结束
sDate=sYear&“-”&sMonth&“-”&sDay
sDateTime=sDate&“&”时间(&S)
RegX.Pattern=“[\:\/\]”
RegX.IgnoreCase=True
RegX.Global=True
ArrangedDate=RegX.Replace(sDateTime,“-”)
退出功能:
Set RegX=Nothing
端函数
子GetFolder(文件夹作为集合,EntryID作为集合,StoreID作为集合,Fld作为MAPIFolder)
将子文件夹变暗为MAPIFolder
文件夹。添加Fld.FolderPath
EntryID.Add Fld.EntryID
StoreID.Add Fld.StoreID
对于Fld.文件夹中的每个子文件夹
GetFolder文件夹、EntryID、StoreID、子文件夹
下一个子文件夹
进出口银行:
设置子文件夹=无
端接头
函数BrowseForFolder(可选OpenAt作为字符串)作为字符串
将ShellApp设置为对象
设置ShellApp=CreateObject(“Shell.Application”)_
BrowseForFolder(0,“请选择文件夹”,0,OpenAt)
出错时继续下一步
BrowseForFolder=ShellApp.self.Path
错误转到0
选择案例Mid(浏览文件夹,2,1)
Case Is=“:”
如果左(BrowseForFolder,1)=“:”则
BrowseForFolder=“”
如果结束
Case Is=“\”
如果没有留下(BrowseForFolder,1)=“\”则
BrowseForFolder=“”
如果结束
其他情况
BrowseForFolder=“”
结束选择
退出功能:
设置ShellApp=Nothing
端函数
使用此宏,我将如何着手设置rul