Страницы: 1
RSS
Необходимо отправлять сохранённый файл через Outlook, прикрепление файла в письмо для отправки через Outlook
 
Подскажите пожалуйста рашение,  макрос сохраняет активный лист в отдельную книгу,   далее необходимо эту книгу вложить в письмо 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
Изменено: Валерий - 21.09.2021 13:01:33
 
А поиск у Вас совсем не работает? :) Тем - куча. Как на форуме и сайте, так и в интернете.
Как отправить письмо из Excel?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, я пытался там разобраться, но там примеры с указанием конкретного пути к файлу на диске,  а не к сохранённому после выделения листа в отдельную книгу  
Изменено: vikttur - 21.09.2021 13:20:24
 
Цитата
Валерий написал:
а не к сохранённому после сохранения листа в отдельную книгу
а в чем различие? Вы не знаете куда сохранили книгу? Уверен, эта часть точно должна поведать об этом тайном месте :)
Цитата
Валерий написал:
wb.Path & "\" & .ActiveSheet.Name & ".xlsx"
Это и есть путь к сохраненной книге. его и используйте. Можно как переменную, можно еще как- то. Пробуйте.

К слову, Вы своим кодом выше не сохраненную книгу отправляете, а активную. Т.е. ту, из которой лист скопировали на новую книгу.
Цитата
Валерий написал:
ActiveWorkbook.SendMail
это именно активная, а ту, сохраненную, Вы закрываете:
Код
.Close False
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал: Вы не знаете куда сохранили книгу?
Благодарю за ответ.
Просто путь сохранения файла каждый новый месяц меняется.
Изменено: vikttur - 21.09.2021 13:21:03
 
Удалось это сделать таким образом.
Копирование листа в новую книгу,  сохранение, отправка вложением
Код
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 с вложенным файлом, заполненным с адресом и темой.   (Нужно для того, чтобы можно было в тексте письма  дополнить или отредактировать сообщение, а потом уже отправить.)
Изменено: Валерий - 21.09.2021 15:45:05
 
Валерий, Вы хоть пытались читать статью, на которую я ссылку дал? Та же прям поделено на блоки - через что и что отправляем. В том числе: Отправка писем через VBA при помощи Outlook(с вложениями)
И там есть строка:
.Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра
т.е. если вместо Send поставить .Display, то сообщение просто будет отображено на экране, но не будет отправлено.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,
Читал конечно,   сижу разбираюсь,  пытаюсь часть моего макроса соединять с той партянкой которая там выложена, у себя править, (чтобы сначала лист сохранялся и в письмо вкладывался)  в итоге  ошибка и дальше ничего не идет.    Да понятно что, просто взять начало моего макроса и после него тупо вставить макрос отправки письма, ничего не выйдет.   Может для опытного человека это выглядит всё элементарно, когда в голове выстроена структура что за чем идет, какая команда,    я же в этом не силён,  некоторые строки зачем нужны мне не понятно.  

Да даже к примеру взять этот код который уже написан,  мне не понятно почему перед некторыми командами (строками) есть . точка,  а в других нет,  а если её убрать, работать не будет.  И вот пишешь этот код, думаешь ну вроде всё верно, а нифига не работает,  а может не работает потому что точку не поставил?  так весь день.
Код
.SaveAs wb.Path & "\" & .ActiveSheet.Name & ".xlsx", xlOpenXMLWorkbook
    sAttachment = wb.Path & "\" & .ActiveSheet.Name & ".xlsx"
    ActiveWorkbook.SendMail Recipients:="new@adres.ru", Subject:="Тема письма"
    .Close False
Изменено: Валерий - 21.09.2021 16:11:50
 
Цитата
Валерий написал:
в итоге  ошибка и дальше ничего не идет
ясно. Попытался откорректировать максимально понятно под Ваши озвученные данные(убрал лишние переменные и комментарии):
Код
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
Изменено: Дмитрий(The_Prist) Щербаков - 21.09.2021 16:14:15
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,

Очень признателен Вам за помощь!  Макрос работает.  Буду дальше ещё изучать с азов.   У меня уже был написан подобный макрос, я его также по отдельности с форума составлял,  сначала сохранение листа,  отдельно макрос отправка письма,  потом всё вместе.  Только код был значительно покороче без проверки запущен ли Outlook и существует файл или нет.  Но пока был в отпуске, айтишники на работе всё снесли, в том числе записи с сылками на сайты где чего я для себя выстаскивал. А я уже не помню, полтора года прошло.  Еще раз благодарю!
Страницы: 1
Наверх