OneDrive中的文件未附加到Outlook邮件:下载错误

时间:2018-02-17 14:04:29

标签: excel vba excel-vba outlook-vba onedrive

我在Excel 2016中有一个VBA脚本,它将工作表导出为PDF,然后在Outlook 2016中创建一个电子邮件:

Tabelle8.ExportAsFixedFormat Type:=xlTypePDF, Filename:= 
  ThisWorkbook.Path & "\" & ExportFilename, Quality:=xlQualityStandard 
  , IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish _
  :=False
strPDF = ThisWorkbook.Path & "\" & ExportFilename & ".pdf"
Set OutlookApp = CreateObject("Outlook.Application")
Set strEmail = OutlookApp.CreateItem(0)


With strEmail
  .To = recipient
  .CC = ""
  .Subject = subject
  .HTMLBody = text
  .Attachments.Add strPDF
  .Display
EndWith

只要工作簿位于本地驱动器上,它就可以正常工作,但只要它在OneDrive中就会失败。在OneDrive上,

MsgBox strPDF

返回

以某种方式,这会导致错误"下载失败":

为什么会这样以及如何解决?

1 个答案:

答案 0 :(得分:3)

使用Temp文件夹或应用程序路径导出.PDF

如果目标只是将.PDF文件附加到Outlook邮件项目,那么而不是.PDF导出到:

ThisWorkbook.Path

...(返回保存当前工作簿的路径),您可以将其导出到:

Application.Path

...返回 路径到Excel安装 ;就我而言:

C:\Program Files (x86)\Microsoft Office\root\Office16

因此您需要按如下方式更改此行:

strPDF = Application.Path & "\" & ExportFilename & ".`.PDF`"

...或者,将其导出到 Windows临时文件夹

 strPDF = Environ("temp") & "\" & ExportFilename & ".pdf"

特别是如果要将.PDF 唯一目的附加到电子邮件中。在我的例子中,Windows Temp文件夹是:

C:\Users\[WindowsLoginName]\AppData\Local\Temp

无论哪种方式,您仍然可以(至少临时)访问您选择的目标文件。

保留副本:

如果您需要在OneDrive上保留该文件的副本,那么您有几个选择。

如果.PDF以前正确保存到OneDrive ,但Excel无法将其附加到Outlook邮件项目,那么您可以导出文件,例如:

'export PDF to workbook path
strPDF_save = ThisWorkbook.Path & "\" & ExportFilename & ".pdf"
Tabelle8.ExportAsFixedFormat xlTypePDF, strPDF

'export PDF to temp folder
strPDF_temp = Environ("temp") & "\" & ExportFilename & ".pdf"
Tabelle8.ExportAsFixedFormat xlTypePDF, strPDF

'create Outlook object and send email as attachment
Set OutlookApp = CreateObject("Outlook.Application")
With OutlookApp.CreateItem(0)
  .To = recipient
  .Subject = Subject
  .HTMLBody = Text
  .Attachments.Add strPDF
  .Display 'display the email before sending
End With

(我还从记录宏中删除了一些无关的代码。)

将驱动器号映射到OneDrive:

如果您要定期使用OneDrive保存/检索文件,我建议将驱动器号映射到OneDrive文件夹

  1. 转到https://onedrive.live.com

  2. 在地址栏中记下或复制CID号码:

  3. map1

    1. 点击 Windows Key Windows密钥,然后右键点击Computer,然后点击" Map Network Drive"。
    2. map2

       4.在映射网络驱动器对话框中,选择用于引用OneDrive的驱动器号(可能是O:)。在Folder文本框中,输入:

        

      https://d.docs.live.net/ Your CID Number

      单击Reconnect at Logon,然后单击完成

      map3

      1. 系统将提示您输入 Microsoft帐户用户ID&密码即可。
      2. Map4

        驱动器将被映射!此时,您可以在桌面等上创建驱动器号的快捷方式,并且可以使用驱动器号作为本地驱动器来保存/打开文件等。

        Links, Not Attachments!

        最后的想法:

        我必须通过在OneDrive上保存文件 然后来指出您有点击败云端存储的目的 通过电子邮件将其作为附件发送

        现在,最佳做法告诉我们将文件保存在共享位置或可共享位置,然后通过电子邮件发送链接到所有位置 - 所有这些都可以通过Office 365的强大功能完成。

        这样做可以降低以下风险:

          

        提高垃圾邮件标志

             

        某些电子邮件客户端会将包含大型文件的电子邮件标记为垃圾邮件,并将收到的邮件丢弃到垃圾邮件文件夹中。

             

        交货失败

             

        即使在云时代,一些电子邮件客户端也有严格的文件大小限制。发送链接而不是庞大的文件可确保顺利传递给目标收件人。

             

        消耗空间

             

        管理组织的数据和存储可以让您的IT员工不断前进。发送和接收大文件 - 特别是当有较轻的替代品时 - 会使他们的生活变得更加困难。 <子>(Source

        更多信息: