Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Автоматическая отправка файла посредством OutLook - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическая отправка файла посредством OutLook (Макросы/Sub)
Автоматическая отправка файла посредством OutLook
Bulava81 Дата: Пятница, 20.06.2014, 07:28 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Уважаемые, не подскажите мне в рамках данного макроса хотелось бы решить следующие задачи:
Просматривать несколько диапазонов и сравнивать не с текущей датой, а с датой за три дня до текущей и для каждого диапазона сравнения дат свой адресат для отправки и при отправке прикреплять файл, с которым я работаю.
Насколько я вижу решение данного вопроса заключается в следующем:

[vba]
Код
Sub Mail_Workbook_1()
Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
' Change the mail address and subject in the macro before you run it.

' Nado sravnit datu v "B2:B11" s segodniashnei datoj i esli sovpodaet avtomaticheski vyslat email

If Range("B2:B11") = Date-3 Then
With OutMail
.To = "sklad@awt.ru"
.CC = ""
.Subject = "Finished bron"
.Body = "Text of the letter"
.Attachments.Add "C:\Users\buzdugan\Desktop\.......xlsm"
.Send

End With

Else
If Range("C2:C11") = Date-3 Then 'И так цикл повторять для каждого диапазона?
With OutMail
.To = "a.buzdugan@awt.ru"
.CC = ""
.BCC = ""
.Subject = "Finished bron"
.Body = "Text of the letter"
.Attachments.Add "C:\Users\buzdugan\Desktop\.....xlsm"
.Send

End With
End If
End If
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Sub
[/vba]


Сообщение отредактировал Bulava81 - Пятница, 20.06.2014, 10:35
 
Ответить
СообщениеУважаемые, не подскажите мне в рамках данного макроса хотелось бы решить следующие задачи:
Просматривать несколько диапазонов и сравнивать не с текущей датой, а с датой за три дня до текущей и для каждого диапазона сравнения дат свой адресат для отправки и при отправке прикреплять файл, с которым я работаю.
Насколько я вижу решение данного вопроса заключается в следующем:

[vba]
Код
Sub Mail_Workbook_1()
Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

On Error Resume Next
' Change the mail address and subject in the macro before you run it.

' Nado sravnit datu v "B2:B11" s segodniashnei datoj i esli sovpodaet avtomaticheski vyslat email

If Range("B2:B11") = Date-3 Then
With OutMail
.To = "sklad@awt.ru"
.CC = ""
.Subject = "Finished bron"
.Body = "Text of the letter"
.Attachments.Add "C:\Users\buzdugan\Desktop\.......xlsm"
.Send

End With

Else
If Range("C2:C11") = Date-3 Then 'И так цикл повторять для каждого диапазона?
With OutMail
.To = "a.buzdugan@awt.ru"
.CC = ""
.BCC = ""
.Subject = "Finished bron"
.Body = "Text of the letter"
.Attachments.Add "C:\Users\buzdugan\Desktop\.....xlsm"
.Send

End With
End If
End If
On Error GoTo 0

Set OutMail = Nothing
Set OutApp = Nothing
End Sub
[/vba]

Автор - Bulava81
Дата добавления - 20.06.2014 в 07:28
Rioran Дата: Пятница, 20.06.2014, 10:42 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, здравствуйте.

Опишите логику работы будущего макроса подробнее.

1). Если в В2:В11 мы не нашли нужную дату, переходим на С2:С11? Если и там не нашли, то идём на D2:D11? И так далее до бесконечности?
2). Когда нужная дата найдена, цикл поиска прекращаем и отправляем письмо? Или надо перебрать все столбцы?
3). Проверять надо, чтобы весь столбец содержал одинаковую дату с Икс2 по Икс11? Или достаточно, чтобы нужная дата проверялась только в Икс2 ячейке?

Для отправки по каждому отдельному столбцу своего письма, нужно чтобы в столбце содержалась нужная информация, которая меняется от одного к другому. Это отдельная ячейка для имени адресата и, если надо отправлять разные файлы, то ещё одна ячейка с ссылкой на правильный файл.

[offtop]Прикреплять файл, с которым работаете - признак хорошего тона.[/offtop]
[moder]Прикреплять файл - обязательное условие, прописанное в Правилах форума.[/moder]
Когда Rioran намекает - модератор бьёт в лоб =)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Пятница, 20.06.2014, 13:48
 
Ответить
СообщениеBulava81, здравствуйте.

Опишите логику работы будущего макроса подробнее.

1). Если в В2:В11 мы не нашли нужную дату, переходим на С2:С11? Если и там не нашли, то идём на D2:D11? И так далее до бесконечности?
2). Когда нужная дата найдена, цикл поиска прекращаем и отправляем письмо? Или надо перебрать все столбцы?
3). Проверять надо, чтобы весь столбец содержал одинаковую дату с Икс2 по Икс11? Или достаточно, чтобы нужная дата проверялась только в Икс2 ячейке?

Для отправки по каждому отдельному столбцу своего письма, нужно чтобы в столбце содержалась нужная информация, которая меняется от одного к другому. Это отдельная ячейка для имени адресата и, если надо отправлять разные файлы, то ещё одна ячейка с ссылкой на правильный файл.

[offtop]Прикреплять файл, с которым работаете - признак хорошего тона.[/offtop]
[moder]Прикреплять файл - обязательное условие, прописанное в Правилах форума.[/moder]
Когда Rioran намекает - модератор бьёт в лоб =)

