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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2016, 11:11   #1
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию Макрос рассылка на различные адресаты

Всем привет!Возник вопрос по макросу - рассылке на разные почтовые адресаты. Есть макрос:

SUB SendMail
Dim objEmail
Const cdoSendUsingPort = 2 ' Send the message using SMTP
Const cdoBasicAuth = 1 ' Clear-text authentication
Const cdoTimeout = 60 ' Timeout for SMTP in seconds
mailServer = "smtp.gmail.com"
SMTPport = 465
mailusername = "maximprusov2000@gmail.com"
mailpassword = "**********" 'your password
mailto = "mprusov@mail.ru;kevlevmax@yandex.r u;gdigdalo@mail.ru"
mailSubject = "Subject line"
mailBody = "This is the email body"
Set objEmail = CreateObject("CDO.Message")
Set objConf = objEmail.Configuration
Set objFlds = objConf.Fields
With objFlds
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword
.Update
End With
objEmail.To = mailto
objEmail.From = mailusername
objEmail.Subject = mailSubject
objEmail.TextBody = mailBody
objEmail.AddAttachment "Z:\Maksim\Macro.xlsx"
objEmail.Send
Set objFlds = Nothing
Set objConf = Nothing
Set objEmail = Nothing

end sub

Если кто сталкивался,подскажите пожалуйста,что нужно изменить в макросе,чтобы РАЗЛИЧНЫЕ файлы xlsx рассылались ОПРЕДЕЛЕННЫМ адресатам? На данный момент,я могу только отсылать один эксель файл "Macro.xlsx" на 3 адреса.Спасибо за внимание к вопросу!
KevLev вне форума Ответить с цитированием
Старый 19.04.2016, 11:32   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

сформируйте массив: A(0)название файла; A(1)список адресатов. И в цикле формируйте текст письма
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.04.2016, 11:38   #3
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Александр спасибо за ответ!Если не трудно,можно подробнее указать,каким образом это сделать.К сожалению с макросами встречаюсь впервые и опыт нулевой.Спасибо за понимание!
KevLev вне форума Ответить с цитированием
Старый 19.04.2016, 11:49   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Попробуйте такой вариант:
Код:
Sub SendMail()
    Dim objEmail
    Const cdoSendUsingPort = 2 ' Send the message using SMTP
    Const cdoBasicAuth = 1 ' Clear-text authentication
    Const cdoTimeout = 60 ' Timeout for SMTP in seconds
    Dim a(1, 5) As String
    a(0, 0) = "mprusov@mail.ru": a(1, 0) = "Z:\Maksim\Macro.xlsx"
    a(0, 1) = "kevlevmax@yandex.ru": a(1, 1) = "Z:\Maksim\Macro.xlsx"
    a(0, 2) = "gdigdalo@mail.ru": a(1, 2) = "Z:\Maksim\Macro.xlsx"
    a(0, 3) = "mprusov@mail.ru;kevlevmax@yandex.ru": a(1, 3) = "Z:\Maksim\Macro.xlsx"
    a(0, 4) = "mprusov@mail.ru;kevlevmax@yandex.ru;gdigdalo@mail.ru": a(1, 4) = "Z:\Maksim\Macro.xlsx"
    a(0, 5) = "mprusov@mail.ru;gdigdalo@mail.ru": a(1, 5) = "Z:\Maksim\Macro.xlsx"
    
    For i = 0 To 5
        mailServer = "smtp.gmail.com"
        SMTPport = 465
        mailusername = "maximprusov2000@gmail.com"
        mailpassword = "**********" 'your password
        mailto = a(0, i) '"mprusov@mail.ru;kevlevmax@yandex.r u;gdigdalo@mail.ru"
        mailSubject = "Subject line"
        mailBody = "This is the email body"
        Set objEmail = CreateObject("CDO.Message")
        Set objConf = objEmail.Configuration
        Set objFlds = objConf.Fields
        With objFlds
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout
            .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth
            .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername
            .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword
            .Update
        End With
        objEmail.To = mailto
        objEmail.From = mailusername
        objEmail.Subject = mailSubject
        objEmail.TextBody = mailBody
        objEmail.AddAttachment a(1, i) '"Z:\Maksim\Macro.xlsx"
        objEmail.Send
    Next
    Set objFlds = Nothing
    Set objConf = Nothing
    Set objEmail = Nothing
    
End Sub
а можете на листе xls в 2 колонки сделать список : адресат-путь к вложению, и оттуда брать, а не с массива.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 19.04.2016 в 11:51.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.04.2016, 12:52   #5
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Александр,сделал,как вы написали.К сожалению появилась ошибка Можно каким то образом исправить?
KevLev вне форума Ответить с цитированием
Старый 19.04.2016, 13:44   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Можно, только надобно знать что за ошибка, в какой строке, иметь файла откуда запускаете макрос.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.04.2016, 14:08   #7
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Ошибка в строке Dim a(1, 5) As String .При запуске макроса пишет "Expected end of statement".
KevLev вне форума Ответить с цитированием
Старый 19.04.2016, 14:11   #8
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

кажется as Sting надо удалить
KevLev вне форума Ответить с цитированием
Старый 19.04.2016, 14:21   #9
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Ну удалите. Пускай vba сам определяет как ему удобнеея запускал код у себя, ошибка была только на отсутствие файла
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.04.2016, 14:26   #10
KevLev
Пользователь
 
Регистрация: 19.04.2016
Сообщений: 48
По умолчанию

Александр сработало!Спасибо вам за внимание к вопросу!Очень помогли!
KevLev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различные виды строк в С++ over96 Общие вопросы C/C++ 4 22.01.2012 13:47
вывести различные цифры DinamoBrynsk Помощь студентам 7 06.01.2011 18:45
Различные системы координат Kostia Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 14.05.2010 13:39
Перевод чисел в различные С.С. Omedus Общие вопросы Delphi 5 05.11.2007 14:06