Удаление файла из Sharepoint с помощью VBA

#excel #vba #outlook

Вопрос:

Надеюсь, кто-нибудь сможет, пожалуйста, помочь. У меня есть приведенный ниже код, который генерирует PDF-файл и отправляет его по электронной почте на определенный адрес электронной почты. Однако проблема, с которой я сталкиваюсь, заключается в том, что созданный файл всегда создается в Sharepoint, и у меня возникают некоторые трудности с kill командой. При использовании Kill PdfFile as он не может найти файл, который он создал в первую очередь. Кто-нибудь может посоветовать, как я могу удалить этот файл?

 Private Sub SendFile()

  Dim IsCreated As Boolean
  Dim i As Long
  Dim PdfFile As String, Title As String
  Dim OutlApp As Object
  
  Sheet1.Visible = True
  Sheet1.Activate
 
  Title = Sheet1.Range("E8") amp; " " amp; Sheet1.Range("B20")
 
  PdfFile = ActiveWorkbook.FullName
  i = InStrRev(PdfFile, ".")
  If i > 1 Then PdfFile = Left(PdfFile, i - 1)
  PdfFile = PdfFile amp; "_" amp; ActiveSheet.Name amp; ".pdf"
 
  With ActiveSheet
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=PdfFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
  End With
 
  On Error Resume Next
  Set OutlApp = GetObject(, "Outlook.Application")
  If Err Then
    Set OutlApp = CreateObject("Outlook.Application")
    IsCreated = True
  End If
  OutlApp.Visible = True
  On Error GoTo 0
 
  With OutlApp.CreateItem(0)
   
    .Subject = Title
    .To = "email@email.com"
    .Body = "Hi," amp; vbLf amp; vbLf _
          amp; "The report is attached in PDF format." amp; vbLf amp; vbLf _
          amp; "Regards," amp; vbLf _
          amp; Application.UserName amp; vbLf amp; vbLf
    .Attachments.Add PdfFile
   
    On Error Resume Next
    .Send
    Application.Visible = True
    If Err Then
      MsgBox "E-mail was not sent", vbExclamation
    Else
      MsgBox "E-mail successfully sent", vbInformation
    End If
    On Error GoTo 0
   
  End With
 
  ' Delete PDF file
  Kill PdfFile 'This is where things go sideways
 
  ' Quit Outlook if it was created by this code
  If IsCreated Then OutlApp.Quit
 
  ' Release the memory of object variable
  Set OutlApp = Nothing
 
End Sub
 

Комментарии:

1. Попробуй CreateObject("Scripting.FileSystemObject").deleteFile PdfFile

Ответ №1:

Причина, по которой это не удается, заключается в том, что вы используете существующее имя файла/путь для создания файла/пути PDF. Распространенный метод создания временного файла, но с ним могут возникнуть проблемы.

Казалось бы, что .ExportAsFixedFormat вместе с .SaveAs etc. рады использовать имя файла/пути, которые выглядят как URL:

 https://<sharepointsite>.sharepoint.com/sites/<site name>/<folder>/<folder>/<filename.xlsx>
 

Однако, казалось Kill бы, это не позволит использовать это. Я полагаю FSO.DeleteFile , что возникнет та же проблема.

Вместо этого вам нужно преобразовать URL-адрес этого сайта в обычный путь к файлу. Самый простой способ найти нужный вам путь-это перейти к файлу в проводнике Windows, изучить путь к папке и узнать различия.

Кроме того, выберите альтернативное расположение для вашего временного pdf-файла. Вашу временную папку можно найти с помощью tempfolder = Environ$("temp")