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

Я очень новичок в VB и буду признателен за любую помощь. Заранее спасибо.

Я пытаюсь отправить электронное письмо, когда определенная ячейка имеет определенное значение. Например, когда ячейка E3 имеет значение 1, я хочу отправить письмо 1, когда оно имеет значение 2, я хочу отправить письмо 2. Эта часть работает. Я также хочу, чтобы строка темы была содержимым ячейки 3 слева, т. Е. Когда ячейка E3 запускается для отправки электронного письма, я хочу, чтобы строка темы была содержимым B3, когда E4 запускается, я хочу, чтобыподлежит содержанию B4. Вот где я ускользаю, я пробовал различные смещения и параметры диапазона, но я просто получаю пустую строку темы в письме. Вот что у меня есть:

Dim xRg As Range
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Cells.Count > 1 Then Exit Sub
  Set xRg = Intersect(Range("E3:E5"), Target)
    If xRg Is Nothing Then Exit Sub
    If IsNumeric(Target.Value) And Target.Value = 1 Then
        Call Mail_small_Text_Outlook
    ElseIf IsNumeric(Target.Value) And Target.Value = 2 Then
        Call Mail_small_Text_Outlook2
        End If
End Sub
Sub Mail_small_Text_Outlook()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = "Good Day" & vbNewLine & _
              "Content Mail 1"
    On Error Resume Next
    With xOutMail
        .To = "xxx@mci.co.za"
        .CC = ""
        .BCC = ""
        .Subject = ActiveCell.Offset(0, -3).Value
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub
Sub Mail_small_Text_Outlook2()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = "Good Day" & vbNewLine & _
              "Content Mail 2"
    On Error Resume Next
    With xOutMail
        .To = "xxx@mci.co.za"
        .CC = ""
        .BCC = ""
        .Subject = ActiveCell.Offset(0, -3).Value
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

1 Ответ

0 голосов
/ 11 октября 2019

Вместо использования ActiveCell я бы добавил «Target» в качестве параметра к Mail_small_Text_Outlook. Таким образом, вы можете быть уверены, что ячейка, на которую вы ссылаетесь, такая же.

Если вам нужно использовать ActiveCell (по какой-то причине), и вы не получаете правильный результат, вы можете использовать что-то вроде:
MsgBox ActiveCell.Address
Просто дважды проверьте, что ячейка, с которой вы работаете, - это та, которую вы ожидаете.

Я бы также советовал объединить Mail_small_Text_Outlook и Mail_small_Text_Outlook2 в одну подпрограмму и добавитьпараметр, указывающий, какое тело письма вы хотите использовать. Таким образом, код для открытия Outlook и создания реальной электронной почты находится только в одном месте, поэтому, если вам нужно изменить / отладить его, вам нужно будет сделать это только один раз.

Конечная подпрограмма может выглядеть примерно так: Mail_small_Text_Outlook(Target As Range, EmailBody As Integer).

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