Vba 将电子邮件从子文件夹移动到硬盘驱动器

Vba 将电子邮件从子文件夹移动到硬盘驱动器,vba,outlook,outlook-2010,Vba,Outlook,Outlook 2010,我很想知道如何将电子邮件从特定的子文件夹移动到我的硬盘。基本上,我的收件箱有大约20个子文件夹。我希望能够将所有电子邮件从子文件夹1移动到我的硬盘 是否有一个宏专门转到该文件夹并将所有电子邮件移动到我的硬盘上?当然,我确实希望将所有电子邮件保存在.msg中,而不是.txt文件。我希望您可以开发一个VBA宏或加载项来完成工作。请确保开始 MailItem类的方法将Microsoft Outlook项目保存到指定路径并以指定文件类型的格式保存。如果未指定文件类型,则使用MSG格式(.MSG)。要保存

我很想知道如何将电子邮件从特定的子文件夹移动到我的硬盘。基本上,我的收件箱有大约20个子文件夹。我希望能够将所有电子邮件从子文件夹1移动到我的硬盘


是否有一个宏专门转到该文件夹并将所有电子邮件移动到我的硬盘上?当然,我确实希望将所有电子邮件保存在.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