Автор - Rioran
Дата добавления - 20.06.2014 в 10:42
Bulava81 Дата: Пятница, 20.06.2014, 12:28 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, Rioran!
Спасибо, что откликнулись на мою просьбу:)
Логика работы данного инструмента в следующем: Есть конечное множество столбцов с датами бронирования оборудования (17) эти диапазоны я и буду указывать (например: Range ("A1:A100, C1:B100, D1:D100")), макросу необходимо просканировать эти диапазоны (то есть все ячейки, указанные в этих диапазонах) и если в заданном диапазоне выполняется условие, то есть есть хоть одна дата которая находится за три дня до текущей, то отправляется данный файл указанному адресату (адресаты разные) с определенной текстовкой (текстовка впринципе будет одна и та же, только будет отличаться обращение). Далее макрос переходит сканировать на следующий диапазон, если в новом диапазоне, при сканировании по датам, выполнится вышеуказанное условие, то производится отправка данного файла другому адресату, если в данном диапазоне по датам условие не выполняется, то отправки файла адресату, которого я укажу для данного диапазона не происходит и макрос переходит на следующий диапазон.
Касательно прикрепления файла я уже разобрался, еще раз повторюсь файл будет для всех одинаков. У меня не получается составить последовательность циклов для просмотра/сканирования диапазонов и отправки нужному адресату. Соответственно текстовку и обращение и пропишу в .Body = "Text of the letter", поскольку адресаты у меня фиксированные и меняются очень редко, поэтому здесь я смогу на ручном приводе производить корректировку.
Если Вы мне поможете с формированием циклом, я Вам буду премного благодарен.
В указанном мною макросе, второй цикл через оператор Else не работает, первый проходит и отправляет все как нужно.
К сообщению приложен файл: ___.xlsm (34.9 Kb)


Сообщение отредактировал Bulava81 - Пятница, 20.06.2014, 12:44
 
Ответить
СообщениеДобрый день, Rioran!
Спасибо, что откликнулись на мою просьбу:)
Логика работы данного инструмента в следующем: Есть конечное множество столбцов с датами бронирования оборудования (17) эти диапазоны я и буду указывать (например: Range ("A1:A100, C1:B100, D1:D100")), макросу необходимо просканировать эти диапазоны (то есть все ячейки, указанные в этих диапазонах) и если в заданном диапазоне выполняется условие, то есть есть хоть одна дата которая находится за три дня до текущей, то отправляется данный файл указанному адресату (адресаты разные) с определенной текстовкой (текстовка впринципе будет одна и та же, только будет отличаться обращение). Далее макрос переходит сканировать на следующий диапазон, если в новом диапазоне, при сканировании по датам, выполнится вышеуказанное условие, то производится отправка данного файла другому адресату, если в данном диапазоне по датам условие не выполняется, то отправки файла адресату, которого я укажу для данного диапазона не происходит и макрос переходит на следующий диапазон.
Касательно прикрепления файла я уже разобрался, еще раз повторюсь файл будет для всех одинаков. У меня не получается составить последовательность циклов для просмотра/сканирования диапазонов и отправки нужному адресату. Соответственно текстовку и обращение и пропишу в .Body = "Text of the letter", поскольку адресаты у меня фиксированные и меняются очень редко, поэтому здесь я смогу на ручном приводе производить корректировку.
Если Вы мне поможете с формированием циклом, я Вам буду премного благодарен.
В указанном мною макросе, второй цикл через оператор Else не работает, первый проходит и отправляет все как нужно.

Автор - Bulava81
Дата добавления - 20.06.2014 в 12:28
Rioran Дата: Пятница, 20.06.2014, 13:46 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, укажите, какие именно ячейки должны проверяться в Вашем файле? Какие колонки? Просматривать все подряд - малопроизводительное занятие.

Текстовка для одного и того же файла всегда будет одинакова? Или Вы должны вручную вбивать особые ситуативные комментарии?

Сам цикл, который Вам нужен - очень прост. Самое трудное всегда - корректно сформулировать хотелки.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеBulava81, укажите, какие именно ячейки должны проверяться в Вашем файле? Какие колонки? Просматривать все подряд - малопроизводительное занятие.

Текстовка для одного и того же файла всегда будет одинакова? Или Вы должны вручную вбивать особые ситуативные комментарии?

Сам цикл, который Вам нужен - очень прост. Самое трудное всегда - корректно сформулировать хотелки.

