Vba Outlook.AppointmentItem更改附件文件路径

Vba Outlook.AppointmentItem更改附件文件路径,vba,outlook,Vba,Outlook,我想更改附件文件路径。到目前为止,我已经做到了: Public WithEvents aaa As Outlook.AppointmentItem Private Sub aaa_BeforeAttachmentAdd(ByVal Attachment As Attachment, Cancel As Boolean) Dim newPath 'path where copy will be saved newPath = "D:\Test\" & A

我想更改附件文件路径。到目前为止,我已经做到了:

Public WithEvents aaa As Outlook.AppointmentItem

Private Sub aaa_BeforeAttachmentAdd(ByVal Attachment As Attachment, Cancel As Boolean)

  Dim newPath
  'path where copy will be saved
  newPath = "D:\Test\" & Attachment.fileName
  
  Dim oFSO As Object
 
  Set oFSO = CreateObject("Scripting.FileSystemObject")
   
  Call oFSO.CopyFile(Attachment.PathName, newPath, True)
  
  Dim att As Attachment
  'add the copy to AppointmentItem
  Set att = aaa.Attachments.Add(newPath, 7)
  'remove original attachment
  Attachment.Delete
  
End Sub

Private Sub Application_ItemLoad(ByVal Item As Object)
    If (TypeOf Item Is AppointmentItem) Then
        Set aaa = Item
    End If
End Sub
现在,这不会更改文件的路径。我还注意到了OlAttachmentType枚举,通过检查原始附件,我看到它的值为7,但当我在OlAttachmentType枚举中没有该值时,情况又如何呢

这是图片,第一张是原始附件,第二张是原始文件的复印件

我可以删除原始文件,这很简单,但如何强制outlook根据其路径引用新文件,而不是将其复制到C:\Users\sogrb\AppData\Local\Microsoft\Windows\INetCache\Content.outlook\5UUI14T4


有趣的是,当您将文件拖动到Outlook日历时,Outlook会像引用外部文件一样引用该文件,无论该文件位于何处。但是,当您尝试从VBA添加文件时,它不能在Outlook缓存(我注意到上面的文件夹)之外引用。

olaAttachmentType==7
是新的web附件类型(OneDrive)


如果要替换附件,请通过将
cancel
参数设置为true来取消操作,并添加新附件。

OlAttachmentType==7
是新的web附件类型(OneDrive)


如果要替换附件,请通过将
cancel
参数设置为true来取消操作,并添加新附件。

在代码中,我看到以下文件位置:

newPath = "D:\Test\" & Attachment.fileName
然后尝试附加此文件,并将其指定为web附件:

Set att = aaa.Attachments.Add(newPath, 7)

无法将本地文件添加为web附件。相反,您必须将文件上载到OneDrive,然后附加引用。否则,作为附件类型参数传递的值将不起作用。

在代码中,我看到以下文件位置:

newPath = "D:\Test\" & Attachment.fileName
然后尝试附加此文件,并将其指定为web附件:

Set att = aaa.Attachments.Add(newPath, 7)

无法将本地文件添加为web附件。相反,您必须将文件上载到OneDrive,然后附加引用。否则,作为附件类型参数传递的神奇的
7
值将不起作用。

请阅读最小、完整且可验证的示例:@StureS打开outlook日历,点击ALT+F11,在此OutlookSession中复制此代码,并将任何文件拖到其中,就是这样。最小的请阅读最小、完整且可验证的示例:@StureS打开outlook日历,点击ALT+F11,在此outlook会话中复制此代码,并将任何文件拖到其中,即是。最小的谢谢,德米特里,让我试试。不,不行。如果only Cancel=True并且没有删除原始附件,现在我有了这两个附件,请检查图像。那么您到底想做什么?您正在尝试将附件添加为web链接附件吗?我正在尝试抓取一个附件并将其移动到网络位置,然后像那样引用它。请参阅,谢谢Dmitry,让我试试这个。不,它不起作用。如果only Cancel=True并且没有删除原始附件,现在我有了这两个附件,请检查图像。那么您到底想做什么?您正在尝试将附件添加为web链接附件吗?我正在尝试获取附件并将其移动到网络位置,然后像那样引用它。请参阅上面的代码(从我的问题中),我无法在Outlook之外进行任何引用,所有文件都将被复制到C:\Users\sogrb\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\,甚至可以从网络位置或onedrive(从我的电脑)复制。您是否将C:\Users\sogrb\OneDrive\Public\test\作为OneDrive位置?使用上述代码(从我的问题中),我无法在Outlook之外进行任何引用,所有文件都将复制到C:\Users\sogrb\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\,甚至从网络位置或OneDrive(从我的电脑)复制到C:\Users\sogrb\AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\。您是否将C:\Users\sogrb\OneDrive\Public\test\作为OneDrive位置?