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

Я не могу включить формулу IF в свой код в той части, где электронное письмо отправляется некоторым людям, включенным в столбец R2 моего файла Excel

Я бы хотел исключить из .CC электронное письмо yyy@gmail.com, если этот пользователь уже находится в столбце R2 (то есть в .To). Как я мог написать код? В противном случае мой пользователь yyy@gmail.com получает электронное письмо дважды, один раз, потому что пользователь находится в .To, и один раз, потому что он находится в .CC

.To = Worksheets("MyData").Range("R2").Value
.CC = "yyy@gmail.com; zzz@gmail.com; aaa@gmail.com"
.BCC = ""
.Subject = "TEST"
.Body = "Hello"
.Attachments.Add ThisWorkbook.Path & "\ME\" & Check & " " & Format(Now, "dd-mmm-yy") & ".xlsx"
.Display
'.Send

Какой может быть код для этого?

Ответы [ 4 ]

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

При этом адреса обрезаются и сравниваются без учета регистра:

    .To = Worksheets("MyData").Range("R2").Value
    .CC = ""
    Dim check As Variant
    For Each check In Split("yyy@gmail.com; zzz@gmail.com; aaa@gmail.com", ";")
        If Not InStr(1, .To, Trim(check), vbTextCompare) > 0 Then _
            .CC = .CC & "; " & check
    Next check
0 голосов
/ 16 января 2019

Я бы не использовал оператор if для этого. Вместо этого я бы удалил каждого получателя из строки cc после установки обоих

.to = "yyy@gmail.com"
.cc = "yyy@gmail.com; zzz@gmail.com; aaa@gmail.com"
For Each addr In Split(.to, ";")
    .cc = Replace(.cc, addr, vbNullString)
Next addr
.BCC = ""
.Subject = "TEST"
.Body = "Hello"
.Attachments.Add ThisWorkbook.Path & "\ME\" & Check & " " & Format(Now, "dd-mmm-yy") & ".xlsx"
.Display

Цикл for разделяет строку to на символе точки с запятой ;, а затем перебирает каждый из них, удаляя его из .cc. Он будет обрабатывать как одного, так и нескольких получателей как в .To, так и .CC. линия

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

Просто используйте Replace, чтобы удалить адрес из .To из вашего списка в .CC

.To = Worksheets("MyData").Range("R2").Value
.CC = Replace("yyy@gmail.com; zzz@gmail.com; aaa@gmail.com", .To, vbNullString)
0 голосов
/ 16 января 2019

Вы имеете в виду, как это:

If Worksheets("MyData").Range("R2").Value2 = "yyy@gmail.com" Then
    .CC = "zzz@gmail.com; aaa@gmail.com"
Else
    .CC = "yyy@gmail.com; zzz@gmail.com; aaa@gmail.com"
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...