#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")