ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 332|回复: 3

VBA如何调用新版本的outlook应用发送邮件?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-10-12 21:39 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师好,VBA可以调用老版本的outlook应用程序进行批量发送邮件,但是现在默认的win11系统,配置了都是新版本的outlook邮箱应用程序,导致之前的VBA代码无法成功调用新的outlook应用进行批量发送邮件,请问老师有什么解决方案吗?


目前想到了一个笨的解决方法,就是把新版本的outlook应用强制给降到老的版本,但是感觉这个并不是长久之计,所以想问下老师,有没有方法调用新版本的outlook应用程序,
群发工资条.png
之前老版本的应用程序如下:
'使用 Outlook 来发送邮件了
Sub 群发邮件()
Dim aa
Dim mydir As String
                    aa = MsgBox("即将发送邮件,清检查发送信息,信息无误,请点“确认”继续", 1)
                    If aa = vbCancel Then
                        Exit Sub
                    End If
'Call wl
'Select Case Left(Cells(1, 6).Value, 8)
'Case GetText
'Case Else
'    aa = MsgBox("网络时间:" & GetText & Chr(13) & "数据时间:" & Left(Cells(1, 6).Value, 8) & Chr(13) & "正准备发送非常态日期数据," & Chr(13) & "是否确认发送?", 1)
'    If aa = vbCancel Then
'         Exit Sub
'    End If
'    aa = MsgBox("网络时间:" & GetText & Chr(13) & "数据时间:" & Left(Cells(1, 6).Value, 8) & Chr(13) & "正准备发送非常态日期数据," & Chr(13) & "请再次是否确认发送?", 1)
'    If aa = vbCancel Then
'         Exit Sub
'    End If
'End Select

                    aa = MsgBox("即将发送邮件,清检查发送信息,信息无误,请点“确认”继续" & VBA.Chr(13) & VBA.Chr(13) & Cells(1, 7).Value, 1)
                    If aa = vbCancel Then
                        Exit Sub
                    End If
        '要能正确发送并需要对Microseft Outlook进行有效配置
        On Error Resume Next
        Dim a, endRowNo
        'Dim objOutlook As New Outlook.Application
        'Dim objMail As MailItem
         Dim objOutlook As Object
         Dim objMail As Object
        
        '取得当前工作表与Cells(1,1)相连的数据区行数
        endRowNo = Cells(1, 1).CurrentRegion.rows.Count
        '创建objOutlook为Outlook应用程序对象
        'Set objOutlook = New Outlook.Application
        Set objOutlook = CreateObject("Outlook.Application")
        '开始循环发送电子邮件,比如从第二行开始,第一行是标题
        For a = 2 To endRowNo
            mydir = Cells(a, 8).Value
            If mydir <> "" Then             '检查附件1,如果不存在,则不发送
                If FileFolderExists(mydir) Then
                    '创建objMail为一个邮件对象
                    'Set objMail = objOutlook.CreateItem(olMailItem)
                     Set objMail = objOutlook.CreateItem(0)
                        With objMail
                            .To = Cells(a, 3).Value         '设置收件人地址,如20017130@qq.com
                            .CC = Cells(a, 4).Value         '设置抄送收件人地址
                            .BCC = Cells(a, 5).Value        '设置密抄收件人地址
                            .Subject = Cells(a, 6).Value    '设置邮件主题
                            .Body = Cells(a, 7).Value       '邮件内容
                            .Attachments.Add Cells(a, 8).Value    '设置附件1,需包含路径
                            .Attachments.Add Cells(a, 9).Value
                            .Attachments.Add Cells(a, 10).Value
                            .Attachments.Add Cells(a, 11).Value
                            .Attachments.Add Cells(a, 12).Value
                            .Send
                         End With
                    '销毁objMail对象
                    Set objMail = Nothing
                Else
                    MsgBox "第" & a & "行," & VBA.Chr(13) & mydir & VBA.Chr(13) & "文件不存在,邮件没有发送成功。"
                    Exit Sub
                End If
            Else
                MsgBox "第" & a & "行,附件路径为空,邮件没有发送成功。"
                Exit Sub
            End If
         ' Delay 3                  '延时几秒发数据,针对规定时间内发送邮件数量有限制的人使用
            
        Next
          '销毁objOutlook对象
          Set objOutlook = Nothing
         
       MsgBox "邮件已发送,稍候请留意查收!", 0, "发送回报"
         
End Sub


TA的精华主题

TA的得分主题

发表于 2024-10-13 13:40 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-10-14 17:06 | 显示全部楼层
lss001 发表于 2024-10-13 13:40
Outlook发送邮件前需要配置帐号
建议使用CDO稍微简单些仅需配置授权码
https://club.excelhome.net/forum ...

好的 谢谢老师  但是对于小白来说  配置授权码还是挺麻烦的  而且不懂的人会感觉不安全。所以还是在想有没有办法直接调用新版本outlook邮箱

TA的精华主题

TA的得分主题

发表于 2024-10-15 09:46 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
星梦月缘 发表于 2024-10-14 17:06
好的 谢谢老师  但是对于小白来说  配置授权码还是挺麻烦的  而且不懂的人会感觉不安全。所以还是在想有 ...

发送邮件前
新版本首先设置帐号
为避免发送失败
第一次发送先手动打开Outlook(new)
然后发送邮件
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-26 20:54 , Processed in 0.033068 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表