Страницы: 1
RSS
макрос (VBA) уведомление в почту о скором наступлении даты
 
добрый день.
прошу помощи в написании макроса.
сам пытался искать подобные, пробовал разобраться в написании, но всё безуспешно - мой мозг не способен это сделать к сожалению:(
по этому прошу помощи у вас.

нужен макрос, который будет сканировать столбец "G" или "Н" и в случае нахождения ячеек (с датой или количеством оставшихся дней), в которых до сегодняшней даты осталось от 0 до 5 дней (включительно), отправляет письмо в outlook на 2 адреса с содержанием "срок устранения нарушений по делу "тут содержание ячеек "С" и "В" этой же строки - истекает через "___" дней.

помогите пожалуйста, я мозг сломал, но всё равно так и не смог разобраться.
не заточен он под ексель =(
заранее благодарю вас. (фал-пример прикладываю)
 
lok888,
а что будет являться триггером для запуска макроса? Вход в данный файл? В таком случае, наверное, нужно добавить критерий, по которому не отправлять уже отправленные строки. Или вы будете запускать код через определенный промежуток времени?

Как отправить сообщение Вы можете найти здесь: https://www.excel-vba.ru/chto-umeet-excel/kak-otpravit-pismo-iz-excel/

P.S. Excel не сможет все время отслеживать закрытую книгу, разве что не использовать Excel Online



Как вариант:
Код
Private Sub Workbook_Open()
lLastRow = Sheets("Лист1").Cells.SpecialCells(xlLastCell).Row
For r = 4 To lLastRow
If Sheets("Лист1").Cells(r, 8) <= 5 And Sheets("Лист1").Cells(r, 14) <> 1 Then
Sheets("Лист1").Cells(r, 14) = 1

    Dim objOutlookApp As Object, objMail As Object
    Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
 
    Application.ScreenUpdating = False
    On Error Resume Next
    'пробуем подключиться к Outlook, если он уже открыт
    Set objOutlookApp = GetObject(, "Outlook.Application")
    Err.Clear 'Outlook закрыт, очищаем ошибку
    If objOutlookApp Is Nothing Then
        Set objOutlookApp = CreateObject("Outlook.Application")
    End If
    'раскомментировать строку, если в Outlook несколько учетных записей и нужно подключиться к конкретной(только если Outlook закрыть)
    '   [параметры]: Session.Logon "имя профиля","пароль",[показывать окно выбора профиля], [запускать в новой сессии]
    'objOutlookApp.Session.Logon "profile","1234",False, True
    Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
    'если не получилось создать приложение или экземпляр сообщения - выходим
    If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
 
    sTo = "AddressTo@mail.ru"    'Кому(можно заменить значением из ячейки - sTo = Range("A1").Value)
    sSubject = "Автоотправка"    'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2").Value)
    sBody = "срок устранения нарушений по делу" & Sheets("Лист1").Cells(r, 2) & " " & Sheets("Лист1").Cells(r, 3) & " истекает через " & Sheets("Лист1").Cells(r, 8) & " дней"    'Текст письма(можно заменить значением из ячейки - sBody = Range("A3").Value)
 
    'создаем сообщение
    With objMail
        .To = sTo 'адрес получателя
        .CC = "" 'адрес для копии
        .BCC = "" 'адрес для скрытой копии
        .Subject = sSubject 'тема сообщения
        .Body = sBody 'текст сообщения
        '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
        'добавляем вложение, если файл по указанному пути существует(dir проверяет это)
        .Display 'Send, если необходимо отправить без просмотра
    End With
 
    Set objOutlookApp = Nothing: Set objMail = Nothing
    Application.ScreenUpdating = True

End If
Next
End Sub
Изменено: evgeniygeo - 20.05.2022 06:18:42
 
Цитата
написал:
а что будет являться триггером для запуска макроса? Вход в данный файл?
скорее всего да - открытие файла.
вроде как-то  винду можно настроить, чтоб открывал файл ежедневно - над этим я потом подумаю.

огромное спасибо Вам за макрос!
 
Цитата
написал:
Как вариант:Код
работает отлично код. не сразу разобрался - почему не отправлял сообщения. подом разобрался)
ещё раз огромное спасибо!
 
lok888,
тогда Вам пригодится вот это https://www.planetaexcel.ru/techniques/3/6638/
Страницы: 1
Наверх