Ищете Outlook для отправки электронной почты на основе данных, сгенерированных из оператора IF - PullRequest
3 голосов
/ 18 апреля 2019

Я знаю, что есть другие сообщения об этом, но я не могу заставить его работать с моими переменными.

У меня есть 2 столбца данных, которые используют операторы IF, эти операторы IF(Asus!C:C=TODAY(),"Promo Today","").Я хочу использовать VBA, чтобы определить, когда ячейка превращается в "Promo Today", и отправить электронное письмо получателям (насколько я понимаю, адрес электронной почты должен был быть определен в ячейке, как видно из кода, который я опубликую,пытался это понять).

Столбцы 2 и 3, как я пытался нацелить в коде, - это столбцы, в которых находятся операторы IF, что я не учел ия только думаю о том, должен ли я также нацеливаться на ряд?

Private Sub Worksheet_Change()
Dim sEmailBodyp1 As String
Dim sEmailSubject As String
Dim sEmailTo As String
Dim Outlook As Object
Dim MasterCheck As Worksheet

sEmailTo = MasterCheck.Range("D2").Value
sEmailSubject = MasterCheck.Range("E2").Value
sEmailBodyp1 = MasterCheck.Range("F2").Value

If Target.Column = 2 And Target.Value = "Promo Today" Then
        With CreateObject("Outlook.Application").CreateItem(0)
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = sEmailBodyp1
            .Send
        End With
    End If


End Sub

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Брифинг

На VBA есть несколько способов доступа к Sheet, и наиболее распространенными являются следующие:

  • Имя листа , котороеВы можете установить в Excel Sheet (и пользователь может изменить это)

enter image description here

И затем вызвать свой код следующим образом:

Dim myWorksheet As Worksheet   
Set myWorksheet = Worksheets("Sheet1") 'The user defined Excel sheet name.

  • Лист объектов Microsoft Excel (который вы можете найти на левой панели)

enter image description here

И вы можете просто назвать его так (при условии, что его имя Sheet1):

Sheet1.Activate

Ваш код

Итак,возвращаясь к вашему коду, поскольку переменная MasterCheck не инициализирована , мы можем использовать первый метод и инициализировать его значение:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sEmailBodyp1 As String
    Dim sEmailSubject As String
    Dim sEmailTo As String
    Dim Outlook As Object
    Dim MasterCheck As Worksheet

    Set MasterCheck = Sheets("MySheet") 'Change "MySheet" with your sheet name

    sEmailTo = MasterCheck.Range("D2").Value
    sEmailSubject = MasterCheck.Range("E2").Value
    sEmailBodyp1 = MasterCheck.Range("F2").Value

    If Target.Column = 2 And Target.Value = "Promo Today" Then
        With CreateObject("Outlook.Application").CreateItem(0)
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = sEmailBodyp1
            .Send
        End With
    End If

End Sub
0 голосов
/ 18 апреля 2019

Примерно так должно работать:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("B:B")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub

    Dim sEmailBodyp1 As String
    Dim sEmailSubject As String
    Dim sEmailTo As String
    Dim Outlook As Object
    Dim MasterCheck As Worksheet

    Set MasterCheck = ActiveWorkbook.Sheets("SheetName") 'Change this with your sheet name

    sEmailTo = MasterCheck.Range("D2").Value
    sEmailSubject = MasterCheck.Range("E2").Value
    sEmailBodyp1 = MasterCheck.Range("F2").Value

    If Target.Value = "Promo Today" Then
        With CreateObject("Outlook.Application").CreateItem(0)
            .To = sEmailTo
            .Subject = sEmailSubject
            .Body = sEmailBodyp1
            .Send
        End With
    End If

End Sub
...