代码之家  ›  专栏  ›  技术社区  ›  0m3r

Outlook附件发送然后移动

  •  1
  • 0m3r  · 技术社区  · 9 年前

    一旦文件成功发送到 c:\complete

    我可以将每个电子邮件的附件限制为10个吗。 每个文件大小约为300kb

    Option Explicit
    
    Sub SendMessage(Optional AttachmentPath)
        Dim objOutlook As Outlook.Application
        Dim objOutlookMsg As Outlook.MailItem
        Dim objOutlookRecip As Outlook.Recipient
        Dim objOutlookAttach As Outlook.Attachment
        Dim objOutlookFile As String
    
    
        '// Attachment Path
        AttachmentPath = "C:\Reports\"
    
        '// Create the Outlook session.
        Set objOutlook = CreateObject("Outlook.Application")
    
        '// Create the message.
        Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
    
        With objOutlookMsg
            '// Add the To recipient(s) to the message.
            Set objOutlookRecip = .Recipients.Add("omar")
            Set objOutlookRecip = .Recipients.Add("omar")
                objOutlookRecip.Type = olTo
    
            '// Add the CC recipient(s) to the message.
            Set objOutlookRecip = .Recipients.Add("omar")
                objOutlookRecip.Type = olCC
    
            '// Set the Subject, Body, and Importance of the message.
            .Subject = "Reports"
            .Body = "the Attached reports are complete !" & vbCrLf & vbCrLf
            .Importance = olImportanceHigh  '//High importance
    
            '// Add attachments to the message.
            objOutlookFile = Dir(AttachmentPath & "*.*")
    
            Do While Len(objOutlookFile) > 0
                .Attachments.Add AttachmentPath & objOutlookFile
                objOutlookFile = Dir
            Loop
    
            '// Resolve each Recipient's name.
            For Each objOutlookRecip In .Recipients
                objOutlookRecip.Resolve
                If Not objOutlookRecip.Resolve Then
                objOutlookMsg.Display
            End If
            Next
            '//.DeleteAfterSubmit = True
            '//.Send
            .Display
    
        End With
        Set objOutlookMsg = Nothing
        Set objOutlook = Nothing
    End Sub
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Eugene Astafiev    9 年前

    目前尚不清楚VBA宏代码的运行位置(Outlook、Word、Excel等)。

    无论如何,不需要在Outlook VBA宏中创建新的Outlook应用程序实例:

    '// Create the Outlook session.
     Set objOutlook = CreateObject("Outlook.Application")
    

    相反,您可以使用Application属性,例如:

    '// Create the message.
    Set objOutlookMsg = Application.CreateItem(olMailItem)
    

    您可以使用 FileSystemObject 用于管理磁盘上的文件。看见 Accessing Files with FileSystemObject 了解更多信息。

    Outlook对象模型还提供 BeforeAttachmentAdd 在将附件添加到父对象实例之前激发的Outlook项目的事件。它提供了要添加的Attachment类的实例和可用于取消操作的Cancel参数。只需设置为true即可取消操作;否则,设置为false以允许添加附件。

    对不起,还有一个问题,如果c:\reports中没有文件,我可以停止发送电子邮件吗\

    最好的方法是在运行VBA宏之前检查文件夹。您可以使用FileSystemObject完成任务。

    Outlook对象模型中的Application类提供 ItemSend 每当用户通过检查器(在检查器关闭之前,但在用户单击“发送”按钮之后)发送Microsoft Outlook项目时,或在程序中使用Outlook项目(如MailItem)的“发送”方法时,都会触发此事件。它提供要发送的项目引用和Cancel参数。如果事件过程将Cancel参数设置为true,则发送操作不会完成,检查器将保持打开状态。

    您可以使用这两个事件来查看所需的任何内容。

    最后,您可能会发现 Getting Started with VBA in Outlook 2010 MSDN中的文章很有帮助。