Автор - Rioran
Дата добавления - 20.06.2014 в 13:46
Bulava81 Дата: Пятница, 20.06.2014, 14:04 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Во вложенном файле Колонки по названием "Дн до ОБ" рассчитывают кол-во дней до окончании бронирования (например: "K6:K1335, P6:P1335, U6:U1335 и т. д.), если число равно 3 (то есть до окончания брони остается три дня), то отправляется файл адресату.
Цитата
Текстовка для одного и того же файла всегда будет одинакова?
Да, для всех одинакова.
 
Ответить
СообщениеВо вложенном файле Колонки по названием "Дн до ОБ" рассчитывают кол-во дней до окончании бронирования (например: "K6:K1335, P6:P1335, U6:U1335 и т. д.), если число равно 3 (то есть до окончания брони остается три дня), то отправляется файл адресату.
Цитата
Текстовка для одного и того же файла всегда будет одинакова?
Да, для всех одинакова.

Автор - Bulava81
Дата добавления - 20.06.2014 в 14:04
anvg Дата: Пятница, 20.06.2014, 15:51 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Bulava81, доброе время суток
А почему не сообщаете о кроссе http://www.planetaexcel.ru/forum....utlook? И тут и там ведь отвечают.
 
Ответить
СообщениеBulava81, доброе время суток
А почему не сообщаете о кроссе http://www.planetaexcel.ru/forum....utlook? И тут и там ведь отвечают.

Автор - anvg
Дата добавления - 20.06.2014 в 15:51
Bulava81 Дата: Пятница, 20.06.2014, 16:20 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
anvg, отвечая на Ваш вопрос, хотелось бы сказать следующее:
Во первых, Вы приводите ссылку, которая не понятно куда ссылается;
Во вторых, это другой сайт;
В третьих даже, если я консультируюсь с разными умными людьми, то это не является признаком плохого тона и данный шаг является сугубо моим личным делом о чем я сообщать вообще не кому не обязан.
Поэтому, принимая во внимание все вышесказанное, я ничем не нарушил правила форума.
 
Ответить
Сообщениеanvg, отвечая на Ваш вопрос, хотелось бы сказать следующее:
Во первых, Вы приводите ссылку, которая не понятно куда ссылается;
Во вторых, это другой сайт;
В третьих даже, если я консультируюсь с разными умными людьми, то это не является признаком плохого тона и данный шаг является сугубо моим личным делом о чем я сообщать вообще не кому не обязан.
Поэтому, принимая во внимание все вышесказанное, я ничем не нарушил правила форума.

Автор - Bulava81
Дата добавления - 20.06.2014 в 16:20
Rioran Дата: Пятница, 20.06.2014, 16:24 | Сообщение № 8
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, и последний вопрос - в столбцах "Дн до ОБ" Вы указываете число 3, например, которое надо найти, или дату?


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеBulava81, и последний вопрос - в столбцах "Дн до ОБ" Вы указываете число 3, например, которое надо найти, или дату?

Автор - Rioran
Дата добавления - 20.06.2014 в 16:24
Bulava81 Дата: Понедельник, 23.06.2014, 06:54 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, Rioran!
Цитата
в столбцах "Дн до ОБ"
у меня прописана формула, которая считает количество дней до окончании брони, то есть =ЕСЛИ(J6="";"";J6-СЕГОДНЯ()), где J6 -это дата окончания брони (столбцы "Дата ОБ"). Как видно из формулы, столбцы "Дн до ОБ", автоматически меняют количество дней до окончании брони в зависимости от "СЕГОДНЯ()" , и соответственно, как только остается три дня до наступления окончания брони, то есть в столбце появляется цифра 3, то макрос автоматически отправляет для для указанного в данном столбце адресата вложенный файл, насколько я понимаю, Rioran, я могу вручную прописать этого адресата в макросе, поскольку, как я говорил выше адресатов небольшое множество и меняются они крайне редко. Вопрос, только в цикле...
Rioran, надеюсь на вашу помощь!
 
Ответить
СообщениеДобрый день, Rioran!
Цитата
в столбцах "Дн до ОБ"
у меня прописана формула, которая считает количество дней до окончании брони, то есть =ЕСЛИ(J6="";"";J6-СЕГОДНЯ()), где J6 -это дата окончания брони (столбцы "Дата ОБ"). Как видно из формулы, столбцы "Дн до ОБ", автоматически меняют количество дней до окончании брони в зависимости от "СЕГОДНЯ()" , и соответственно, как только остается три дня до наступления окончания брони, то есть в столбце появляется цифра 3, то макрос автоматически отправляет для для указанного в данном столбце адресата вложенный файл, насколько я понимаю, Rioran, я могу вручную прописать этого адресата в макросе, поскольку, как я говорил выше адресатов небольшое множество и меняются они крайне редко. Вопрос, только в цикле...
Rioran, надеюсь на вашу помощь!

Автор - Bulava81
Дата добавления - 23.06.2014 в 06:54
Rioran Дата: Понедельник, 23.06.2014, 10:07 | Сообщение № 10
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, здравствуйте.

Не имею возможности пройти по ссылке на параллельное обсуждение, поэтому пишу не зная, как у Вас дела обстоят там.

Доработал макрос из начального поста. Добавил от себя в файл лист "Списки" где должны быть указаны адреса получателей (P.S. - прописывать их вручную - противоречит моей религии лентяя :D ). Учёл особенности структуры листа "Базы данных".

Как работает:

1). Макрос перебирает 3-ю строку листа "Базы данных" и ищет ячейки с "Дн до ОБ".
2). В столбце с найденной ячейкой ищет цифру 3. Если найдена...
3). Ищет имя по листу "Списки" и берёт оттуда адрес почты. Отправляет письмо.

Для теста работы макроса (Обязательно!) в любом из столбцов с заголовком "Дн до ОБ" пропишите в любой строке от 4 до 14 цифру 3. На листе "списки" у соответствующего человека в ячейке пропишите соответствующий адрес почты.

[vba]
Код
Sub Mail_Workbook_1()

Dim X As Long 'Для перебора столбцов базы данных
Dim Y As Long 'Для перебора строк базы данных
Dim Z As Long 'Для перебора строк по спискам адресов получателей
Dim shtX As Worksheet 'Для листа "Базы Данных"
Dim shtY As Worksheet 'Для листа "Списки" с адресами получателей
Dim Mail_Name As String 'Имя адресата для отправки письма

Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Set shtX = ThisWorkbook.Sheets("База Данных")
Set shtY = ThisWorkbook.Sheets("Списки")

On Error Resume Next

For X = 1 To shtX.Cells(3, shtX.Columns.Count).End(xlToLeft).Column
      If shtX.Cells(3, X).Value = "Дн до ОБ" Then
          For Y = 4 To 14
              If shtX.Cells(Y, X).Value = 3 Then
                  For Z = 2 To shtY.Cells(shtY.Rows.Count, 1).End(xlUp).Row
                      If shtX.Cells(1, X - 3).Value = shtY.Cells(Z, 1).Value Then
                          Mail_Name = shtY.Cells(Z, 2).Value
                          With OutMail
                    .To = Mail_Name
                    .CC = ""
                    .Subject = "Finished bron"
                    .Body = "Text of the letter"
                    .Attachments.Add "C:\Users\buzdugan\Desktop\.......xlsm"
                    .Send
                          End With
                      End If
                  Next Z
              End If
          Next Y
      End If
Next X

On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing

End Sub
[/vba]
При желании в таблице "Списки" можно также указать разные файлы, заголовки писем и содержание писем. С лёгкой модификацией кода письмо будет отправляться с нужными параметрами.
К сообщению приложен файл: one_more_circle.xlsm (40.7 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Понедельник, 23.06.2014, 11:39
 
Ответить
СообщениеBulava81, здравствуйте.

Не имею возможности пройти по ссылке на параллельное обсуждение, поэтому пишу не зная, как у Вас дела обстоят там.

Доработал макрос из начального поста. Добавил от себя в файл лист "Списки" где должны быть указаны адреса получателей (P.S. - прописывать их вручную - противоречит моей религии лентяя :D ). Учёл особенности структуры листа "Базы данных".

Как работает:

1). Макрос перебирает 3-ю строку листа "Базы данных" и ищет ячейки с "Дн до ОБ".
2). В столбце с найденной ячейкой ищет цифру 3. Если найдена...
3). Ищет имя по листу "Списки" и берёт оттуда адрес почты. Отправляет письмо.

Для теста работы макроса (Обязательно!) в любом из столбцов с заголовком "Дн до ОБ" пропишите в любой строке от 4 до 14 цифру 3. На листе "списки" у соответствующего человека в ячейке пропишите соответствующий адрес почты.

[vba]
Код
Sub Mail_Workbook_1()

Dim X As Long 'Для перебора столбцов базы данных
Dim Y As Long 'Для перебора строк базы данных
Dim Z As Long 'Для перебора строк по спискам адресов получателей
Dim shtX As Worksheet 'Для листа "Базы Данных"
Dim shtY As Worksheet 'Для листа "Списки" с адресами получателей
Dim Mail_Name As String 'Имя адресата для отправки письма

Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
Set shtX = ThisWorkbook.Sheets("База Данных")
Set shtY = ThisWorkbook.Sheets("Списки")

On Error Resume Next

For X = 1 To shtX.Cells(3, shtX.Columns.Count).End(xlToLeft).Column
      If shtX.Cells(3, X).Value = "Дн до ОБ" Then
          For Y = 4 To 14
              If shtX.Cells(Y, X).Value = 3 Then
                  For Z = 2 To shtY.Cells(shtY.Rows.Count, 1).End(xlUp).Row
                      If shtX.Cells(1, X - 3).Value = shtY.Cells(Z, 1).Value Then
                          Mail_Name = shtY.Cells(Z, 2).Value
                          With OutMail
                    .To = Mail_Name
                    .CC = ""
                    .Subject = "Finished bron"
                    .Body = "Text of the letter"
                    .Attachments.Add "C:\Users\buzdugan\Desktop\.......xlsm"
                    .Send
                          End With
                      End If
                  Next Z
              End If
          Next Y
      End If
Next X

On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing

End Sub
[/vba]
При желании в таблице "Списки" можно также указать разные файлы, заголовки писем и содержание писем. С лёгкой модификацией кода письмо будет отправляться с нужными параметрами.

Автор - Rioran
Дата добавления - 23.06.2014 в 10:07
Bulava81 Дата: Понедельник, 23.06.2014, 12:30 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я попробовал работать с макросом и Вы знаете у меня возникло две проблемы:
1. Если я вношу в таблицу в несколько ячеек число три (для проверки) в разные диапазоны, то макрос отправляет только одному адресату;
2. Согласно тому же первому условию, то есть если в нескольких ячейках диапазона "Дн до ОБ" для разных адресатов стоит три дня до окончания брони, то макрос в приложении (в прикладываемом файле) его дублирует то количество раз которое он нашел число три, иными словами одному адресату прикладывается три, четыре и т.д. файлов указанных в макросе:
[vba]
Код
.Attachments.Add "C:\Users\buzdugan\Desktop\.....xlsm"
[/vba]


Сообщение отредактировал Bulava81 - Понедельник, 23.06.2014, 12:33
 
Ответить
СообщениеЯ попробовал работать с макросом и Вы знаете у меня возникло две проблемы:
1. Если я вношу в таблицу в несколько ячеек число три (для проверки) в разные диапазоны, то макрос отправляет только одному адресату;
2. Согласно тому же первому условию, то есть если в нескольких ячейках диапазона "Дн до ОБ" для разных адресатов стоит три дня до окончания брони, то макрос в приложении (в прикладываемом файле) его дублирует то количество раз которое он нашел число три, иными словами одному адресату прикладывается три, четыре и т.д. файлов указанных в макросе:
[vba]
Код
.Attachments.Add "C:\Users\buzdugan\Desktop\.....xlsm"
[/vba]

Автор - Bulava81
Дата добавления - 23.06.2014 в 12:30
Bulava81 Дата: Понедельник, 23.06.2014, 12:55 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Цитата
Не имею возможности пройти по ссылке на параллельное обсуждение, поэтому пишу не зная, как у Вас дела обстоят там.

С Вами диалог получается более конструктивный:)
 
Ответить
Сообщение
Цитата
Не имею возможности пройти по ссылке на параллельное обсуждение, поэтому пишу не зная, как у Вас дела обстоят там.

С Вами диалог получается более конструктивный:)

Автор - Bulava81
Дата добавления - 23.06.2014 в 12:55
Rioran Дата: Понедельник, 23.06.2014, 14:12 | Сообщение № 13
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, поправил цикл.

Проверьте. Теперь должно креативить писем сколько нужно и одно письмо - только одному адресату.

[vba]
Код
Sub Mail_Workbook_1()

Dim W As Boolean 'Для проверки на дубли
Dim X As Long 'Для перебора столбцов базы данных
Dim Y As Long 'Для перебора строк базы данных
Dim Z As Long 'Для перебора строк по спискам адресов получателей
Dim shtX As Worksheet 'Для листа "Базы Данных"
Dim shtY As Worksheet 'Для листа "Списки" с адресами получателей
Dim Mail_Name As String 'Имя адресата для отправки письма

Dim OutApp As Object
Dim OutMail As Object

Set shtX = ThisWorkbook.Sheets("База Данных")
Set shtY = ThisWorkbook.Sheets("Списки")

For X = 1 To shtX.Cells(3, shtX.Columns.Count).End(xlToLeft).Column
     W = False
     If shtX.Cells(3, X).Value = "Дн до ОБ" Then
         For Y = 4 To 14
             If shtX.Cells(Y, X).Value = 3 Then
                 For Z = 2 To shtY.Cells(shtY.Rows.Count, 1).End(xlUp).Row
                     If shtX.Cells(1, X - 3).Value = shtY.Cells(Z, 1).Value Then
                         Mail_Name = shtY.Cells(Z, 2).Value
                         Set OutApp = CreateObject("Outlook.Application")
                         Set OutMail = OutApp.CreateItem(0)
                         On Error Resume Next
                         With OutMail
                             .To = Mail_Name
                             .CC = ""
                             .Subject = "Finished bron"
                             .Body = "Text of the letter"
                             .Attachments.Add "C:\Users\buzdugan\Desktop\.......xlsm"
                             .Send
                         End With
                         On Error GoTo 0
                         Set OutMail = Nothing
                         Set OutApp = Nothing
                         W = True
                     End If
                 If W = True Then Exit For
                 Next Z
             End If
         If W = True Then Exit For
         Next Y
     End If
Next X

End Sub
[/vba]
К сообщению приложен файл: 5669230.xlsm (41.0 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеBulava81, поправил цикл.

Проверьте. Теперь должно креативить писем сколько нужно и одно письмо - только одному адресату.

[vba]
Код
Sub Mail_Workbook_1()

Dim W As Boolean 'Для проверки на дубли
Dim X As Long 'Для перебора столбцов базы данных
Dim Y As Long 'Для перебора строк базы данных
Dim Z As Long 'Для перебора строк по спискам адресов получателей
Dim shtX As Worksheet 'Для листа "Базы Данных"
Dim shtY As Worksheet 'Для листа "Списки" с адресами получателей
Dim Mail_Name As String 'Имя адресата для отправки письма

Dim OutApp As Object
Dim OutMail As Object

Set shtX = ThisWorkbook.Sheets("База Данных")
Set shtY = ThisWorkbook.Sheets("Списки")

For X = 1 To shtX.Cells(3, shtX.Columns.Count).End(xlToLeft).Column
     W = False
     If shtX.Cells(3, X).Value = "Дн до ОБ" Then
         For Y = 4 To 14
             If shtX.Cells(Y, X).Value = 3 Then
                 For Z = 2 To shtY.Cells(shtY.Rows.Count, 1).End(xlUp).Row
                     If shtX.Cells(1, X - 3).Value = shtY.Cells(Z, 1).Value Then
                         Mail_Name = shtY.Cells(Z, 2).Value
                         Set OutApp = CreateObject("Outlook.Application")
                         Set OutMail = OutApp.CreateItem(0)
                         On Error Resume Next
                         With OutMail
                             .To = Mail_Name
                             .CC = ""
                             .Subject = "Finished bron"
                             .Body = "Text of the letter"
                             .Attachments.Add "C:\Users\buzdugan\Desktop\.......xlsm"
                             .Send
                         End With
                         On Error GoTo 0
                         Set OutMail = Nothing
                         Set OutApp = Nothing
                         W = True
                     End If
                 If W = True Then Exit For
                 Next Z
             End If
         If W = True Then Exit For
         Next Y
     End If
Next X

End Sub
[/vba]

Автор - Rioran
Дата добавления - 23.06.2014 в 14:12
Bulava81 Дата: Понедельник, 23.06.2014, 14:41 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Голубчик Мой, Вы просто ГЕНИЙ!!!!:) hands Огромное Вам спасибо, вот теперь все заработало, как нужно!
Очень Вам Благодарен Rioran!!! (к сожалению не знаю Вашего имени).
 
Ответить
СообщениеГолубчик Мой, Вы просто ГЕНИЙ!!!!:) hands Огромное Вам спасибо, вот теперь все заработало, как нужно!
Очень Вам Благодарен Rioran!!! (к сожалению не знаю Вашего имени).

Автор - Bulava81
Дата добавления - 23.06.2014 в 14:41
Bulava81 Дата: Понедельник, 23.06.2014, 14:59 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я для более унифицированного подхода, хотел еще один интересный вопрос решить -это вставка подписи в отправляемое письмо. И в принципе даже нашел часть макроса по извлечению подписи из txt файла, но к сожалению мои знания не позволяют интегрировать эту часть макроса с Вашим творением, к тому же в данном макросе у меня не до конца получалось реализовать эту функцию, вместо извлеченной подписи у меня в теле письма прикладывалась информация из первого столбца отправляемого файла.
Не поможете разобраться в этом вопросе, Rioran?

[vba]
Код

Sub Mail_Workbook_1()
Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range

Application.ScreenUpdating = False
Workbooks.OpenText "C:\Users\user11111\AppData\Roaming\Microsoft\Signatures\Aleksey.txt"
For li = ActiveSheet.UsedRange.Row To ActiveSheet.UsedRange.Rows.Count
sSignature = sSignature & vbCrLf & Cells(li, ActiveSheet.UsedRange.Column)
Next li
ActiveWorkbook.Close False

Set OutApp = CreateObject("Outlook.Application")

OutApp.Session.Logon
On Error GoTo cleanup

Set OutMail = OutApp.CreateItem(0)
       
On Error Resume Next
' Change the mail address and subject in the macro before you run it.
..........................
..........................
...........................
On Error GoTo 0
       
Set OutMail = Nothing
cleanup:
Set OutApp = Nothing

Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 0301684.xlsm (36.0 Kb)


Сообщение отредактировал Bulava81 - Понедельник, 23.06.2014, 15:54
 
Ответить
СообщениеЯ для более унифицированного подхода, хотел еще один интересный вопрос решить -это вставка подписи в отправляемое письмо. И в принципе даже нашел часть макроса по извлечению подписи из txt файла, но к сожалению мои знания не позволяют интегрировать эту часть макроса с Вашим творением, к тому же в данном макросе у меня не до конца получалось реализовать эту функцию, вместо извлеченной подписи у меня в теле письма прикладывалась информация из первого столбца отправляемого файла.
Не поможете разобраться в этом вопросе, Rioran?

[vba]
Код

Sub Mail_Workbook_1()
Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range

Application.ScreenUpdating = False
Workbooks.OpenText "C:\Users\user11111\AppData\Roaming\Microsoft\Signatures\Aleksey.txt"
For li = ActiveSheet.UsedRange.Row To ActiveSheet.UsedRange.Rows.Count
sSignature = sSignature & vbCrLf & Cells(li, ActiveSheet.UsedRange.Column)
Next li
ActiveWorkbook.Close False

Set OutApp = CreateObject("Outlook.Application")

OutApp.Session.Logon
On Error GoTo cleanup

Set OutMail = OutApp.CreateItem(0)
       
On Error Resume Next
' Change the mail address and subject in the macro before you run it.
..........................
..........................
...........................
On Error GoTo 0
       
Set OutMail = Nothing
cleanup:
Set OutApp = Nothing

Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Bulava81
Дата добавления - 23.06.2014 в 14:59
Rioran Дата: Понедельник, 23.06.2014, 15:24 | Сообщение № 16
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, это отдельный хороший вопрос. Давайте создадим для этого отдельную тему, куда будет приложен наш файл.

Также просьба отредактировать ваше сообщение № 15 - удалите всю часть связанную с VBA. Вставьте VBA код снова, выделите мышью от первого символа кода до последнего и один раз нажмите на знак "#" на панели инструментов форума, который проставит теги VBA.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Понедельник, 23.06.2014, 15:25
 
Ответить
СообщениеBulava81, это отдельный хороший вопрос. Давайте создадим для этого отдельную тему, куда будет приложен наш файл.

Также просьба отредактировать ваше сообщение № 15 - удалите всю часть связанную с VBA. Вставьте VBA код снова, выделите мышью от первого символа кода до последнего и один раз нажмите на знак "#" на панели инструментов форума, который проставит теги VBA.

Автор - Rioran
Дата добавления - 23.06.2014 в 15:24
Bulava81 Дата: Понедельник, 23.06.2014, 15:42 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Все сделаю!
 
Ответить
СообщениеВсе сделаю!

Автор - Bulava81
Дата добавления - 23.06.2014 в 15:42
Bulava81 Дата: Понедельник, 07.07.2014, 07:14 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Друзья, не подскажите, как модифицировать вышеуказанный работающий макрос таким образом, чтобы рассылка происходила автоматически при неактивном файле excel и/или даже при выключенном компьютере (и вообще возможно ли это)?


Сообщение отредактировал Bulava81 - Понедельник, 07.07.2014, 07:21
 
Ответить
СообщениеДрузья, не подскажите, как модифицировать вышеуказанный работающий макрос таким образом, чтобы рассылка происходила автоматически при неактивном файле excel и/или даже при выключенном компьютере (и вообще возможно ли это)?

Автор - Bulava81
Дата добавления - 07.07.2014 в 07:14
Rioran Дата: Понедельник, 07.07.2014, 09:37 | Сообщение № 19
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Bulava81, есть такой вариант.

С помощью метода .ApplicationOnTime можно вечером включить макрос, а в заранее указанное время он сработает и отправит рассылку. Если компьютер пожизненно включен (то есть, работу макроса ничто не прервёт), можно задать программе например: "А отправляй-ка ты мне рассылку каждый день в 9:00".

Без компьютера обойтись вряд ли получится - код должен где-то отрабатываться. Вы можете арендовать сервер, на котором будут происходить все вычисления и операции, если хотите от этого избавить Вашу машину.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеBulava81, есть такой вариант.

С помощью метода .ApplicationOnTime можно вечером включить макрос, а в заранее указанное время он сработает и отправит рассылку. Если компьютер пожизненно включен (то есть, работу макроса ничто не прервёт), можно задать программе например: "А отправляй-ка ты мне рассылку каждый день в 9:00".

Без компьютера обойтись вряд ли получится - код должен где-то отрабатываться. Вы можете арендовать сервер, на котором будут происходить все вычисления и операции, если хотите от этого избавить Вашу машину.

Автор - Rioran
Дата добавления - 07.07.2014 в 09:37
Bulava81 Дата: Понедельник, 07.07.2014, 10:47 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Роман, добрый день! Рад Вас видеть:)
То есть получается, чтобы в назначенное время макрос производил рассылку необходимо, чтобы файл был всегда открыт или это условие необязательно? (соответственно с ПК понятно, чтобы он был всегда включен)
А Вы не могли бы подсказать в каком виде будет выглядеть метод .ApplicationOnTime, если к примеру необходимо, чтобы макрос производил рассылку в 8:00 каждый день, в соответствии с теми условиями, которые мы совместно с Вами уже благополучно прописали в макросе?
Есть еще один вопрос макрос автоматически не отправляет письма, а выводит их на дисплей, то есть как с функцией .Display, хотя у меня прописано .Send? поэтому мне приходится каждое письмо подтверждать при отправке, а хотелось бы автоматизировать данную процедуру по назначенному времени:) Буду Вам премного благодарен за помощь!!!
Еще раз привожу ниже текст макроса:
[vba]
Код
Sub Send_Mail ()

Dim W As Boolean 'Äëÿ ïðîâåðêè íà äóáëè
Dim X As Long 'Äëÿ ïåðåáîðà ñòîëáöîâ áàçû äàííûõ
Dim Y As Long 'Äëÿ ïåðåáîðà ñòðîê áàçû äàííûõ
Dim Z As Long 'Äëÿ ïåðåáîðà ñòðîê ïî ñïèñêàì àäðåñîâ ïîëó÷àòåëåé
Dim shtX As Worksheet 'Äëÿ ëèñòà "Áàçû Äàííûõ"
Dim shtY As Worksheet 'Äëÿ ëèñòà "Ñïèñêè" ñ àäðåñàìè ïîëó÷àòåëåé
Dim Mail_Name As String 'Èìÿ àäðåñàòà äëÿ îòïðàâêè ïèñüìà

Dim OutApp As Object
Dim OutMail As Object

Set shtX = ThisWorkbook.Sheets("Áàçà Äàííûõ")
Set shtY = ThisWorkbook.Sheets("Ñïèñêè")

For X = 1 To shtX.Cells(3, shtX.Columns.Count).End(xlToLeft).Column
       W = False
       If shtX.Cells(3, X).Value = "Äí äî ÎÁ" Then
           For Y = 4 To 2000
               If shtX.Cells(Y, X).Value = 1 Or shtX.Cells(Y, X).Value = 2 Or shtX.Cells(Y, X).Value = 3 Or shtX.Cells(Y, X).Value = 4 Then
                   For Z = 2 To shtY.Cells(shtY.Rows.Count, 1).End(xlUp).Row
                       If shtX.Cells(1, X - 3).Value = shtY.Cells(Z, 1).Value Then
                           Mail_Name = shtY.Cells(Z, 2).Value
                           Set OutApp = CreateObject("Outlook.Application")
                           Set OutMail = OutApp.CreateItem(0)
                           On Error Resume Next
                           With OutMail
                     .Display
                     .To = Mail_Name
                     .CC = "a.buzdugan@awt.ru"
                     .Subject = "Îêîí÷àíèå Áðîíè íà îáîðóäîâàíèå"
                     .HTMLBody = "Óâàæàåìûå Êîëëåãè! Ïðîøó Âàñ ïðîâåðèòü ñîñòîÿíèå áðîíè â ñîîòâåòñòâèè ñ âëîæåííûì ôàéëîì. Ñíÿòü/ïðîäëèòü.  äåíü îêîí÷àíèÿ áðîíè Âàøà áðîíü àâòîìàòè÷åñêè óäàëÿåòñÿ ñèñòåìîé." & .HTMLBody
                     .Attachments.Add "\\Files\documents\-ÍÎÂÀß ÑÒÐÓÊÒÓÐÀ-\Äåïàðòàìåíò ïîñòàâîê è òîðãîâûõ îïåðàöèé\Îáîðóäîâàíèå\Áðîíèðîâàíèå è íàëè÷èå îáîðóäîâàíèÿ\Áðîíèðîâàíèå è íàëè÷èå îáîðóäîâàíèÿ\Íàëè÷èå îáîðóäîâàíèÿ íà ñêëàäå.xlsm"
                     .Send
                           End With
                           On Error GoTo 0
                           Set OutMail = Nothing
                           Set OutApp = Nothing
                           W = True
                       End If
                       If W = True Then Exit For
                   Next Z
               End If
               If W = True Then Exit For
           Next Y
       End If
