Подскажите пожалуйста рашение, макрос сохраняет активный лист в отдельную книгу, далее необходимо эту книгу вложить в письмо Outlook, отправка письма уже вручную. но у меня здесь получается отправка исходной книги, причем без открытия окна Outlook
Код
Sub SaveSheet()
Application.DisplayAlerts = False
Set wb = ActiveWorkbook
ActiveSheet.Copy
With ActiveWorkbook
.SaveAs wb.Path & "\" & .ActiveSheet.Name & ".xlsx", xlOpenXMLWorkbook
.Close False
End With
ActiveWorkbook.SendMail Recipients:="new@adres.ru", Subject:="Тема письма"
Application.DisplayAlerts = True
End Sub
Дмитрий(The_Prist) Щербаков, я пытался там разобраться, но там примеры с указанием конкретного пути к файлу на диске, а не к сохранённому после выделения листа в отдельную книгу
Удалось это сделать таким образом. Копирование листа в новую книгу, сохранение, отправка вложением
Код
Sub Save_And_Send_Sheet()
Application.DisplayAlerts = False
Set wb = ActiveWorkbook
ActiveSheet.Copy
With ActiveWorkbook
.SaveAs wb.Path & "\" & .ActiveSheet.Name & ".xlsx", xlOpenXMLWorkbook
sAttachment = wb.Path & "\" & .ActiveSheet.Name & ".xlsx"
ActiveWorkbook.SendMail Recipients:="new@adres.ru", Subject:="Тема письма"
.Close False
End With
Application.DisplayAlerts = True
End Sub
Но отправляется всё автоматически без открытия Outlook. Необоходимо чтобы открывалась форма Outlook с вложенным файлом, заполненным с адресом и темой. (Нужно для того, чтобы можно было в тексте письма дополнить или отредактировать сообщение, а потом уже отправить.)
Валерий, Вы хоть пытались читать статью, на которую я ссылку дал? Та же прям поделено на блоки - через что и что отправляем. В том числе: Отправка писем через VBA при помощи Outlook(с вложениями) И там есть строка: .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра т.е. если вместо Send поставить .Display, то сообщение просто будет отображено на экране, но не будет отправлено.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Дмитрий(The_Prist) Щербаков, Читал конечно, сижу разбираюсь, пытаюсь часть моего макроса соединять с той партянкой которая там выложена, у себя править, (чтобы сначала лист сохранялся и в письмо вкладывался) в итоге ошибка и дальше ничего не идет. Да понятно что, просто взять начало моего макроса и после него тупо вставить макрос отправки письма, ничего не выйдет. Может для опытного человека это выглядит всё элементарно, когда в голове выстроена структура что за чем идет, какая команда, я же в этом не силён, некоторые строки зачем нужны мне не понятно.
Да даже к примеру взять этот код который уже написан, мне не понятно почему перед некторыми командами (строками) есть . точка, а в других нет, а если её убрать, работать не будет. И вот пишешь этот код, думаешь ну вроде всё верно, а нифига не работает, а может не работает потому что точку не поставил? так весь день.
Валерий написал: в итоге ошибка и дальше ничего не идет
ясно. Попытался откорректировать максимально понятно под Ваши озвученные данные(убрал лишние переменные и комментарии):
Код
Sub Send_Mail()
Dim objOutlookApp As Object, objMail As Object
Dim wb As Workbook
Dim sAttachment As String
Application.ScreenUpdating = False
On Error Resume Next
'пробуем подключиться к Outlook, если он уже открыт
Set objOutlookApp = GetObject(, "Outlook.Application")
Err.Clear 'Outlook закрыт, очищаем ошибку
If objOutlookApp Is Nothing Then
Set objOutlookApp = CreateObject("Outlook.Application")
End If
Set objMail = objOutlookApp.CreateItem(0) 'создаем новое сообщение
'если не получилось создать приложение или экземпляр сообщения - выходим
If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
Application.DisplayAlerts = False
Set wb = ActiveWorkbook
sAttachment = wb.Path & "\" & ActiveSheet.Name & ".xlsx"
ActiveSheet.Copy
With ActiveWorkbook
.SaveAs sAttachment, xlOpenXMLWorkbook
.Close False
End With
Application.DisplayAlerts = True
'создаем сообщение
With objMail
.To = "new@adres.ru" 'адрес получателя
.Subject = "Тема письма" 'тема сообщения
'добавляем вложение, если файл по указанному пути существует(dir проверяет это)
If sAttachment <> "" Then
If Dir(sAttachment, 16) <> "" Then
.Attachments.Add sAttachment 'просто вложение
End If
End If
.Display 'если необходимо просмотреть сообщение, а не отправлять без просмотра
End With
Set objOutlookApp = Nothing: Set objMail = Nothing
Application.ScreenUpdating = True
End Sub
Цитата
Валерий написал: почему перед некторыми командами (строками) есть . точка, а в других нет, а если её убрать, рабоать не будет
ну здесь азы VBA учить надо. Точки применяются исключительно внутри блока With к тому объекту, который идет после ключевого With. Т.е. это сокращенное обращение. Например, если надо обратиться к свойствам Selection несколько раз, то пишут:
Код
with Selection
.Interior.Color = vbRed 'заливка красным цветом
.Value = "fff" 'записываем во все выделенные ячейки текст fff
End With
Очень признателен Вам за помощь! Макрос работает. Буду дальше ещё изучать с азов. У меня уже был написан подобный макрос, я его также по отдельности с форума составлял, сначала сохранение листа, отдельно макрос отправка письма, потом всё вместе. Только код был значительно покороче без проверки запущен ли Outlook и существует файл или нет. Но пока был в отпуске, айтишники на работе всё снесли, в том числе записи с сылками на сайты где чего я для себя выстаскивал. А я уже не помню, полтора года прошло. Еще раз благодарю!