【问题标题】:Struggling to attach files to Outlook e-mails using Excel VBA努力使用 Excel VBA 将文件附加到 Outlook 电子邮件
【发布时间】:2017-10-23 23:47:34
【问题描述】:

我正在尝试一些相当简单的事情,但我不知道我正在做的事情与其他编写的代码的不同之处。

我有一个非常简单的使用 Outlook 从 Excel 发送电子邮件:

Sub SendEmail()

    Dim OutApp As Object
    Dim OutMail As Object


    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    With OutMail
        .To = Range("ETF_CAB_Recon_Initial_Email_To")
        .CC = Range("ETF_CAB_Recon_Initial_Email_CC")
        .BCC = ""
        .Subject = Range("ETF_CAB_Recon_Initial_Email_Subject")
        .HTMLBody = Range("ETF_CAB_Recon_Initial_Email_Body")
        .Attachments.Add Range("ETF_CAB_Recon_Initial_Email_Attachment")
        .Display  
    End With


    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

但是,它在我的文件附件中变得脾气暴躁。

错误消息:"Object doesn't support this property or method" 正在做一些研究,这显然是因为 .add 不是附件的一部分?但是,为什么这么多示例都有 Attachments.Add 作为将文件附加到 Outlook 电子邮件的代码?

我已确保 Outlook 对象库已打开,并且电子邮件的其余部分可以很好地填写 - 只是附件没有。调试也将附件显示为问题。

我尝试了几种不同的方法来定义位置。

我们将不胜感激任何有关解决方案的指导。

【问题讨论】:

  • NAA,但我建议的第一件事是使用强类型变量——Dim outApp As New Outlook.Application,而不是Dim outApp As Object: Set outApp = CreateObject("Outlook.Application")。对 Outlook 对象库的引用本身并没有真正做任何事情。
  • 在没有启动对象库的情况下尝试使用 Outlook 之前,我已经被烧毁了,所以我认为值得一提
  • 当您编写 CreateObject("Outlook.Application") 时,您是在要求 Windows 为您提供 Outlook.Application 对象的实例。但是 VBA 不知道所讨论的对象是 Outlook.Application 对象;就 VBA 而言,您可以编写以下 outApp.NotAMethod() 并且 VBA 会很高兴地编译它并尝试运行它。添加对 Outlook 的引用会告诉 VBA Outlook.Application 对象的形状,但您仍然必须指定此特定变量引用 Outlook.Application 对象。完成后,VBA 环境...
  • ... 可以告诉你 outApp 不应该有 NotAMethod

标签: vba excel outlook


【解决方案1】:

Attachments.Add 只接受字符串(文件名)或 Outlook 项目之一的实例(例如 MailItem)。您正在传递一个 Range 对象。

【讨论】:

  • 如何将范围对象(当前设置为单个单元格,其中只有一个文件路径)转换为字符串?我的尝试之一是 Dim AttachmentFilePath as Long ...。我意识到输入这个为什么对我不起作用 - 尝试将它调暗为 String
  • Range.Value 属性
【解决方案2】:

尝试完全限定您的工作簿并将字符串变量分配给您的范围

查看示例

Option Explicit
Sub SendEmail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim Sht As Object
    Dim RecipTo As String
    Dim RecipCC As String
    Dim Subject As String
    Dim Atmt As String

    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    Set Sht = ThisWorkbook.Worksheets("Sheet1")

    With Sht
        RecipTo = Sht.Range("A1").Value
        RecipCC = Sht.Range("B1").Value
        Subject = Sht.Range("C1").Value
        Atmt = Sht.Range("D1").Value ' Attachment Path

        With OutMail
            .To = RecipTo
            .CC = RecipCC
            .BCC = ""
            .Subject = Subject
            .HTMLBody = Sht.Range("E1")
            .Attachments.Add Atmt
            .Display
        End With

    End With

    With Application
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

在此处查看另一个示例 https://stackoverflow.com/a/38303646/4539709

Attachments Object (Outlook)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2012-05-17
    • 2019-03-18
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多