【问题标题】:Macro to save selected emails of Outlook in Windows folder用于将选定的 Outlook 电子邮件保存在 Windows 文件夹中的宏
【发布时间】:2015-02-12 13:49:57
【问题描述】:

我正在尝试将 Outlook 电子邮件保存到 windows 文件夹,但我拥有的宏无法正常工作, 在每封电子邮件保存时,它都会打开浏览窗口,

它应该一次将所有选定的邮件保存到浏览文件夹中

Option Explicit

Function BrowseForFolder(Optional OpenAt As Variant) As Variant
  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

 Set ShellApp = Nothing
    Select Case Mid(BrowseForFolder, 2, 1)
        Case Is = ":"
            If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
        Case Is = "\"
            If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
        Case Else
            GoTo Invalid
    End Select
 Exit Function

Invalid:
 BrowseForFolder = False
End Function


Public Sub SaveMessageAsMsg()
  Dim oMail As Outlook.MailItem
  Dim objItem As Object
  Dim sPath, strFolderpath As String
  Dim dtDate As Date
  Dim sName As String
  Dim enviro 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, "-"

  dtDate = oMail.ReceivedTime
  sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
    vbUseSystem) & Format(dtDate, "-hhnnss", _
    vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"



  strFolderpath = BrowseForFolder("D:\test\mails\")
  sPath = strFolderpath & "\"
  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

【问题讨论】:

标签: vba outlook


【解决方案1】:

将 BrowseForFolder 移出循环

Public Sub SaveMessageAsMsg()
    Dim oMail As Outlook.MailItem
    Dim objItem As Object
    Dim sPath, strFolderpath As String
    Dim dtDate As Date
    Dim sName As String
    Dim enviro As String

    enviro = CStr(Environ("USERPROFILE"))

    strFolderpath = BrowseForFolder("D:\test\mails\")
    sPath = strFolderpath & "\"

    For Each objItem In ActiveExplorer.Selection
        If objItem.MessageClass = "IPM.Note" Then
            Set oMail = objItem    
            sName = oMail.Subject
            ReplaceCharsForFileName sName, "-"  
            dtDate = oMail.ReceivedTime
            sName = Format(dtDate, "yyyymmdd", vbUseSystemDayOfWeek, _
              vbUseSystem) & Format(dtDate, "-hhnnss", _
              vbUseSystemDayOfWeek, vbUseSystem) & "-" & sName & ".msg"      
            Debug.Print sPath & sName
            oMail.SaveAs sPath & sName, olMSG   
         End If
    Next
End Sub

【讨论】:

    【解决方案2】:

    BrowseForFolder 方法显示选择文件夹的对话框。您需要对路径进行硬编码,而不是调用函数来选择文件夹。 Outlook 项目的 SaveAs 方法不显示任何对话框。

    【讨论】:

    • 嗨,谢谢你的回答,实际上问题是如果我硬编码路径而不是不同的邮件,我将不得不一次又一次地更改路径。已经在 Outlook 中的特定文件夹中区分了邮件,所以我选择这些邮件以保存在具有相同文件夹的 windows 文件夹中。所以为了解决这个问题,我添加了浏览功能,但在每封邮件中都会弹出
    • 那么问题出在哪里?
    • 问题是每次保存邮件时都会弹出,它应该保存所有选定的邮件而不是弹出,
    • 你在说什么“弹出”?
    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多