Отправить письмо на основе имени ячейки - PullRequest
0 голосов
/ 19 января 2019

Я хочу отправить автоматическое электронное письмо, когда определенное имя ячейки добавлено в столбец G Например, когда вы вводите имя (заказ) в любой ячейке ячеек столбца G, оно автоматически отправляет электронное письмо из внешнего вида.

Этот код используется

Private Sub CommandButton7_Click()
    Dim Email_Subject, Email_Send_From, Email_Send_To, _
    Email_Cc, Email_Bcc, Email_Body As String
    Dim Mail_Object, Mail_Single As Variant

    Email_Subject = " "
    Email_Send_From = ""
    Email_Send_To = ""
    Email_Cc = ""
    Email_Bcc = ""
    Email_Body = ""

    On Error GoTo debugs
    Set Mail_Object = CreateObject("Outlook.Application")
    Set Mail_Single = Mail_Object.CreateItem(0)
    With Mail_Single
        .Subject = Email_Subject
        .To = Email_Send_To
        .CC = Email_Cc
        .BCC = Email_Bcc
        .Body = Email_Body
        .send
    End With

   debugs:
   If Err.Description <> "" Then MsgBox Err.Description
End Sub

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Ваши переменные помечены не полностью, каждая строка должна быть затемнена как строка.

Для этого примера адреса электронной почты находятся в столбце E. great minds @Matteo NNZ?

Всего пара строк добавляется в начало вашего кода и помещается в событие смены листа.

скопируйте и вставьте код в модуль листа.

enter image description here

Измените ячейку в столбце G, и код создаст электронное письмо и использует адрес электронной почты в столбце E.

- enter image description here

Полный код:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 7 Then Exit Sub

    Dim Email_Subject As String
    Dim Email_Send_To As String, Email_Cc, Email_Bcc As String
    Dim mail_Body As String, Mail_Object, Mail_Single As Variant

    Email_Subject = Target
    Email_Send_To = Target.Offset(, -2)
    Email_Cc = ""
    Email_Bcc = ""
    Email_Body = ""

    On Error GoTo debugs
    Set Mail_Object = CreateObject("Outlook.Application")
    Set Mail_Single = Mail_Object.CreateItem(0)
    With Mail_Single
        .Subject = Email_Subject
        .To = Email_Send_To
        .CC = Email_Cc
        .BCC = Email_Bcc
        .Body = Email_Body
        '.send
        .display
    End With

debugs:
    If Err.Description <> "" Then MsgBox Err.Description
End Sub
0 голосов
/ 19 января 2019

Предполагая, что ваш существующий код уже исправен, вы должны:

  • Перейти в левом верхнем углу вашей IDE к дереву проектов
  • Нажмите на лист, который вы хотитеконтролировать

... и записывать туда свой исходный код (исправлено, чтобы он мог принимать параметры вместо жестко заданных значений для адреса электронной почты, темы и т. д.):

Private Sub sendEmail(ByVal Email_Subject As String, ByVal Email_Send_From As String, _
                      ByVal Email_Send_To As String, ByVal Email_Cc As String, _
                      ByVal Email_Body As String)

    On Error GoTo debugs
    Set Mail_Object = CreateObject("Outlook.Application")
    Set Mail_Single = Mail_Object.CreateItem(0)
    With Mail_Single
        .Subject = Email_Subject
        .To = Email_Send_To
        .CC = Email_Cc
        .BCC = Email_Bcc
        .Body = Email_Body
        .send
    End With

debugs:
   If Err.Description <> "" Then MsgBox Err.Description

End Sub

... и слушатель события Worksheet_Change, где каждый раз, когда измененная ячейка находится в столбце G, вызывается Sub sendEmail (в этом примере я передаю параметры Offset(0 (та же строка) , -n) (где n - это количество столбцов до или после G информации, такой как Email_address лежит):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Split(Target.Address, "$")(1) = "G" And Target.Value = "magic words" Then
        sendEmail Target.Offset(0, -1), Target.Offset(0, -2), ...
    End If
End Sub

Просто для справки, например, когда я говорюTarget.Offset(0,-2), если Target (скажем) Range("G4"), тогда Target.Offset(0,-2) будет Range("E4") (та же строка 0, двумя столбцами до -2).

...