Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel OneDrive中的文件未附加到Outlook消息:下载错误_Excel_Vba_Outlook_Onedrive - Fatal编程技术网

Excel OneDrive中的文件未附加到Outlook消息:下载错误

Excel OneDrive中的文件未附加到Outlook消息:下载错误,excel,vba,outlook,onedrive,Excel,Vba,Outlook,Onedrive,我在Excel 2016中有一个VBA脚本,它将工作表导出为PDF,然后在Outlook 2016中创建一封电子邮件: Tabelle8.ExportAsFixedFormat Type:=xlTypePDF, Filename:= ThisWorkbook.Path & "\" & ExportFilename, Quality:=xlQualityStandard , IncludeDocProperties:=False, IgnorePrintAreas:=F

我在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
返回

不知何故,这会导致错误“下载失败”:

这是为什么?如何修复?

使用临时文件夹或应用程序路径导出
.PDF
: 如果目标只是将
.PDF
文件附加到Outlook邮件项目,则不将
.PDF
导出到:

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

Application.Path
…返回Excel安装的路径;就我而言,它是:

因此,您将这一行更改如下:

strPDF = Application.Path & "\" & ExportFilename & ".`.PDF`"
…或者,将其导出到Windows临时文件夹:

 strPDF = Environ("temp") & "\" & ExportFilename & ".pdf"
尤其是当
.PDF
的唯一目的是附加到电子邮件时。在我的情况下,Windows临时文件夹是:

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


保留一份副本: 如果您还需要在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文件夹

  • 去。  

  • 在地址栏中记下或复制
    CID
    编号:

  • 按Windows键,然后右键单击
    计算机
    ,然后单击“
    映射网络驱动器
  •   4.在映射网络驱动器对话框中,选择用于引用OneDrive的驱动器号(可能是
    O:
    )。在
    文件夹
    文本框中,输入:

    https://d.docs.live.net/
    您的CID号码

    单击登录时重新连接,然后单击完成

  • 系统将提示您输入Microsoft帐户用户ID和密码
  • 驱动器将被映射!此时,您可以在桌面等上创建驱动器号的快捷方式,并且可以像本地驱动器一样使用驱动器号来保存/打开文件等


    最后的想法: 我必须指出,您将文件保存在OneDrive上,然后以附件的形式通过电子邮件发送,这有点违背了云存储的目的

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

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

    升起垃圾邮件标志 一些电子邮件客户端会将包含大文件的电子邮件标记为垃圾邮件,并将收到的邮件放入垃圾邮件文件夹

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

    消费空间 管理您公司的数据和存储使您的IT员工保持活力。发送和接收大文件——特别是当有更轻的选择时——会让他们的生活更加困难。()


    更多信息:
    • MSDN:

    • MSDN:

    • Office.com:

    • MSDN:

    • Office.com:

    • 以编程方式访问用户的Microsoft帐户(如OneDrive)


    如果粘贴[完整]URL
    https://d.docs.live.net....
    进入浏览器的地址栏?如果从那以后工作正常,那么我打赌这与Excel没有对您的OneDrive的权限有关。如果是这样,您可以从OneDrive文件夹中删除权限…?@ashleedawg是的,可以。我必须删除哪些权限?Excel作为本地用户运行,Windows资源管理器也是如此,通过Windows资源管理器访问生成的PDF没有问题。顺便说一下,我用Office 2013在另一台计算机上进行了测试(都是Windows 10);那里的MsgBox上写着“C:\Users\alexander\OneDrive\…”,它工作起来很有魅力。我不完全清楚你的“最终目标”是什么,但是你说只要工作簿在本地驱动器上,这个
    就可以正常工作,但一旦它在OneDrive中,它就会失败。我不是网络权限方面的专家,但这听起来好像一定与权限有关。因此,在这两种情况下,您运行的都是相同的[Local installed]Excel副本,唯一的区别是您打开的文件位于何处,是否正确(不确定是否相关,但想确认您没有运行基于云的Office 365安装,对吗?)。此外,如果它在本地工作正常,并且在本地运行,那么,您将Excel文件移动到OneDrive云的原因是什么?没有理由仅仅因为它在本地工作就“它必须与权限相关”。这里有很多潜在的失败点。我可以使用SharePoint Online复制此文件,并可以通过让Excel使用
    OLEObjects将文件作为OLE对象添加到工作表上来排除权限。添加文件名:=“myURL”
    。谢谢。我已经修改了我的代码,将其导出两次,一次导入workbbook文件夹,一次导入temp,然后从temp附加。关于你最后的想法:在我的例子中,OneDrive是在内部使用的,但邮件是发送给外部收件人的。但是,对于可能看到或不看到t的其他用户
    C:\Users\[WindowsLoginName]\AppData\Local\Temp
    
    '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