Два условия отправки электронной почты двум разным получателям в Excel VBA - PullRequest
0 голосов
/ 18 мая 2019

Я создаю код VBA для отправки электронного письма при нажатии кнопки «Отправить».У меня есть 2 условия, пример: в столбце A он будет фильтровать данные, которые содержат "AD" и будут отправлены получателю А., а в столбце G, если он содержит "13" или "14", он будет отфильтрован иотправлено получателю B. Я уже получил 1-е условие, но не знаю, как добавить второе условие.остальное не работает.

Sub BSPProfitCenter_Rectangle3_Click()


    Const cFirst As Integer = 20
    Const cLast As Integer = 65
    Const cRequest As String = "New Request"

    Dim i As Integer
    For i = cFirst To cLast

        If Range("A" & i).Value = cRequest Then

            If Range("e" & i).Value = "" Then
                MsgBox "Provide the PC name from KE53"
                Exit Sub

            ElseIf Range("g" & i).Value = "" Then
                MsgBox "Please provide the user responsible (Sector) maintained in KE53 for this PC"
                Exit Sub

            ElseIf Range("K" & i).Value = "" Then
                MsgBox "Provide the company code where the PC needs to be extended"
                Exit Sub

            End If
        End If
        Next i

        ActiveSheet.Unprotect Password:="PROFITCENTER"
        Selection.AutoFilter
        ActiveSheet.Range("$B$19:$L$65").AutoFilter Field:=1, Criteria1:="=AD*", Operator:=xlAnd


        ActiveSheet.SaveAs Filename:="C:\Apps\" & "GSAP Asset Domain PC Request" & Format(Now(), "DD-MM-YYYY")


        Dim OutApp As Object
        Dim OutMail As Object

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

        On Error Resume Next

        With OutMail
            .to = "A"
            .CC = ""
            .BCC = ""
            .Subject = "AD Request"
            .Attachments.Add ActiveWorkbook.FullName
            .Display

        End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing
        Exit Sub


'here's the supposed to be additional validation'

        If Range("s" & i).Value <> "AD" Then
        If Range("G" & i).Value = "13" Or Range("G" & i).Value = "14" Then



        ActiveSheet.Unprotect Password:="PROFITCENTER"
        Selection.AutoFilter
        ActiveSheet.Range("$B$19:$L$65").AutoFilter Field:=6, Criteria1:="=13", _
        Operator:=xlOr, Criteria2:="=14"


        ActiveSheet.SaveAs Filename:="C:\Apps\" & "GSAP PC Request" & Format(Now(), "DD-MM-YYYY")



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

        On Error Resume Next

        With OutMail
            .to = "B"
            .CC = ""
            .BCC = ""
            .Subject = "13 & 14 Request"
            .Attachments.Add ActiveWorkbook.FullName
            .Display

        End With
        On Error GoTo 0

        Set OutMail = Nothing
        Set OutApp = Nothing
    End If
        End If

End Sub

Я хотел иметь 2 условия в одной кнопке отправки, но второй код не работает.

1 Ответ

0 голосов
/ 18 мая 2019

Прежде всего, вы говорите:

в столбце A он будет фильтровать данные, содержащие «AD»

в то время как в коде вы пишете:

If Range("s" & i).Value <> "AD"

в котором указан столбец S, а не A - обратите внимание на это.

Вы неправильно поняли If, потому что это выглядит примерно так:

If Range("s" & i).Value <> "AD" Then
    If Range("G" & i).Value = "13" Or Range("G" & i).Value = "14" Then
        ' do all logic here
    End If
End If

Что также можно переписать как:

If Range("s" & i).Value <> "AD" And (Range("G" & i).Value = "13" Or Range("G" & i).Value = "14") Then
    ' do all logic here
End If

У вас нет разделения между теми состояниями, которые вы хотите лечить отдельно.

Это должно быть записано как:

If Range("s" & i).Value <> "AD" Then
    ' send mail to recipient A
End If
If Range("G" & i).Value = "13" Or Range("G" & i).Value = "14" Then
    ' send mail to recipient B
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...