Страницы: 1
RSS
Марос по отправке сборного сообщения по результатам события в столбце
 
Добрый вечер у меня опять вопрос по теме отправки сообщений из Оутлука.

Можно сделать макрос , который при наступлении события -появление значения в колонке , составил и отправил бы сообщение всем пользователям с листа "Список мейлов"
Подробнее в файле.
 
Так в приемах описано как отправлять через аутлук
http://www.planetaexcel.ru/techniques/13/48/    (способ №3)
Только все в соответствующих циклах надо делать.
 
Я читал но там или книга или лист как вложение, а мне надо выбрать некоторые значения строки , сформировать сообщение и отправить по адресам принаступлении определенного события. А потом я в макросах лох уже лет 10 ... с самого начала
 
Извини, работа кончается. если ни кто не поможет попробую завтра посмотреть
 
Микки,
Посмотрите, как-то так?
Только в колонке М формула от колонки G.
Может Intersect на эту колонку делать надо.
 
Добрый день спасибо огромное очень похоже на то что я хотел.
Есть два вопроса.
1.Сообщение формируется в столбцах О и P а потом отправляется? Если это так нельзяли его формировать макросом используя имеющуюся формулу, а то у меня полно будет контрольных точек.
2. Я могу продолжать список мейлов сколько угодно? А можно подпись добавить типа послано макросом? И сразу отправить не входя в ОутЛуук?
 
1. Сделал формирование текста в VBA.
2. На листе 1 можно до 1000 строк. На листе адресов - до 100, если надо больше - посмотрите в код там где iIntersect и цикл FOR.
3. Автоматическая отправка не получится - защита Микрософт - думает что это спам.
   Я обхожу это поиском окна сообщения, поиском кнопки Отправить и ее нажатием применяя Ф-ции API
Выкладывал пример (но это только для 2010 офиса):
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=72&MID=712#message712
 
Еще раз спасибо ...У меня будет несколько столбцов при заполнении котрых нажо отправить сообщение

Например 10 выставлен , 13 оплачен , 15 опять выставлен , 18 оплачен ..и т.д.
Мне надо этот кусок подкоректировать?
If xCol = 10 Then
  TXT0 = TXT0 & " выставлен " & Sheets("1").Cells(xRow, 10)
 Else
  TXT0 = TXT0 = TXT0 & " оплачен " & Sheets("1").Cells(xRow, 13)
 End If
Если да то как?
 
TXT0 - это тело сообщения
Формируется оно также как делали Вы с помощью формул только вместо ссылок на ячейки вставляете Sheets("1").Cells(xRow, ......)
Сравните с Вашей формулой:
="Обращение из листа Список Мейлов "&" счет № "&I5&" по заказу "&A5&" на "&B5&" на сумму "&K5&" оплачен "&ТЕКСТ(M5,"ДД.ММ.ГГ")
Вопрос об этом?
 
И еще один момент ..а если вообще другой вариант ....например .."Товар  по заказу _____ находится на таможне, выставляейте счет"
Это я к тому что по БП ..может быть несколько видов информационных сообщений но не много 2,3 ...т.е в зависмоости от колонки формируем сообщение вида 1,2, 3, типа формируем справочник сообщений .
 
Кстати посмотрел Ваше АПИ-Оутлук ..ничего не понял ... как мне ее встороить..
 
И еще мы с Димой (Прайстом) в свое время делали похожую штуку, точнее Дима делал по моему ТЗ, так вот там отправка происходит минуя Оутлук ..правда там речь шла о листе.
 
Цитата
Микки пишет:
Кстати посмотрел Ваше АПИ-Оутлук ..ничего не понял ... как мне ее встороить..

Смотрите в Модуле1 в сабе MyMail после   .Display, которая выводит на экран окно созданного сообщения, вместо штатной команды .SEND вставляем нашу  SEND_MSG ("Обращение"), которая ищет это окно по части его названия и нажимает кнопку "Отправить".

Ну, а что конкретно отправлять зависит от Вашей логики. А по изменению какого поля отправлять - в поиск "intersect" - множество ссылок и примеров использования.
 
Да спасибо уже лучше намного ..только че-то он по столбцу M не работает ..пишет :

Дорогой Михаил!
False
Сформировано автоматически

Сам не разобрался в чем дело.

В остальном попробую ... хотя не уверен.
 
Задублировалось при копировании
If xCol = 10 Then
  TXT0 = TXT0 & " выставлен " & Sheets("1").Cells(xRow, 10)
 Else
  TXT0 = TXT0 = TXT0 & " оплачен " & Sheets("1").Cells(xRow, 13)
 End If
Удалите лушнюю "TXT0 =" в Модуле1 сабе MyMail
 
Спасибо помогло....
 
Цитата
Микки пишет:
И еще мы с Димой (Прайстом) в свое время делали похожую штуку, точнее Дима делал по моему ТЗ, так вот там отправка происходит минуя Оутлук ..правда там речь шла о листе.

Так отправить можно многими способами. Они представлены на Планете. Просто у нас надо только через Аутлук, считается, что Наличие сообщений в папке "отправленные" - официальное подтверждение факта отправки.
 
Но согласитесь там файлик ..в части выбора получателей ..красивее.
 
Это уже другая тема. Тема интерфейса, удобного для пользователя. А тут разговор о одном из возможных механизмов отправки.
 
Интерфейс тоже важен ..впрочем как и доп возможности а там их куча была ..Но это уже другая тема тут Вы правы.
 
Добрый день. Помогите пожалуйста создать макрос автоматической отправки книги при определенных условиях. Проблема в том что пользователь я еще не совсем опытный.
Суть в том, что мне нужно настроить отправку адресатам, появляющимся в столбце "G", в тот момент, когда срок исполнения будет подходить к окончанию.
 
Azizoshn, через Outlook. В модуль листа:
Код
Private Sub Worksheet_Calculate()
Dim aa As Range, bb As Range, b&, t1$
Application.EnableEvents = False
Set aa = Columns("D").Rows("2:" & Cells(Rows.Count, "D").End(xlUp).Row)
For Each bb In aa
  If IsDate(bb) Then
    If CDate(bb) <= Date - 2 Then b = b + 1
  End If
Next
If b >= 0.7 * aa.Cells.Count Then
  ThisWorkbook.Save
  For Each aa In Columns("G").Rows("2:" & Cells(Rows.Count, "G").End(xlUp).Row)
    t1 = t1 & aa & ";"
  Next
  SMail t1, "Сроки горят!", , ThisWorkbook.FullName
End If
Application.EnableEvents = True
End Sub
Sub SMail(ByVal adr1$, ByVal tema$, Optional ByVal adr2$, Optional ByVal iFile$, Optional ByVal iBody$)
    Dim objOutlookApp As Object, objMail As Object 'Автор - Дмитрий Щербаков
    On Error Resume Next
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear
    If objOutlookApp Is Nothing Then Set objOutlookApp = CreateObject("Outlook.Application")
    objOutlookApp.Session.Logon
    Set objMail = objOutlookApp.CreateItem(0)
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
    With objMail
      .To = adr1
      .cc = adr2
      .Subject = tema
      .Attachments.Add iFile
      On Error Resume Next
      .HTMLBody = iBody
      .Body = Activedocument.Content
      On Error GoTo 0
      .Send
    End With
    Set objOutlookApp = Nothing: Set objMail = Nothing
End Sub
Срабатывает по факту пересчета формул на листе.

Вариант с изменением значений в диапазоне ячеек столбца "D":
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim aa As Range, bb As Range, b&, t1$
Set aa = Columns("D").Rows("2:" & Cells(Rows.Count, "D").End(xlUp).Row)
If Not Intersect(Target, aa) Is Nothing Then
  For Each bb In aa
    If IsDate(bb) Then
      If CDate(bb) <= Date - 2 Then b = b + 1
    End If
  Next
  If b >= 0.7 * aa.Cells.Count Then
    ThisWorkbook.Save
    For Each aa In Columns("G").Rows("2:" & Cells(Rows.Count, "G").End(xlUp).Row)
      t1 = t1 & aa & ";"
    Next
    SMail t1, "Сроки горят!", , ThisWorkbook.FullName
  End If
End If
End Sub
Изменено: Anchoret - 12.02.2019 06:59:47
 
Спасибо конечно, но почему то этот макрос даже не запускается
 
Anchoret, Вы не могли бы вставить код во вложенный файл.
 
Azizoshn, не удивительно что у Вас ничего не работало - столбцы (проверка даты + почтовый адрес) в этом файле и предыдущем отличаются
Страницы: 1
Наверх