求Excel VBA代码:通过Outlook发邮件并指定收件人及正文单元格
Excel VBA 代码:交互式选择单元格生成Outlook邮件
没问题,这就给你安排一段实用的VBA代码,完全满足你的需求——运行后会一步步引导你选择对应内容的单元格,自动把这些内容导入Outlook创建新邮件,你可以直接检查后发送:
Sub CreateOutlookEmailFromCells() Dim olApp As Object Dim olMail As Object Dim rngTo As Range, rngCc As Range, rngBcc As Range, rngBody As Range Dim strTo As String, strCc As String, strBcc As String, strBody As String On Error GoTo ErrorHandler ' 让用户选择收件人(TO)单元格 Set rngTo = Application.InputBox("请选择包含收件人邮箱的单元格区域:", "选择收件人", Type:=8) strTo = Replace(Join(Application.Transpose(rngTo.Value), "; "), ";; ", "; ") strTo = Left(strTo, Len(strTo) - 2) ' 移除末尾多余的分号空格 ' 让用户选择抄送(Cc)单元格 Set rngCc = Application.InputBox("请选择包含抄送邮箱的单元格区域:", "选择抄送", Type:=8) strCc = Replace(Join(Application.Transpose(rngCc.Value), "; "), ";; ", "; ") strCc = Left(strCc, Len(strCc) - 2) ' 让用户选择密送(Bcc)单元格 Set rngBcc = Application.InputBox("请选择包含密送邮箱的单元格区域:", "选择密送", Type:=8) strBcc = Replace(Join(Application.Transpose(rngBcc.Value), "; "), ";; ", "; ") strBcc = Left(strBcc, Len(strBcc) - 2) ' 让用户选择邮件正文单元格 Set rngBody = Application.InputBox("请选择包含邮件正文的单元格区域:", "选择正文", Type:=8) strBody = Join(Application.Transpose(rngBody.Value), vbCrLf) ' 多行单元格自动换行 ' 初始化Outlook应用 On Error Resume Next Set olApp = GetObject(, "Outlook.Application") If Err.Number <> 0 Then Set olApp = CreateObject("Outlook.Application") End If On Error GoTo ErrorHandler ' 创建新邮件 Set olMail = olApp.CreateItem(0) With olMail .To = strTo .Cc = strCc .Bcc = strBcc .Body = strBody .Display ' 显示邮件,如果你想直接发送可以改成.Send,但建议先预览 End With ' 释放对象 Set olMail = Nothing Set olApp = Nothing Exit Sub ErrorHandler: MsgBox "操作取消或发生错误: " & Err.Description, vbExclamation Set olMail = Nothing Set olApp = Nothing End Sub
代码说明:
- 交互式选择:用
Application.InputBox(Type:=8)实现单元格选择,这是Excel VBA里专门用于选取单元格区域的方法,用户可以选单个单元格或多个连续单元格 - 邮箱格式处理:把选中的多个邮箱单元格内容用分号分隔(Outlook默认的多邮箱分隔符),同时移除可能出现的多余分隔符
- 正文换行:如果正文是多行单元格,会自动用换行符拼接,保持原格式
- Outlook兼容:优先调用已打开的Outlook实例,没有的话再新建,避免重复启动
- 错误处理:如果用户中途取消选择或者Outlook未安装,会弹出友好提示
使用方法很简单:打开Excel按Alt+F11打开VBA编辑器,插入一个新模块,把这段代码粘进去,然后运行CreateOutlookEmailFromCells宏就行啦。
内容的提问来源于stack exchange,提问作者Gyan Mohan
相关产品推荐
相关产品推荐

