Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
1

Отправка сообщений Outlook с использованием vba

31.03.2016, 13:25. Просмотров 1826. Ответов 19
Метки нет (Все метки)

Друзья, есть следующий макрос. Отправляет сообщение с вложением, темой, и текстом, но вставляет во вложение текущий файл с которого запускается макрос, необходимо вставлять во вложение активную книгу. Подскажите как это сделать?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Function SendEmailUsingOutlook(ByVal Email$, ByVal MailText$, Optional ByVal Subject$ = "", _
                               Optional ByVal AttachFilename As Variant) As Boolean
    ' функция производит отправку письма с заданной темой и текстом на адрес Email
    ' с почтового ящика, настроенного в Outlook для отправки писем "по-умолчанию"
    ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл (файлы)
 
    On Error Resume Next: Err.Clear
    Dim OA As Object: Set OA = CreateObject("Outlook.Application")
    If OA Is Nothing Then MsgBox "Не удалось запустить OUTLOOK для отправки почты", vbCritical: Exit Function
 
    With OA.CreateItem(0)   'создаем новое сообщение
        .To = Email$: .Subject = Subject$: .Body = MailText$
        If VarType(AttachFilename) = vbString Then .Attachments.Add AttachFilename
        If VarType(AttachFilename) = vbObject Then    ' AttachFilename as Collection
            For Each file In AttachFilename: .Attachments.Add file: Next
        End If
        For i = 1 To 100000: DoEvents: Next    ' без паузы не отправляются письма без вложений
        Err.Clear: .Send
        SendEmailUsingOutlook = Err = 0
    End With
    Set OutApp = Nothing
End Function
 
Sub Отправить_Письмо_из_Outlook()
 
   Sheets("Лист1").copy
 
    'отправляем письмо с 1 вложением
    attach$ = ThisWorkbook.FullName    ' прикрепляем текущий файл Excel
    res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 2", "Тема письма 2", attach$)
  
 
 
End Sub
1
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2016, 13:25
Ответы с готовыми решениями:

Макрос в VBA Outlook для периодической записи непрочитанных сообщений в БД Access
Есть база данных на Access которая содержит следующие поля в указанных...

Отправка писем из MS Outlook макросом VBA
Подскажите пожалуйста, можно ли при отправке писем макросом изменить шрифт и...

Обработка сообщений Outlook
Доброго времени суток, уважаемы форумчане. Прошу помочь решить следующую...

Outlook: произвести подсчет всех входящих сообщений за указанный пользователем период
Доброго времени суток уважаемые форумчане! Помогите решить задачку. ...

VBA Outlook
Нужно написать скрипт для сортировки почты VBA Outlook. Задача: Приходят файлы...

19
Watcher_1
353 / 159 / 27
Регистрация: 21.06.2011
Сообщений: 350
31.03.2016, 13:46 2
Прежде чем вставлять активную книгу. Ее надо сохранить, тогда у вас появится пусть до нее.
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
31.03.2016, 14:23  [ТС] 3
В том-то и дело, что сохранять в данном случае мне его не надо. Необходимо только отправить.
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
31.03.2016, 14:42 4
Вместо:
Visual Basic
1
2
3
'отправляем письмо с 1 вложением
attach$ = ThisWorkbook.FullName    ' прикрепляем текущий файл Excel
res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 2", "Тема письма 2", attach$)
попробуйте записать так:
Visual Basic
1
2
3
4
5
6
'отправляем письмо с 1 вложением
attach$ = Environ("temp") & "" & format(now,"yyyymmdd_hhnnss") & ".xlsm" 'расширение либо кодом определяйте, либо вписывайте то, что у книги с кодом
ActiveWorkbook.SavecopyAs attach$
res = SendEmailUsingOutlook("name@domain.ru", "Текст письма 2", "Тема письма 2", attach$)
DoEvents
kill attach$
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
31.03.2016, 15:39  [ТС] 5
Прекрасно! То что надо)) Спасибо. Скажите, можно ли сделать так чтобы исключить ручное подтверждение отправки сообщения?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
31.03.2016, 17:25 6
начиная с 2007 можно отключить его настройками безопасности:
Excel 2007: Меню-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется);
Excel 2010: Файл-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется).
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
31.03.2016, 18:01  [ТС] 7
К сожалению изменение данных настроек заблокировано поэтому хотел узнать может кодом можно как-то обойти это.
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
31.03.2016, 18:26 8
Если заблокировано - значит у Вас компьютер управляется администратором Microsoft Exchange или Microsoft Windows Active Directory Domain Services и администратором в качестве параметров по умолчанию установлен запрет на внесение изменений в параметры безопасности пользователями
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
31.03.2016, 19:05  [ТС] 9
Так и есть, но неужели нет обходного пути?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
31.03.2016, 19:16 10
Нет. Из VBA вообще никаких. Только умолять админа. Безопасность в Outlook в этом плане хорошая.
1
Watcher_1
353 / 159 / 27
Регистрация: 21.06.2011
Сообщений: 350
31.03.2016, 19:32 11
Как вариант, вместо отправки сохранить в черновики, а потом оптом отправить...
По моему для черновиков подтверждение делать не надо (но могу ошибиться)
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
31.03.2016, 20:59  [ТС] 12
Спасибо за ответы. Для начала попробуем админов попросить дать доступ. The Prist, скажите, возможно ли имя отправляемого файла формировать из определенной ячейки этого файла?
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
01.04.2016, 08:29 13
Возможно.

