Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 13:54   #91
kserems
 
Регистрация: 22.01.2012
Сообщений: 7
По умолчанию

Специалисты, откликнитесь пожалуйста!

Очень надо, расчётную часть проекта я сделал, осталось допилить автоматизацию обработки данных и отправки сообщения с вложением.
По вопросу автоматизации обработки данных надеюсь вопросов не возникнет (надеюсь что получится записать макрос средствами Excel, пока не брался) , а вот с отправкой сообщения возникли сложности, т.к. в этой области я абсолютный ноль.

Повторю вопрос на всякий случай:

Есть макрос отправки сообщения из Excel, как его модифицировать так, что бы отправлялся диапазон ячеек с активной страницы, на адреса указанные в определённой ячейке (на активном листе), а так же тема письма подставлялась из другой ячейки:

Ниже макрос, письмо создает, но как прикрепить к нему диапазон ячеек с активного листа не могу понять.

Код:
Sub SendMail()  
    Dim OutApp As Object  
    Dim OutMail As Object  
    Dim cell As Range  
      
    Application.ScreenUpdating = False  
    Set OutApp = CreateObject("Outlook.Application")  
    OutApp.Session.Logon  
    On Error GoTo cleanup  
    Set OutMail = OutApp.CreateItem(0)  
    On Error Resume Next  
      
    With OutMail  
        .To = Range("A1").Value  
        .Subject = Range("A2").Value  
        .Body = Range("A3").Value  
        .Attachments.Add Range("A4").Value  
        'команду Send можно заменить на Display, чтобы посмотреть сообщение перед отправкой   
        .Send  
    End With  
  
    On Error GoTo 0  
    Set OutMail = Nothing  
  
cleanup:  
    Set OutApp = Nothing  
    Application.ScreenUpdating = True  
End Sub

Последний раз редактировалось kserems; 13.02.2012 в 14:03. Причина: Добавил информацию.
kserems вне форума
Старый 18.02.2012, 14:14   #92
kserems
 
Регистрация: 22.01.2012
Сообщений: 7
По умолчанию

Добрый день!

Выкладываю решение моего вопроса (помогли на другом форуме), может кому пригодится.

Код:
Sub Sendmail_ActiveBook() 
Dim OutApp As Object, wbTemp as Workbook 
Dim OutMail As Object 
Dim cell As Range 
 
Application.ScreenUpdating = False 
Application.EnableEvents=false 
Application.DisplayAlerts=false 
 
Set wbTemp=Workbooks.Add 
ThisWorkbook.Activate 
Set OutApp = CreateObject("Outlook.Application") 
OutApp.Session.Logon 
On Error GoTo cleanup 
Set OutMail = OutApp.CreateItem(0) 
On Error Resume Next 
 
ActiveWorkbook.ActiveSheet.Copy Before:=wbTemp.Worksheets(1) 
wbTemp.SaveAs ("C:\Temp\имя файла.xls") 
wbTemp.Close 
 
 
With OutMail 
.To = Range("Q2").Value 
.Subject = Range("Q3").Value 
.Body = Range("Q4").Value 
.Attachments.Add ("C:\Temp\имя файла.xls") 
.Display 
End With 
 
On Error GoTo 0 
Set OutMail = Nothing 
 
cleanup: 
Set OutApp = Nothing 
Kill ("C:\Temp\имя файла.xls") 
 
Application.EnableEvents=True 
Application.DisplayAlerts=True 
Application.ScreenUpdating = True 
End Sub
Благодарю поучавствовавших.
kserems вне форума
Старый 20.07.2012, 13:52   #93
strannick
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
а дописать одну команду для отправки сложно?
http://programmersforum.ru/showpost....98&postcount=2

обратите внимание на последнюю строку в коде
Возвращаясь к командной строке программы The Bat!: я так понимаю, что для того, чтобы отправить почту не с ящика, определенного "по умолчанию", а с какого-либо другого, необходимо в макросе к команде " /MAIL;" приписать имя того самого ящика. Вот не понял как правильно приписать (синтаксис). И еще вопрос: а нельзя ли прописать имя этого ящика в соответствующей ячейке и брать оттуда?
strannick вне форума
Старый 22.07.2012, 17:43   #94
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Вот не понял как правильно приписать (синтаксис)
Не ведь в том моём сообщении есть ссылка на описание параметров командной строки TheBAT... что ещё-то нужно?

Цитата:
АВТОМАТИЗИРОВАННОЕ СОЗДАНИЕ СООБЩЕНИЯ - КОМАНДА /MAIL

