Отправить письмо, когда значение ячейки 16, 64 или 120 - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть код, согласно которому все мои ячейки сформулированы условно, и из одной ячейки (B6) значение изменится.

Я хочу, чтобы электронная почта отправлялась каждый раз, когда значение ячейки B6 равно 16, 64 и 120.

В настоящее время он будет отправлять только в 16, а также он начнет отправлять из любых ячеек, как только достигнет цели 16.

Option Explicit

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


On Error GoTo errHandler:

Sheet2.Unprotect Password:="1234"

    NotSentMsg = "Not Sent"
    SentMsg = "Sent"

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

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

    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_Outlook_With_Signature_Html_1
                    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
Sheet2.Protect Password:="1234"
 '   MsgBox "Some Error occurred." _
  '       & vbLf & Err.Number _
   '      & vbLf & Err.Description

On Error GoTo 0
    Exit Sub
errHandler:
    MsgBox "An Error has Occurred  " & vbCrLf & _
           "The error number is:  " & Err.Number & vbCrLf & _
           Err.Description & vbCrLf & "Please Contact Admin"

End Sub

1 Ответ

1 голос
/ 28 февраля 2020

Думаю, тебе просто нужно это. Ваш предыдущий код запускался бы после каждого пересчета, если B6> 15. (Этот код будет по-прежнему выполняться каждый раз, когда лист пересчитывается, но будет отправлять сообщение только при попадании в эти значения.)

Вам потребуется только l oop, если вы рассматриваете диапазон ячеек например B6: B10.

Private Sub Worksheet_Calculate()

Dim NotSentMsg As String
Dim MyMsg As String
Dim SentMsg As String

On Error GoTo errHandler:
Sheet2.Unprotect Password:="1234"

NotSentMsg = "Not Sent"
SentMsg = "Sent"

With Me.Range("B6")
    If Not IsNumeric(.Value) Then
        MyMsg = "Not numeric"
    Else
        If .Value = 16 Or .Value = 64 Or .Value = 120 Then
            MyMsg = SentMsg
            If .Offset(0, 1).Value = NotSentMsg Then
                Call Mail_Outlook_With_Signature_Html_1
            End If
        Else
            MyMsg = NotSentMsg
        End If
    End If
    Application.EnableEvents = False
    .Offset(0, 1).Value = MyMsg
    Application.EnableEvents = True
End With

Application.EnableEvents = True
Sheet2.Protect Password:="1234"
On Error GoTo 0
Exit Sub
errHandler:
MsgBox "An Error has Occurred  " & vbCrLf & _
       "The error number is:  " & Err.Number & vbCrLf & _
       Err.Description & vbCrLf & "Please Contact Admin"

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