我们正在更新来自草稿文件夹的邮件,并每天发送几次。
我想打开一个选定的邮件,重新发送它,保存它,让它回到草稿,然后关闭它。
我试过在下面
Sub DRAFT()
  Dim myItem As Outlook.MailItem
  Dim objInsp As Outlook.Inspector
  Dim objActionsMenu As Office.CommandBarControl
  Dim olResendMsg As Outlook.MailItem
  ' get current item & open if needed
  On Error Resume Next
  Select Case TypeName(Application.ActiveWindow)
    Case "Explorer"
   Set myItem = Application.ActiveExplorer.Selection.Item(1)
   myItem.Display
    Case "Inspector"
      Set myItem = Application.ActiveInspector.CurrentItem
    Case Else
  End Select
  On Error GoTo 0
  
  If myItem Is Nothing Then
    MsgBox "Could not use current item. Please select or open a single email.", _
       vbInformation
    GoTo exitproc
  End If
    
 ' run the resend command
    Set objInsp = myItem.GetInspector
    objInsp.CommandBars.ExecuteMso ("ResendThisMessage")
    
  ' save orig email
  myItem.Save
  
  ' close orig email
  myItem.Close
 
exitproc:
Set myItem = Nothing
Set objInsp = Nothing
Set objActionsMenu = Nothing
Set olResendMsg = Nothing
End Sub发布于 2022-01-22 13:52:59
您需要将一个OlInspectorClose枚举值传递给MailItem.Close方法。它表示关闭行为,即保存模式。如果在检查器中显示的项未被更改,则此参数无效。
Name    Value   Description
olDiscard   1   Changes to the document are discarded.
olPromptForSave 2   User is prompted to save documents.
olSave  0   Documents are saved.所以,您的代码应该是这样的:
' close orig email
myItem.Close olSave与以编程方式使用CommandBars.ExecuteMso方法执行带状控件不同,您可以尝试创建源项的作用域,然后发送它。
在没有特定命令的对象模型的情况下,ExecuteMso方法非常有用。在内置的buttons、toggleButtons和splitButtons控件上工作。如果失败,则返回无效的E_InvalidArg和未启用或不可见的控件的E_Fail。
相反,您可以使用MailItem.Copy方法来创建另一个对象实例。
Sub CopyItem() 
 
 Dim myNameSpace As Outlook.NameSpace 
 Dim myFolder As Outlook.Folder 
 Dim myNewFolder As Outlook.Folder 
 Dim myItem As Outlook.MailItem 
 Dim myCopiedItem As Outlook.MailItem 
 
 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myNewFolder = myFolder.Folders.Add("Saved Mail", olFolderDrafts)
 Set myItem = Application.CreateItem(olMailItem) 
 
 myItem.Subject = "Speeches" 
 
 Set myCopiedItem = myItem.Copy 
 
 myCopiedItem.To = "email@address.com"
 myCopiedItem.Send() 
 
End Sub发布于 2022-01-24 20:44:16
虽然myItem.Close中有错误,但您不能重新发送尚未发送的邮件。
Option Explicit
Sub SendMailBasedOnPermanentDraft()
    Dim myItem As MailItem
    Dim objInsp As Inspector
    Dim myCopyOfUnsentItemInDrafts As MailItem
    
    ' get current item & open if needed
    On Error Resume Next
    Select Case TypeName(ActiveWindow)
        Case "Explorer"
            Set myItem = ActiveExplorer.Selection.Item(1)
        Case "Inspector"
            Set myItem = ActiveInspector.CurrentItem
        Case Else
    End Select
    On Error GoTo 0
  
    If myItem Is Nothing Then
        MsgBox "Could not use current item. Please select or open a single email.", vbInformation
        GoTo exitProc
    End If
    
    If myItem.Sent = False Then
        Set myCopyOfUnsentItemInDrafts = myItem.copy
        With myCopyOfUnsentItemInDrafts
            .Subject = "Copied " & Now & ": " & myItem.Subject
            .Save
            .Display    ' change to .Send
        End With
        
    Else
        MsgBox "Select or open a single unsent email.", vbInformation
    End If
    
exitProc:
    Set myItem = Nothing
    Set objInsp = Nothing
    Set myCopyOfUnsentItemInDrafts = Nothing
End Subhttps://stackoverflow.com/questions/70813024
复制相似问题