Страницы: 1
RSS
Автоматическая отправка письма
 
Всем Привет! Помогите пожалуйста решить проблему.
В столбце А записывается исходное значение. В столбце В автоматически или вручную записывается изменяемое значение. В столбце С функция если В больше или равно А тогда YES иначе NO. Задача состоит в том, чтобы при изменении результата функции автоматически отправлялось письмо на почту с текстом в зависимости от результата функции. На одном из форумов нашел этот код. Он отправляет письмо только если вручную изменить ячейку C1. Как можно модифицировать код, чтобы он отправлял письма с разным текстом в зависимости от результата функции? Я в этом профан. Заранее благодарю за помощь!
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("C1")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."
 
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
 
Цитата
kanforka написал:
Как можно модифицировать код, чтобы он отправлял письма с разным текстом в зависимости от результата функции?
а можно поподробнее - когда должен срабатывать макрос? Изменения в каких ячейках макрос должен отслеживать? Только в столбце С?  А если будет 1000 YES (или NO), то макрос должен отправить 1000 писем?
Изменено: New - 07.11.2021 01:51:05
 
Планируется сравнивать суммы ячеек из столбцов А и В. Макрос должен срабатывать, когда изменяется значение ячейки C1 на YES или NO. По предположениям не должно отправиться больше 20 писем.
Изменено: vikttur - 07.11.2021 10:32:10
 
Так у вас сейчас как раз макрос и срабатывает при изменении ячейки С1, как вы и хотите.
 
Он ничего не делает если меняется результат функции, либо я что-то не понимаю, либо неправильно объяснил. В столбце В числа будут меняться. Если В больше или равно А, то в C должно быть YES и отправка письма. Если В меньше А, то в С должно быть NO и отправиться письмо.
 
Worksheet_Change не срабатывает на изменение функцией
костыли
 
если контролируемых строк больше то лучше уже контролировать весь изменяемый диапазон
с помощью объекта ComboBox1
задать контролируемый диапазон
Код
ComboBox1.ListFillRange = "A1:A10" 

и уже на событие объекта выполнять код
Код
Private Sub ComboBox1_Change()
Call Makro
End Sub
Спасибо
 
Цитата
костыли
при изменении ячейки появляется предупреждение об изменении, требуется мое участие на нажатие кнопки

Цитата
если контролируемых строк больше то лучше уже контролировать весь изменяемый диапазон
подскажите пожалуйста как правильно вписать эти строки в код, я в программировании практически 0
 
Цитата
написал:
требуется мое участие на нажатие кнопки
Ммм... какбы объяснить, что вместо вывода сообщения нужно поставить вызов процедуры отправки сообщения
Ну это уже высшая математика и я в ней не понимаю
Страницы: 1
Наверх