У меня есть код, который временно сохраняет рабочую книгу, отправляет ее через Outlook в виде вложения, а затем удаляет файл.Вместо того, чтобы отправлять как .xlsm, я хочу, чтобы он отправлялся как .xls.Я смог сделать это, выполнив
FileExtStr = ".xls"
, но при попытке открыть отправленное вложение мне выдается следующее сообщение:
"Формат файла и расширение заказов".xls 'не совпадают. Файл может быть поврежден или небезопасен. Если вы не доверяете его источнику, не открывайте его. Вы все равно хотите его открыть? "
Как мне нетолько изменить имя формата, но преобразовать весь файл в xls, чтобы избежать этой ошибки?
Sub EmailWithOutlook_workbook()
Dim wb1 As Workbook
Dim TempFilePath As String
Dim tempFileName As String
Dim FileExtStr As String
Dim OutApp As Object
Dim OutMail As Object
Dim Wb2 As Workbook
Dim ws2 As Worksheet
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
Set wb1 = ActiveWorkbook
'Make a copy of the file/Open it/Mail it/Delete it
TempFilePath = Environ$("temp") & "\"
FileExtStr = ".xls"
tempFileName = File_Name_core & " " & Format(Now, "yyyy-mm-dd h-mm-ss")
wb1.SaveCopyAs TempFilePath & tempFileName & FileExtStr
Set Wb2 = Workbooks.Open(TempFilePath & tempFileName & FileExtStr)
Wb2.Save
Wb2.Close
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = email_to
.CC = email_cc
.bcc = email_bcc
.Subject = email_subject
.Body = email_body
.Attachments.Add TempFilePath & tempFileName & FileExtStr
.Display
End With
On Error GoTo 0
'Delete the temp file
Kill TempFilePath & tempFileName & FileExtStr
Set OutMail = Nothing
Set OutApp = Nothing
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
End With
End Sub
РЕДАКТИРОВАТЬ : я изменил код на
Sub EmailWithOutlook_workbook()
Dim wb1 As Workbook
Dim TempFilePath As String
Dim tempFileName As String
Dim FileExtStr As String
Dim OutApp As Object
Dim OutMail As Object
Dim Wb2 As Workbook
Dim ws2 As Worksheet
With Application
.ScreenUpdating = False
.EnableEvents = False
.DisplayAlerts = False
End With
Set wb1 = ActiveWorkbook
'Make a copy of the file/Open it/Mail it/Delete it
TempFilePath = Environ$("temp") & "\"
FileExtStr = "." & LCase(Right(wb1.Name, Len(wb1.Name) - InStrRev(wb1.Name, ".", , 1)))
' tempFileName = Left(wb1.Name, Len(wb1.Name) - Len(FileExtStr)) & " " & Format(Now, "yyyy-mm-dd h-mm-ss")
tempFileName = File_Name_core & " " & Format(Now, "yyyy-mm-dd h-mm-ss")
'////////////MODIFIED PART/////////////
wb1.Sheets.Copy 'creates new workbook without macros"
'The New workbook copy is now the Active workbook
wb1.SaveAs TempFilePath & tempFileName, FileFormat:=51
wb1.Close
'////////////////////////////////////
Set Wb2 = Workbooks.Open(TempFilePath & tempFileName, , , FileFormat:=51)
Wb2.Save
Wb2.Close
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = email_to
.CC = email_cc
.bcc = email_bcc
.Subject = email_subject
.Body = email_body
.Attachments.Add TempFilePath & tempFileName & FileExtStr
.Display
End With
On Error GoTo 0
'Delete the temp file
Kill TempFilePath & tempFileName
Set OutMail = Nothing
Set OutApp = Nothing
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
End With
End Sub
Однако теперь возникает проблема, связанная с тем, что моя книга переименовывается в вложение (это потому, что вместо сохранения копии я сохраняю файл?).Я хочу, чтобы у книги было то же самое оригинальное имя, прежде чем пользователь запустит код ...