>我似乎无法在我的代码中包含 IF 公式,在将电子邮件发送给我的 Excel 文件 R2 列中包含的某些人的部分中
我想从.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
这样做的代码是什么?
我不会为此使用 if 语句。相反,我会在设置两者后从抄送行中删除每个收件人
.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
行中的单个和多个收件人
你的意思是这样的:
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
只需使用 Replace
即可从列表中删除.To
中的地址.CC
.To = Worksheets("MyData").Range("R2").Value
.CC = Replace("yyy@gmail.com; zzz@gmail.com; aaa@gmail.com", .To, vbNullString)
通过这种方式,地址被修剪并比较不区分大小写:
.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