Добавлено через 11 часов 22 минуты
Когда я писал "возможно" - это был намек на то, чтобы Вы написали какая часть имени файла в ячейке и в какой Потому как есть определенные нюансы. Если все имя файла(без пути):
Visual Basic
1
attach$ = Environ("temp") & "" & Range("A1").Value & ".xlsm" '
Range("A1").Value - А1 это ячейка активного листа, в которой имя файла без расширения

Если же в ячейке только часть имени - тут надо знать какая часть в ячейке, а какая статично.
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
01.04.2016, 09:14  [ТС] 14
Предложенный вариант конечно работает, но добавляет к имени файла temp. И еще не работает если в имени файла присутствуют кавычки, а в моем случае к сожалению кавычки почти всегда есть и положение в ячейке у них всегда разное. Можно как-то избавиться от temp и от кавычек. Т.е имя файла формировалось из ячейки A1 но если в ячейке встречаются кавычки, то удалять их или пропускать
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
01.04.2016, 09:31 15
Форум таки съел слеши...Ладно, в этой ситуации мы их так объедем:
Visual Basic
1
attach$ = Environ("temp") & application.Pathseparator & Range("A1").Value & ".xlsm" '
А про кавычки внутри ячейки - лучше от них избавляться, в принципе. Но именно поэтому я и написал, что от Вас нужен хоть какой-то пример того, что в ячейке.
что вызывает трудности в удалении кавычек? Пытайтесь, пытайтесь искать ответы сначала самостоятельно. Все не так сложно. Иначе никогда нормально не научитесь в VBA работать:
Visual Basic
1
attach$ = Environ("temp") & application.Pathseparator & Replace(Range("A1").Value,Chr(34),"") & ".xlsm" '
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
01.04.2016, 21:40  [ТС] 16
Удалять кавычки не сложно, но после этого придется переписать еще несколько макросов, а это уже трудоёмко. В ячейке хранятся названия компаний. Пример: ПАО "Пальмира". Но так как имя файла не может содержать кавычек просил вас это обойти.

Добавлено через 6 минут
По поводу поиска ответов самостоятельно могу сказать, что на это к сожалению не всегда хватает времени. Для профессионала как вы может vba и не сложен, но для начинающих не так уж и прост + задачи такой нет профессионально писать макросы.

Добавлено через 10 минут
Самое главное. Последний предложенный вариант естественно работает как надо Спасибо. Пытался сегодня еще добавить сохранение отправляемого файла на ресурс также с именем взятым из ячейки. Сохраняет, но выполнение макроса завершается ошибкой . Ругается на kill ach$
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
02.04.2016, 14:09 17
Если есть ошибка - значит есть её номер и описание. Они нам надо, т.к. без них совершенно не определить почему файл не может быть удален. Либо файл еще занят почтовиком, либо нет прав на удаление.
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
07.04.2016, 01:35  [ТС] 18
Цитата Сообщение от The_Prist Посмотреть сообщение
Если есть ошибка - значит есть её номер и описание
The_Prist, сохранение на ресурс удалось победить, но возник еще один вопрос. Появилась необходимость удалять не только кавычки но и символы < и >, числовые коды которых 60 и 62 соответственно. Где в этой строке добавить еще это? Просто удалять по отдельности < и > получается, а вот совместно нет((

Bash
1
attach$ = Environ("temp") & application.Pathseparator & Replace(Range("A1").Value,Chr(34),"") & ".xlsm"
0
The_Prist
1302 / 283 / 63
Регистрация: 13.11.2008
Сообщений: 589
07.04.2016, 10:59 19
Лучший ответ Сообщение было отмечено run82 как решение

Решение

Все же надо когда-то учиться...
Visual Basic
1
2
3
4
dim sFName as string
sFName = Replace(Range("A1").Value,Chr(34),"")
sFName = Replace(sFName ,"<","")
sFName = Replace(sFName ,">","")
Но скажу по секрету: в имени файла не должно содержаться еще и символов:
:\/?*'|
1
run82
4 / 4 / 0
Регистрация: 27.02.2013
Сообщений: 101
08.04.2016, 00:59  [ТС] 20
Цитата Сообщение от The_Prist Посмотреть сообщение
Все же надо когда-то учиться...
Да, ученье - свет......)) Спасибо!! Все работает!!
0
08.04.2016, 00:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2016, 00:59

VBA Outlook
Доброго всем времени суток! В коде VBA для файла, вложенного в письмо, есть...

VBA MS Outlook
Всем здравствовать! 1. У меня нет опыта работы в VBA MS Outlook. Мне...

VBA и Outlook
Всем привет! У меня такой вопрос: позволит ли VBA написать макрос для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru