Note: The other languages of the website are Google-translated. Back to English

如何基于Excel中的单元格值自动发送电子邮件?

假设您要基于Excel中指定的单元格值通过Outlook向特定收件人发送电子邮件。 例如,当工作表中单元格D7的值大于200时,将自动创建一封电子邮件。 本文介绍了一种VBA方法,可帮助您快速解决此问题。

使用VBA代码根据单元格值自动发送电子邮件


使用VBA代码根据单元格值自动发送电子邮件

请执行以下操作以根据Excel中的单元格值发送电子邮件。

1.在工作表中,您需要根据其单元格值(此处表示单元格D7)发送电子邮件,右键单击工作表选项卡,然后选择 查看代码 从上下文菜单中。 看截图:

2.在弹出 Microsoft Visual Basic应用程序 窗口,请将以下VBA代码复制并粘贴到工作表代码窗口中。

VBA代码:根据Excel中的单元格值通过Outlook发送电子邮件

Dim xRg As Range
'Update by Extendoffice 2018/3/7
Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Cells.Count > 1 Then Exit Sub
  Set xRg = Intersect(Range("D7"), Target)
    If xRg Is Nothing Then Exit Sub
    If IsNumeric(Target.Value) And Target.Value > 200 Then
        Call Mail_small_Text_Outlook
    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 = "Hi there" & vbNewLine & vbNewLine & _
              "This is line 1" & vbNewLine & _
              "This is line 2"
    On Error Resume Next
    With xOutMail
        .To = "Email Address"
        .CC = ""
        .BCC = ""
        .Subject = "send by cell value test"
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

说明:

1)。 在 VBA 代码中, D7值> 200 是您将基于其发送电子邮件的单元格和单元格值。
2)。 请根据需要更改电子邮件正文 邮件正文 代码中的一行。
3)。 将电子邮件地址替换为行中的收件人电子邮件地址 .To =“电子邮件地址”.
4)。 并根据需要指定抄送和密送收件人 .CC =“”密件副本=“” 部分。
5)。 最后更改邮件主题 .Subject =“按单元格值测试发送”.

3。 按 其他 + Q 键一起关闭 Microsoft Visual Basic应用程序 窗口。

从现在开始,当您在单元格D7中输入的值大于200时,将在Outlook中自动创建带有指定收件人和正文的电子邮件。 您可以点击 发送 按钮发送此电子邮件。 看截图:

说明:

1.仅当您使用Outlook作为电子邮件程序时,VBA代码才起作用。

2.如果在单元格D7中输入的数据是文本值,则电子邮件窗口也会弹出。


根据在Excel中创建的邮件列表的字段,通过Outlook轻松发送电子邮件:

冥界 发电子邮件 实用程序 Kutools for Excel 帮助用户基于Excel中创建的邮件列表通过Outlook发送电子邮件。
立即下载并尝试! (30天免费试用)


相关文章:


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能。 支持Office / Excel 2007-2019和365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能30天免费试用。 60天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (239)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
应该如何修改代码以应用于整个单元格范围?
黛比
该评论由网站上的主持人最小化
亲爱的黛比,
请尝试下面的 VBA 代码来解决问题。

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
If (Not Intersect(Target, Range("A1:D4")) Is Nothing) And (Target.Value > 200) Then
致电 Mail_small_Text_Outlook
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
使用 xOutMail
.To = "您的收件人的电子邮件地址"
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
END SUB
水晶
该评论由网站上的主持人最小化
如果单元格中的值被间接更改,我无法让此代码提示。 例如,如果我有 Sum 方程自动更改此值。 当等式运行并且值超过设置值以提示电子邮件时,它不会这样做,除非我自己实际更改了数字。 即使间接更改,有没有办法使电子邮件提示?
约旦
该评论由网站上的主持人最小化
亲爱的乔丹,
以下 VBA 代码可以帮助您解决问题。 请不要忘记将代码中的“电子邮件地址”替换为收件人的电子邮件地址。 谢谢你。

私人子Worksheet_Change(按目标的ByVal目标)
将 xRgPre 调暗为范围
出错时继续下一步
如果 Target.Cells.Count > 1 然后退出 Sub
设置xRg = Range(“ D7”)
设置 xRgPre = xRg.Precedents
如果 xRg.Value > 200 那么
如果 Target.Address = xRg.Address 那么
致电 Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Then
致电 Mail_small_Text_Outlook
结束如果
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
使用 xOutMail
.To =“电子邮件地址”
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
END SUB
水晶
该评论由网站上的主持人最小化
我已经修改了建议的代码以尝试使其适用于我的应用程序。
更改了 xRg = Range("C2:C40") 和如果 xRg.Value = -1。

我遇到的问题是任何时候任何单元格发生变化,只要我范围内的一个单元格是 = -1,它就会调用 Mail_small_Text_Outlook。
我试图仅在我的范围内的任何单元格间接更改为-1 时调用。
我还想知道是否以及如何使其满足两个标准。
像检查范围 A 和范围 B 以及它们是否符合标准调用函数。

在此先感谢您的帮助。 我对这一切都很陌生,但是通过这个线程阅读让我有大约 90% 的情况。


私人子Worksheet_Change(按目标的ByVal目标)
将 xRgPre 调暗为范围
出错时继续下一步
如果 Target.Cells.Count > 1 然后退出 Sub
设置 xRg = Range("C2:C40")
设置 xRgPre = xRg.Precedents
如果 xRg.Value = -1 那么
如果 Target.Address = xRg.Address 那么
致电 Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Then
致电 Mail_small_Text_Outlook
结束如果
结束如果
END SUB
丹尼尔
该评论由网站上的主持人最小化
我使用了这段代码,唯一的改变是我将它应用于整个列 [Set xRg = Range("D4:D13")]。 现在,无论 D 列中的阀门是否低于目标值,只要进行计算,就会触发该事件。 知道这是为什么吗?


将 Xrg 调暗为范围
私人子Worksheet_Change(按目标的ByVal目标)
将 xRgPre 调暗为范围
出错时继续下一步
如果 Target.Cells.Count > 1 然后退出 Sub
设置 Xrg = Range("D4:D13")
设置 xRgPre = Xrg.Precedents
如果 Xrg.Value < 1200 那么
如果 Target.Address = Xrg.Address 则
致电 Mail_small_Text_Outlook
ElseIf (Not xRgPre Is Nothing) And (Intersect(Target, xRgPre).Address = Target.Address) Then
致电 Mail_small_Text_Outlook
结束如果
结束如果
END SUB

子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "嗨" & vbNewLine & _
“测试vba”_
&amp; vbNewLine &amp; _
“2号线。”
出错时继续下一步
使用 xOutMail
.To = ""
.CC =“”
.BCC =“”
.Subject = "自动电子邮件测试"
.Body = xMailBody
。显示
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无

END SUB


谢谢。
吉姆
该评论由网站上的主持人最小化
您好

我遇到了麻烦,因为必须一次又一次地添加电子邮件收件人。 请指导是否可以将电子邮件收件人列表添加到此功能,以便该功能将从提供的电子邮件地址列表或列表上传中选择电子邮件地址,然后该功能将已编写的电子邮件发送给所需的收件人。
肖恩·亨利
该评论由网站上的主持人最小化
亲爱的亨利,
以下 VBA 代码可以帮助您解决问题。 请将 VBA 脚本放入您的工作表模块。 当指定单元格中的值满足条件时,将弹出 Kutools for Excel 对话框,请选择包含收件人电子邮件地址的单元格,然后单击 OK 按钮。 然后打开指定收件人的电子邮件。 请根据需要发送它们。

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
设置xRg = Range(“ D7”)
如果 xRg = Target And Target.Value > 200 那么
致电 Mail_small_Text_Outlook
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
将 xRgMsg 调暗为范围
将 xCell 调暗为范围
Set xRgMsg = Application.InputBox("请选择地址单元格:", "Kutools for Excel", , , , , , 8)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
对于 xRgMsg 中的每个 xCell
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
使用 xOutMail
.To = xCell.Value
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
xOutApp = 没有
xOutMail = 没有
下一页
出错时转到 0
END SUB
水晶
该评论由网站上的主持人最小化
是否会自动发送邮件,无需任何人工中断
该评论由网站上的主持人最小化
亲爱的梵天,
如果您想直接发送邮件而不显示,请将上述 VBA 代码中的“.Display”行替换为“.Send”。
水晶
该评论由网站上的主持人最小化
嗨,我放了相同的脚本,但它不起作用,请在第一部分帮助我

将 xRg 调暗为范围

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
设置xRg = Range(“ D7”)
如果 xRg = Target And Target.Value = 200 那么
致电 Mail_small_Text_Outlook
结束如果

END SUB
罗勒
该评论由网站上的主持人最小化
亲爱的罗勒,
运行代码时是否有任何警告?
水晶
该评论由网站上的主持人最小化
您好,您将如何修改此代码以检查一组单元格是否具有字符串“不匹配”并发送电子邮件(如果有)。
若泽·曼努埃尔·
该评论由网站上的主持人最小化
亲爱的荷西,
请尝试以下 VBA 代码。 运行代码时,会弹出一个对话框,请选择要检查字符串的范围,然后单击确定按钮。 如果字符串不存在,您将得到一个提示对话框。 如果该字符串存在于该范围内,将显示具有指定收件人、主题和正文的电子邮件。

子发送电子邮件()
暗淡我只要
昏暗J只要
将 xRg 调暗为范围
暗淡 xArr
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
将 xFlag 调暗为布尔值
出错时继续下一步
Set xRg = Application.InputBox("请选择范围", "Kutools for Excel", Selection.Address, , , , , 8)
如果 xRg 什么都不是,则退出 Sub
xArr = xRg.值
xFlag = 假
对于 I = 1 到 UBound(xArr)
对于 J = 1 到 UBound(xArr, 2)
如果 xArr(I, J) = "不匹配" 那么
xFlag = 真
结束如果
下一页
下一页
如果 xFlag 则
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
使用 xOutMail
.To = "电子邮件地址"
.CC =“”
.BCC =“”
.Subject = "匹配"
.Body = xMailBody
.Display '或使用 .Send
结束
其他
MsgBox "找不到匹配的值", vbInformation, "KuTools for Excel"
结束如果
END SUB
水晶
该评论由网站上的主持人最小化
我如何更改此代码以将学生成绩发送给父母。 如果 A 列是成绩,B 列是父电子邮件。 我想为每个学生填写一封电子邮件,并以 F 作为成绩。
坦率
该评论由网站上的主持人最小化
亲爱的弗兰克,
下面的 VBA 代码可以帮助您解决问题。 谢谢你。

子 Mail_small_Text_Outlook()
将 xRg 调暗为范围
暗淡我只要
将 xRows 变暗
将 xVal 调暗为字符串
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
出错时继续下一步
Set xRg = Application.InputBox("请选择成绩栏和邮箱栏(两栏)", "Kutools for Excel", Selection.Address, , , , , 8)
如果 xRg 什么都不是,则退出 Sub
xRows = xRg.Rows.Count
设置 xRg = xRg(2)
对于 I = 1 到 xRows
xVal = xRg.Offset(I, -1).Text
如果 xVal = "F" 那么
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是你孩子的成绩” & xRg.Offset(I, -1).Text
使用 xOutMail
.to = xRg.Offset(I, 0).Text
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
结束如果
下一页
END SUB
水晶
该评论由网站上的主持人最小化
我的 excel 文件中已经有一个电子邮件地址列表,如果他的单元格 D7 >200,我如何修改代码以自动选择该人的电子邮件地址?
Dhruv直升机
该评论由网站上的主持人最小化
美好的一天,
以下 VBA 代码可以帮助您解决问题。 请将 VBA 脚本放入您的工作表模块。 当指定单元格中的值满足条件时,将弹出 Kutools for Excel 对话框,请选择包含收件人电子邮件地址的单元格,然后单击 OK 按钮。 然后打开指定收件人的电子邮件。 请根据需要发送它们。

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
设置xRg = Range(“ D7”)
如果 xRg = Target And Target.Value > 200 那么
致电 Mail_small_Text_Outlook
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
将 xRgMsg 调暗为范围
将 xCell 调暗为范围
Set xRgMsg = Application.InputBox("请选择地址单元格:", "Kutools for Excel", , , , , , 8)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
对于 xRgMsg 中的每个 xCell
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
使用 xOutMail
.To = xCell.Value
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
xOutApp = 没有
xOutMail = 没有
下一页
出错时转到 0
END SUB
水晶
该评论由网站上的主持人最小化
我无法通过 Outlook 发送邮件。 我收到错误消息“程序正在尝试代表您发送电子邮件。如果发生意外,请拒绝并验证您的防病毒软件是最新的”
请帮忙,因为我无法自动化它。
马扬克维杰
该评论由网站上的主持人最小化
对不起,马扬克,
该代码在我的情况下运行良好。 似乎在您的 Outlook 中配置了有关“代表发送”功能的内容。 请检查一下。
水晶
该评论由网站上的主持人最小化
您好,如果我尝试向经理发送一封电子邮件,该经理有一个每月一次数量 > 200 的水果列表(基于您的示例)或即将到期(基于日期),我将使用什么代码
New2Excel
该评论由网站上的主持人最小化
美好的一天
可能是这篇文章中的方法“如果Excel中的截止日期已经满足,如何发送电子邮件?” 可以帮你。
请点击此链接: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
水晶
该评论由网站上的主持人最小化
如何编辑代码以根据单元格中的日期发送电子邮件。 例如,我需要每 15 个月审查一次文件,并且我想在 12 个月后向一个电子邮件地址发送一封电子邮件,说明该文件需要审查。 我现在可以通过将 .Display 更改为 .Send 来自动发送电子邮件,并且它的编写效果很好,但是我需要更改什么才能使用日期函数而不是整数?
道格
该评论由网站上的主持人最小化
如何将多个范围添加到“Set xRg = Range("D7")”。 我想编辑它并添加 Range("D7:F7")。 但是,我收到运行时错误 13,类型不匹配的错误,它让我进入 If xRg = Target And Target.Value > 2 Then。


我该如何解决这个问题?
萨维奥·乔伊斯
该评论由网站上的主持人最小化
美好的一天,
请尝试下面的 VBA 代码来解决问题。

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
If (Not Intersect(Target, Range("D7:F7")) Is Nothing) And (Target.Value > 200) Then
致电 Mail_small_Text_Outlook
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
使用 xOutMail
.To = "您的收件人的电子邮件地址"
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
END SUB
水晶
该评论由网站上的主持人最小化
工作得很好..谢谢..:):)
萨维奥·乔伊斯
该评论由网站上的主持人最小化
它对我不起作用,因为 D7 中的值是公式的结果。 如果单元格 D7 包含一个公式,例如 D7 =2*120,该怎么办? 它仍然符合条件,但没有发生任何事情。 请帮忙
尼醇
该评论由网站上的主持人最小化
如何停止代码运行即不满足条件时不提示电子邮件?

即使 D7 < 200,我仍然会收到电子邮件提示。
哈尼莎伊斯梅尔
该评论由网站上的主持人最小化
美好的一天,
代码在帖子中更新,问题已解决。 感谢您的评论。
水晶
该评论由网站上的主持人最小化
Hi

非常感谢您发布此 VBA 代码和说明。 当我找到它时,我觉得我中了乐透。 但是我被困在一些事情上,所以我希望你能提供帮助(我是 VBA 的新手,只有非常基本的理解)。

如果满足条件,我已经复制了代码并更改了单元格和单元格值以从范围中选择。 我已经尝试并测试过了,它可以工作,并且我收到了一封基于标准发送给 Outlook 的电子邮件。

1) 但是,当我打开 Excel 工作表时,我似乎无法弄清楚如何让 VBA 代码自动运行,而不必单击 VBA 应用程序并选择运行。 您能否告知是否有额外的提示可以输入上面的 VBA 代码来执行此操作,或者是否必须单独完成。

2)如果某个项目的截止日期是“是”,还有一种方法可以让 VBA 代码向某人发送邮件,如下面的示例所示。
电子邮件隐藏栏
名称:

程序
程序 1 截止日期 是
程序编号2 截止日期无

我会在电子表格中有很多人(在一行中水平穿过)并且可以为各种过期程序突出显示“是”(在 A 列中垂直列出。有没有办法创建一个运行类似这样的 VBA 代码 -如果“人员 1”为“是”,则向“人员 1”发送电子邮件,并附上“程序编号 #”(或数字)和截止日期。能够在电子邮件中列出所有程序及其后续截止日期。

我不介意我是否必须为每个人设置一个单独的 VBA 代码,只要它发送一封包含该人所有逾期文件和到期日期的邮件。

希望你能帮忙
该评论由网站上的主持人最小化
亲爱的安,
请尝试以下 VBA 代码。 感谢您的评论。

子 Mail_small_Text_Outlook()
将 xRg 调暗为范围
将 xCell 调暗为范围
暗淡我只要
将 xRows 变暗
将 xCols 调暗
将 xVal 调暗为字符串
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
出错时继续下一步
Set xRg = Application.InputBox("选择包含您将发送电子邮件的单元格值的范围:", "Kutools for Excel", Selection.Address, , , , , 8)
如果 xRg 什么都不是,则退出 Sub
xRows = xRg.Rows.Count
xCols = xRg.Columns.Count
对于 I = 1 到 xRows
设置 xCell = xRg(I, xCols)
如果 xCell.Value = "Yes" 那么
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是你的信息:” & vbNewLine & xCell.Offset(0, -1).Text & vbNewLine & xCell.Offset(0, -2).Text
使用 xOutMail
.To = xCell.Offset(0, -4).Text
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
结束如果
下一页
END SUB
水晶
该评论由网站上的主持人最小化
水晶,

这将替换以下代码:

子电子邮件()

将 xRg 调暗为范围

将 xRgEach 调暗为范围

暗淡 xEmail_Subject、xEmail_Send_Form 等。
杰梅因 -
该评论由网站上的主持人最小化
我们到底在哪里插入这段代码?
雅各
该评论由网站上的主持人最小化
美好的一天,
您需要将代码放入工作表的代码窗口中。
打开 Microsoft Visual Basic for Applications 窗口,双击左侧窗格中的工作表名称以打开代码编辑器。
水晶
该评论由网站上的主持人最小化
您好,


我目前在编码方面遇到了一些麻烦(对此很陌生-可能咬得比我能咀嚼的还多)


我目前有一个电子表格,包含以下内容


我目前需要一个可以使用以下数据的代码:


1)地址和问题(通过((在单元格D2)中合并的1个“一般”单元格)“==CONCAT(B1,”“C1,)”
B1 中的地址总是相同的(或多或少)
而 C1 将始终根据属性的故障而变化。


2) 由同一电子邮件地址发送的电子邮件,(我可以使用 $E$1 还是必须使用 E1 - E1 。例如)或者我可以在代码行中输入“TheEmailAdress@.co.uk”


3) 以与第 1 点类似的方式填充电子邮件正文) ...... ((在单元格 F1)) " =CONCAT(G1," ",H1)
这些将不断变化,因为它们代表公司(G1)以及他们正在做什么,修复,引用等(H1)

4)发送电子邮件的触发器,我将是数字 7 ,表格每天更新(一周中的 7 天)
因此,我需要触发器在第 7 天发送电子邮件,但在第 8 天、第 9 天、第 10 天等时不需要经常发送电子邮件。 而不是在 1-6 之前,这将在 A4 中:A 100+(因为我们正在不断扩展


4)我使用了其他用户的小片段,他们提到使用触发器列表来发送电子邮件,但不确定它是否 100% 正确,但我需要它来扫描所有 Collum A... .A4:A100
如果有 47 个单元格仅包含“7”,则将发送 47 封电子邮件


非常感谢您的阅读,希望您能提供帮助:)
马丁
该评论由网站上的主持人最小化
亲爱的马丁,
抱歉帮不上忙。
您可以在我们的论坛中发布您的问题: https://www.extendoffice.com/forum.html 从我们的技术人员那里获得更多的 Excel 支持。
感谢您的评论。

最好的问候,
水晶
水晶
该评论由网站上的主持人最小化
嗨,


如果我想根据添加到 L 列的“完成”一词来发送电子邮件怎么办?
杰西
该评论由网站上的主持人最小化
亲爱的杰西,
以下 VBA 代码可以帮助您解决问题。 感谢您的评论。

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
If (Not Intersect(Target, Range("L:L")) Is Nothing) And (Target.Value = "completed") Then
致电 Mail_small_Text_Outlook
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
使用 xOutMail
.To = "您的收件人的电子邮件地址"
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
END SUB
水晶
该评论由网站上的主持人最小化
嗨,
我希望 Outlook 仅在我粘贴到范围(“D7:F7”)中的数据至少有 1 个零或空白时才弹出。
我已经删除了“If Target.Cells.Count > 1 Then Exit Sub”行,现在当我将任何一组值粘贴到单元格 D7:F7 中时,Outlook 总是会启动。

救命。
一月三十一日
该评论由网站上的主持人最小化
亲爱的简,
以下脚本可以帮助您解决问题。 感谢您的评论。

私人子Worksheet_Change(按目标的ByVal目标)
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
出错时继续下一步
If Target.Address = Range("D7:F7").Address Then
使用 Application.WorksheetFunction
如果 .CountIf(Target, "") > 0 或 .CountIf(Target, 0) > 0 那么
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
使用 xOutMail
.To =“电子邮件地址”
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body =“你好”
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
结束如果
结束
结束如果
END SUB
水晶
该评论由网站上的主持人最小化
因此,我使用您的编辑来包含单元格范围,但是(如果我们使用工作表示例)我想知道如何将水果的类型、日期和数量从工作表添加到 HTML 电子邮件中,如果它们符合标准生成一封电子邮件。 所以它会说

“你好呀,”

单元格中的水果名称“需要延期交货,因为截至订单日期:”单元格中的订单日期“我们有这个数量:”单元格中的数量。
诺埃米
该评论由网站上的主持人最小化
嗨诺埃米,
请试试这个 VBA 脚本。

私人子Worksheet_Change(按目标的ByVal目标)
将 xRg 调暗为范围
将 I、J、K 变暗
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
出错时继续下一步
If Target.Address = Range("D7").Address Then
使用 Application.WorksheetFunction
如果 IsNumeric(Target.Value) 和 Target.Value > 200 则
Set xRg = Application.InputBox("请选择您将在邮件正文中显示的单元格范围:", "KuTools for Excel", Selection.Address, , , , , 8)
如果 xRg 什么都不是,则退出 Sub
对于 I = 1 到 xRg.Rows.Count
对于 J = 1 到 xRg.Rows(I).Columns.Count
对于 K = 1 到 xRg.Rows(I).Columns(J).Count
xMailBody = xMailBody & " " & xRg.Rows(I).Columns(J).Cells(K).Text
下一页
下一页
xMailBody = xMailBody &amp; vbNewLine
下一页
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
使用 xOutMail
.To =“电子邮件地址”
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = "你好" & vbNewLine & xMailBody
.Display '或使用 .Send
结束
出错时转到 0
设置 xOutMail = 无
设置 xOutApp = 无
结束如果
结束
结束如果
END SUB
水晶
该评论由网站上的主持人最小化
嗨水晶
感谢您的代码,如果可能,请发送代码以获取以下详细信息

如果我们有 8 到 9 列使用不同类型的过期日期,如护照过期日期、驾驶执照过期日期、车辆登记过期日期、门牌过期日期等,并且邮件警报必须仅发送给 5 个给定的人。

就像我们的日期表有 300 多名员工一样,过期和到期日期在 15 天内为红色,并且应发送电子邮件警报。

请做需要的事

在此先感谢
芭莎
该评论由网站上的主持人最小化
你好,
我们发布了一篇文章“如果 Excel 中的截止日期已到,如何发送电子邮件?”
你可以看看这篇文章有没有答案。 请点击此链接打开文章: https://www.extendoffice.com/documents/excel/4664-excel-send-email-if-due-date-has-been-met.html
感谢。
水晶
该评论由网站上的主持人最小化
您好-如果我想从列表中发送电子邮件,而不是将实际的电子邮件地址放入代码中,这可能吗? 谢谢
凯文·b
该评论由网站上的主持人最小化
你好,
请尝试下面的 VBA 代码,当指定的单元格满足条件时,将弹出一个对话框,请选择包含您将发送电子邮件的电子邮件地址的单元格。 希望它可以提供帮助。 谢谢你。

私人子Worksheet_Change(按目标的ByVal目标)
如果 Target.Cells.Count > 1 然后退出 Sub
设置xRg = Range(“ D7”)
如果 xRg = Target And Target.Value > 200 那么
致电 Mail_small_Text_Outlook
结束如果
END SUB
子 Mail_small_Text_Outlook()
将 xOutApp 调暗为对象
将 xOutMail 调暗为对象
将 xMailBody 调暗为字符串
将 xRgMsg 调暗为范围
将 xCell 调暗为范围
Set xRgMsg = Application.InputBox("请选择地址单元格:", "Kutools for Excel", , , , , , 8)
xMailBody = "你好" & vbNewLine & vbNewLine & _
“这是第 1 行” & vbNewLine & _
“这是第 2 行”
出错时继续下一步
对于 xRgMsg 中的每个 xCell
设置 xOutApp = CreateObject("Outlook.Application")
设置 xOutMail = xOutApp.CreateItem(0)
使用 xOutMail
.To = xCell.Value
.CC =“”
.BCC =“”
.Subject =“按单元格值测试发送”
.Body = xMailBody
.Display '或使用 .Send
结束
xOutApp = 没有
xOutMail = 没有
下一页
出错时转到 0
END SUB
水晶
这里还没有评论
加载更多
留下你的意见
以访客身份发帖
×
评价此帖子:
0  产品特性
建议地点