Next X
End Sub
[/vba]


Сообщение отредактировал Bulava81 - Понедельник, 07.07.2014, 14:46
 
Ответить
СообщениеРоман, добрый день! Рад Вас видеть:)
То есть получается, чтобы в назначенное время макрос производил рассылку необходимо, чтобы файл был всегда открыт или это условие необязательно? (соответственно с ПК понятно, чтобы он был всегда включен)
А Вы не могли бы подсказать в каком виде будет выглядеть метод .ApplicationOnTime, если к примеру необходимо, чтобы макрос производил рассылку в 8:00 каждый день, в соответствии с теми условиями, которые мы совместно с Вами уже благополучно прописали в макросе?
Есть еще один вопрос макрос автоматически не отправляет письма, а выводит их на дисплей, то есть как с функцией .Display, хотя у меня прописано .Send? поэтому мне приходится каждое письмо подтверждать при отправке, а хотелось бы автоматизировать данную процедуру по назначенному времени:) Буду Вам премного благодарен за помощь!!!
Еще раз привожу ниже текст макроса:
[vba]
Код
Sub Send_Mail ()

Dim W As Boolean 'Äëÿ ïðîâåðêè íà äóáëè
Dim X As Long 'Äëÿ ïåðåáîðà ñòîëáöîâ áàçû äàííûõ
Dim Y As Long 'Äëÿ ïåðåáîðà ñòðîê áàçû äàííûõ
Dim Z As Long 'Äëÿ ïåðåáîðà ñòðîê ïî ñïèñêàì àäðåñîâ ïîëó÷àòåëåé
Dim shtX As Worksheet 'Äëÿ ëèñòà "Áàçû Äàííûõ"
Dim shtY As Worksheet 'Äëÿ ëèñòà "Ñïèñêè" ñ àäðåñàìè ïîëó÷àòåëåé
Dim Mail_Name As String 'Èìÿ àäðåñàòà äëÿ îòïðàâêè ïèñüìà

Dim OutApp As Object
Dim OutMail As Object

Set shtX = ThisWorkbook.Sheets("Áàçà Äàííûõ")
Set shtY = ThisWorkbook.Sheets("Ñïèñêè")

For X = 1 To shtX.Cells(3, shtX.Columns.Count).End(xlToLeft).Column
       W = False
       If shtX.Cells(3, X).Value = "Äí äî ÎÁ" Then
           For Y = 4 To 2000
               If shtX.Cells(Y, X).Value = 1 Or shtX.Cells(Y, X).Value = 2 Or shtX.Cells(Y, X).Value = 3 Or shtX.Cells(Y, X).Value = 4 Then
                   For Z = 2 To shtY.Cells(shtY.Rows.Count, 1).End(xlUp).Row
                       If shtX.Cells(1, X - 3).Value = shtY.Cells(Z, 1).Value Then
                           Mail_Name = shtY.Cells(Z, 2).Value
                           Set OutApp = CreateObject("Outlook.Application")
                           Set OutMail = OutApp.CreateItem(0)
                           On Error Resume Next
                           With OutMail
                     .Display
                     .To = Mail_Name
                     .CC = "a.buzdugan@awt.ru"
                     .Subject = "Îêîí÷àíèå Áðîíè íà îáîðóäîâàíèå"
                     .HTMLBody = "Óâàæàåìûå Êîëëåãè! Ïðîøó Âàñ ïðîâåðèòü ñîñòîÿíèå áðîíè â ñîîòâåòñòâèè ñ âëîæåííûì ôàéëîì. Ñíÿòü/ïðîäëèòü.  äåíü îêîí÷àíèÿ áðîíè Âàøà áðîíü àâòîìàòè÷åñêè óäàëÿåòñÿ ñèñòåìîé." & .HTMLBody
                     .Attachments.Add "\\Files\documents\-ÍÎÂÀß ÑÒÐÓÊÒÓÐÀ-\Äåïàðòàìåíò ïîñòàâîê è òîðãîâûõ îïåðàöèé\Îáîðóäîâàíèå\Áðîíèðîâàíèå è íàëè÷èå îáîðóäîâàíèÿ\Áðîíèðîâàíèå è íàëè÷èå îáîðóäîâàíèÿ\Íàëè÷èå îáîðóäîâàíèÿ íà ñêëàäå.xlsm"
                     .Send
                           End With
                           On Error GoTo 0
                           Set OutMail = Nothing
                           Set OutApp = Nothing
                           W = True
                       End If
                       If W = True Then Exit For
                   Next Z
               End If
               If W = True Then Exit For
           Next Y
       End If
Next X
End Sub
[/vba]

Автор - Bulava81
Дата добавления - 07.07.2014 в 10:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическая отправка файла посредством OutLook (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!