Отправлять электронную почту на основе значения в ячейке только после сохранения книги - PullRequest
0 голосов
/ 31 октября 2018

У меня есть ячейка B8, которая проверяет, были ли введены данные в диапазон ячеек за день, и выводит число в зависимости от количества. Он проверяет пустые записи и, очевидно, в начале заполнения листа все ячейки за день будут пустыми, я хочу, чтобы проверка выполнялась только после сохранения листа.

Код, который мне удалось собрать вместе с Франкенштейном, готовит электронное письмо, как только выполняется условие, и я не уверен, как изменить его в соответствии с моими потребностями.

Sub Mail_with_outlook()
Dim OutApp As Object
Dim OutMail As Object
Dim emlto As String, emlcc As String, emlbcc As String
Dim emlsub As String, emlbody As String

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

emlto = "email@abc.def"
emlcc = ""
emlbcc = ""
emlsub = "Raw Material Projection"
emlbody = "Good Day" & vbNewLine & vbNewLine & _
          "There might be an issue with the data inputed in today's sheet"


With OutMail
    .To = emlto
    .CC = emlcc
    .BCC = emlbcc
    .Subject = emlsub
    .Body = emlbody
    .Display    '  use .Send once tested
End With

Set OutMail = Nothing
Set OutApp = Nothing
End Sub





Private Sub Worksheet_Calculate()
Dim FormulaRange As Range
Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String
Dim MyLimit As Double

NotSentMsg = "Not Sent"
SentMsg = "Sent"

'Above the MyLimit value it will run the macro
MyLimit = 10

'range with the Formula that I want to check
Set FormulaRange = Me.Range("B8")

On Error GoTo EndMacro:
For Each FormulaCell In FormulaRange.Cells
    With FormulaCell
        If IsNumeric(.Value) = False Then
            MyMsg = "Not numeric"
        Else
            If .Value > MyLimit Then
                MyMsg = SentMsg
                If .Offset(0, 1).Value = NotSentMsg Then
                    Call Mail_with_outlook
                End If
            Else
                MyMsg = NotSentMsg
            End If
        End If
        Application.EnableEvents = False
        .Offset(0, 1).Value = MyMsg
        Application.EnableEvents = True
    End With
Next FormulaCell

ExitMacro:
Exit Sub

EndMacro:
Application.EnableEvents = True

MsgBox "Some Error occurred." _
     & vbLf & Err.Number _
     & vbLf & Err.Description

End Sub

1 Ответ

0 голосов
/ 31 октября 2018

Я бы поместил вашу логику в событие BeforeSave .

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   'your logic goes here
End Sub

Если вы проверяете, есть ли сейчас что-то в диапазоне, тогда как до того, как оно стало полностью пустым, рассмотрите возможность использования функций COUNTA/COUNT.

Примечания:

Происходит до сохранения рабочей книги.

Синтаксическое выражение. BeforeSave ( SaveAsUI , Отмена )

expression Переменная, представляющая объект Workbook.

Параметры

SaveAsUI: Обязательный, Boolean, Описание: True, если диалоговое окно Сохранить как отображается в связи с изменениями, которые необходимо сохранить в рабочей книге.

Отмена: Обязательный, Логический, Описание: Ложь, когда происходит событие. Если событие процедура устанавливает этот аргумент в True, книга не сохраняется, когда процедура завершена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...