ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] EXCEL通过VBA添加多个多个OUTLOOK附件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-21 23:40 | 显示全部楼层 |阅读模式
各位大神,有一个EXCEL模板,可以通过此模板批量发送OUTLOOK邮件,并可以实现不同邮件不同附件,但是有一个问题,不能添加多个附件,希望大神帮助修改代码,谢谢!
模板中:
A列是邮件标题;
B列是收件人名称;
C列是收件人收件箱;
D-J列是邮件附件的名称;(现在发送只能放入D列的附件,其他列的VBA放不进去)
K列是邮件正文。

Sub 全自动发送邮件()
    Dim myOlApp As Object
    Dim myitem As Object
    Dim i As Integer, j As Integer
    Dim strg As String
    Dim atts As Object
    Dim mycc As Object
    Dim myfile As String
    Set myOlApp = CreateObject("Outlook.Application")
    '设置对Sheet1工作表进行操作,可自行修改
    With Sheets("Sheet1")
        i = 2  '第一行为标题行,从第二行开始
        Do While .Cells(i, 2) <> "" '本例中判断当某行第二列为空时,停止发送邮件
                   '设置调用Outlook来发送邮件
        Set myitem = myOlApp.CreateItem(0)
        Set atts = myitem.Attachments
        myitem.To = .Cells(i, 3)    '收件人邮箱地址调用了第3列邮箱的数据
        myitem.Subject = .Cells(i, 1)             '标题调用了第1列的数据
        myitem.Body = .Cells(i, 11)
        myfile = Dir(ThisWorkbook.Path & "\" & .Cells(i, 4))  '在本工作薄的根目录下找出附件,且附件的文件名是第四列数据
        If myfile <> "" Then myitem.Attachments.Add ThisWorkbook.Path & "\" & myfile, 1
         '预览,如果想直接发送,把.display改为.send
           'myitem.send
            myitem.display
            i = i + 1
            strg = ""
        Loop
    End With
    Set myitem = Nothing
    End Sub

自动邮件.rar

92.62 KB, 下载次数: 69

TA的精华主题

TA的得分主题

发表于 2019-2-1 10:57 | 显示全部楼层
本帖最后由 tyxvba7529 于 2019-2-1 11:02 编辑

请参考代码
  1. '        添加附件开始
  2.             myfile = Dir(ThisWorkbook.Path & "" & Cells(i, 4) & "*")
  3.             Do
  4.                 myitem.Attachments.Add ThisWorkbook.Path & "" & myfile, 1
  5.                 myfile = Dir
  6.               Loop Until myfile = ""
  7. '              添加附件结束
复制代码



TA的精华主题

TA的得分主题

发表于 2019-2-1 11:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
'        添加附件开始
            myfile = Dir(ThisWorkbook.Path & "\" & Cells(i, 4) & "*")
            Do
                myitem.Attachments.Add ThisWorkbook.Path & "\" & myfile, 1
                myfile = Dir
              Loop Until myfile = ""
'              添加附件结束

TA的精华主题

TA的得分主题

发表于 2019-9-27 16:46 | 显示全部楼层
多个附件的话,直接定义就好,多谢几行.Attachments.Add

Dim myfile1 As String
Dim myfile2 As String
       myfile1 = Dir(ThisWorkbook.Path & "\*" & .Cells(i, 2) & "*.*")
       myfile2 = Dir(ThisWorkbook.Path & "\*" & .Cells(i, 1) & "*.*")
       Do Until myfile1 = ""
          myitem.Attachments.Add ThisWorkbook.Path & "\" & myfile1, 1
          myitem.Attachments.Add ThisWorkbook.Path & "\" & myfile2, 1
          myfile1 = Dir
Loop

TA的精华主题

TA的得分主题

发表于 2019-10-4 23:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主你好,请问你的问题解决了吗?我想需要做一个询价的一键自动发邮件的的表格,和你这个类似,但是你的模板里的宏代码有错误,看不了,我是VBA小白,能否再发一份你的模板?谢谢!我的邮箱:jiandong.sun@me.com

TA的精华主题

TA的得分主题

发表于 2023-8-23 10:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
        ' 添加附件
        If Sheet6.Cells(i, 5).Value <> "" Then '附件栏是否为空
        If InStr(Cells(i, 5), ";") < 0 Then        '是否有多个附件
            OutlookMail.Attachments.Add Cells(i, 5).Value   '添加单个附件
            Else:
        att = Split(Cells(i, 5).Value, ";")
          For j = 0 To UBound(att)                                  '添加每个附件  ,附件地址间用“;”隔开
          OutlookMail.Attachments.Add att(j)
          Next j
        End If
        End If

TA的精华主题

TA的得分主题

发表于 2023-8-23 10:46 | 显示全部楼层
本帖最后由 henterwu 于 2023-8-28 15:29 编辑

        ' 添加附件
        If Sheet6.Cells(i, 5).Value <> "" Then                      '附件栏是否为空
        If InStr(Cells(i, 5), ";") = 0 Then                             '是否多附件
            OutlookMail.Attachments.Add Cells(i, 5).Value
            Else:
        att = Split(Cells(i, 5).Value, ";")                             '多附件地址间用“;”隔开
          For j = 0 To UBound(att)
          OutlookMail.Attachments.Add att(j)                      '逐个加载附件
          Next j
        End If
        End If
使用与批发邮件时用。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 19:53 , Processed in 0.043983 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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