Команда /MAIL используется для автоматизированного создания сообщения из
шаблона, текстового файла и/или набора присоединенных файлов на
определенный адрес. Эта команда чрезвычайно полезна для приложений, которые
требуют посылки сообщений электронной почты без вмешательства пользователя,
в соответствии со стандартами сети Интернет. Синтаксис команды /MAIL:
/MAIL [parameter1[;parameter2[;parameter3 [...]]]

Возможные параметры:
USER=значение или U=значение. Значение - название ящика, из которого
должно быть отправлено сообщение. Если параметр FOLDER не определен, будет
отправлено сообщение из папки Inbox данного ящика.
Читаем этот текст внимательно 28 раз, и пробуем:

Код:
' ....
strUSER = "USER=" & Chr(34) & "Название нужного ящика" & Chr(34)
' ....

' формируем командную строку
    Cmd = TheBatPath & " /MAIL;" & strUSER & ";" & strTO & ";" & strSUBJECT & ";" & strTEXT & ";" & strATTACH & " /SENDALL; /MINIMIZE;"

' ...


Цитата:
И еще вопрос: а нельзя ли прописать имя этого ящика в соответствующей ячейке и брать оттуда?
Можно.
В коде это будет выглядеть как-то так:
Код:
strUSER = "USER=" & Chr(34) & range("a3") & Chr(34)
EducatedFool вне форума
Старый 18.10.2012, 09:42   #95
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Код проверил - работает замечательно.
Игорь!
?, почему(у меня на работе) с др. провайдером пишет: "Не удалось отправить письмо" и письма нет.

Приношу с работы - домой ПК, всё ОК!!!
Где "копать"?
valerij вне форума
Старый 18.10.2012, 10:57   #96
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Где "копать"?
1) В настройках Windows (есть библиотека CDO? Используется WinXP?)
2) В настройках антивируса
3) В настройках прокси-сервера
4) В своих мозгах)

В теме приведено множество разных макросов - я догадаться должен, про какой из них идет речь?
EducatedFool вне форума
Старый 18.10.2012, 14:48   #97
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
я догадаться должен, про какой из них идет речь?
Все 4 - ри пункта не подходят, а макрос, вот под W7
Код:
Sub SendAttachment()
    Application.DisplayAlerts = False
        iFileName$ = ThisWorkbook.path & "\Avto XXXX " & ".xls"
            ThisWorkbook.SaveCopyAs Filename:=iFileName$
        If Send_Mail("xxxxx@yandex.ru", "xxxxx@yandex.ru", "Учет-Авто", iFileName$) Then
            MsgBox "Письмо успешно отправлено", vbInformation, ""
                Else
            MsgBox "Не удалось отправить письмо", vbCritical, ""
        End If
            Kill PathName:=iFileName$
    Application.DisplayAlerts = True
End Sub
Function Send_Mail(ByVal MailTo As String, _
                   ByVal MailFrom As String, _
                   ByVal MailSubject As String, _
                   ByVal MailAttachment As String, _
                   Optional ByVal MailText As String = "") As Boolean
    Const cdoConfigURL = "http://schemas.microsoft.com/cdo/configuration/"
    Const SmtpServer = "smtp.yandex.ru"
    Const SendUsername = "xxxxxx@yandex.ru"
    Const SendPassword = "xxxxxxxxxxx"
    On Error Resume Next
    Set cdoConfig = CreateObject("CDO.Configuration")
    With cdoConfig.Fields
        .Item(cdoConfigURL & "sendusing") = 2
        .Item(cdoConfigURL & "smtpauthenticate") = 1
        .Item(cdoConfigURL & "smtpserver") = SmtpServer
        .Item(cdoConfigURL & "sendusername") = SendUsername
        .Item(cdoConfigURL & "sendpassword") = SendPassword
        .Update
    End With
    Set cdoMessage = CreateObject("CDO.Message")
    With cdoMessage
        Set .Configuration = cdoConfig
        .BodyPart.Charset = "koi8-r"
        .From = MailFrom
        .To = MailTo
        .Subject = MailSubject
        .TextBody = MailText
        .AddAttachment MailAttachment
        .Send
    End With
    Set cdoMessage = Nothing: Set cdoConfig = Nothing
    Send_Mail = (Err.Number = 0)
End Function
valerij вне форума
Старый 18.10.2012, 14:58   #98
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Валера, код функции опубликован здесь:
http://excelvba.ru/code/CDO
(в том сообщении на форуме была ссылка)

Почитай внимательно первые предложения в статье:

Цитата:
ВНИМАНИЕ! Данный код гарантированно работает ТОЛЬКО в ОС WindowsXP.
В остальных версиях Windows код не проверял.
В Windows7 данный макрос работать не будет ввиду отсутствия библиотеки CDO for Windows 2000.
(потребуется ручная установка недостающей библиотеки)
EducatedFool вне форума
Старый 18.10.2012, 15:03   #99
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Почитай внимательно первые предложения в статье:
Игорь, ну конечно же я всё читал.
Дома, та же 7 и все работает, на работе только провайдер другой и скорость по <<.
valerij вне форума
Старый 19.10.2012, 19:36   #100
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
В Windows7 данный макрос работать не будет ввиду отсутствия библиотеки CDO for Windows 2000.
Кстати, библиотека CDO for Windows 2000 в W7SP1, присутствует!!!
Изображения
Тип файла: jpg cd.jpg (139.7 Кб, 135 просмотров)
valerij вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка почты Fess HTML и CSS 15 11.03.2010 20:24
Отправка почты Fo][ Работа с сетью в Delphi 1 20.01.2009 23:15
отправка почты? gusluk Работа с сетью в Delphi 2 17.11.2008 07:45
Отправка почты Fenix Nexsais Работа с сетью в Delphi 5 06.09.2007 22:27
Отправка почты Mikola PHP 4 12.08.2007 04:17