У меня есть ячейка 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