我在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
返回
以某种方式,这会导致错误"下载失败":
为什么会这样以及如何解决?
答案 0 :(得分:3)
.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文件夹。
在地址栏中记下或复制CID
号码:
Computer
,然后点击" Map Network Drive
"。
4.在映射网络驱动器对话框中,选择用于引用OneDrive的驱动器号(可能是O:
)。在Folder
文本框中,输入:
https://d.docs.live.net/
Your CID Number
单击Reconnect at Logon
,然后单击完成。
驱动器将被映射!此时,您可以在桌面等上创建驱动器号的快捷方式,并且可以使用驱动器号作为本地驱动器来保存/打开文件等。
我必须通过在OneDrive上保存文件 然后来指出您有点击败云端存储的目的 通过电子邮件将其作为附件发送。
现在,最佳做法告诉我们将文件保存在共享位置或可共享位置,然后通过电子邮件发送链接到所有位置 - 所有这些都可以通过Office 365的强大功能完成。
这样做可以降低以下风险:
提高垃圾邮件标志
某些电子邮件客户端会将包含大型文件的电子邮件标记为垃圾邮件,并将收到的邮件丢弃到垃圾邮件文件夹中。
交货失败
即使在云时代,一些电子邮件客户端也有严格的文件大小限制。发送链接而不是庞大的文件可确保顺利传递给目标收件人。
消耗空间
管理组织的数据和存储可以让您的IT员工不断前进。发送和接收大文件 - 特别是当有较轻的替代品时 - 会使他们的生活变得更加困难。 <子>(Source)子>
Office 365 Tips Worth Sharing: Email a Link, Not an Attachment
Office.com:Share OneDrive files and folders
MSDN:Environ Function
Office.com:Change Permissions or Stop sharing OneDrive files or folders
Using the REST API以编程方式访问用户的Microsoft帐户(例如OneDrive)