ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 黄雨森

[求助] 将EXCEL内容拆分成多个工作薄后发送给不同人

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-6-4 11:42 | 显示全部楼层
黄雨森 发表于 2014-6-4 10:58
邮件自动发送已经解决了,还有两个小问题:
    1、多个收件人,如一班附件可能需要发送给多个人
    2 ...

主题不同,可将
.Subject = "Records"
改为:
.Subject = brr(0, m) & "Records"

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-6-4 11:51 | 显示全部楼层
VBA万岁 发表于 2014-6-4 11:42
主题不同,可将
.Subject = "Records"
改为:

在草稿箱测试效果如下:
邮件分发截图.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-4 12:56 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-4 13:17 | 显示全部楼层
zhenghui13 发表于 2014-6-4 11:13
a.直接发送,把.save改成.send试试;
b.设置多个收件人的话,先要有一个EMAL列表对应相匹配的文件,然后把字典 ...

我自己倒腾了一下,还是不行,能帮我再修改一下吗?谢谢!附件中添加了多个收件人还有主题和正文示例,多谢了!
如果可以的话,能给程序加一下注释吗?谢谢!
找了半天,不知道怎么给分,感谢了!

按条件拆分工作表并发送给不同人.zip (13.42 KB, 下载次数: 33)



TA的精华主题

TA的得分主题

发表于 2014-6-4 13:33 | 显示全部楼层
VBA万岁 发表于 2014-6-4 11:51
在草稿箱测试效果如下:

能用闪电邮发送么。。。。

TA的精华主题

TA的得分主题

发表于 2014-6-4 14:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
jiminyanyan 发表于 2014-6-4 13:33
能用闪电邮发送么。。。。

我不会,如果大侠会的话,可否赐教?

TA的精华主题

TA的得分主题

发表于 2014-6-4 15:20 | 显示全部楼层
黄雨森 发表于 2014-6-4 13:17
我自己倒腾了一下,还是不行,能帮我再修改一下吗?谢谢!附件中添加了多个收件人还有主题和正文示例,多 ...

请测试:
Sub ExcelSplit2()
'---------------Define BILL Split
Dim cnn As Object, sql$
Dim arr, brr, m
Dim wb As Workbook
'---------------Define Outlook
    Dim wbStr As String, nlist As String
    Dim OutlookApp
    Dim newMail
    Set OutlookApp = CreateObject("Outlook.Application")
    Dim dic, n, k, j
    Dim c As Long, subj
   Set dic = CreateObject("Scripting.Dictionary")
'----------------run split
Application.ScreenUpdating = False
With Sheet1
arr = .Range("A1", "E2") 'ARRAY for Title
Set cnn = CreateObject("Adodb.Connection")
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" _
            & "Data Source=" & ThisWorkbook.FullName
sql = "select distinct 班级 from [总表$A2:E] where 班级 is not NULL"
'--check File number and name only
'Sheet2.[a1].CopyFromRecordset cnn.Execute(sql)
brr = cnn.Execute(sql).getrows
End With
'----------------------------------
ReDim subj(0 To [A65536].End(xlUp).Row - 5)
For n = 2 To [A65536].End(xlUp).Row - 4
    For c = 4 To Cells(n, Cells.Columns.Count).End(xlToLeft).Column
        subj(n - 2) = subj(n - 2) & Cells(n, c) & ";"
    Next c
    subj(n - 2) = Mid(subj(n - 2), 1, Len(subj(n - 2)) - 1)

    dic(Range("A" & n).Value) = subj(n - 2)
Next
'----------------------------------
For m = 0 To UBound(brr, 2)
    Set wb = Workbooks.Add
    sql = "select * from [总表$A2:E] where 班级='" & brr(0, m) & "'"
    wb.Sheets(1).[a3].CopyFromRecordset cnn.Execute(sql)
    wb.Sheets(1).Range("A1", "E2") = arr
    wb.SaveAs ThisWorkbook.Path & "\" & brr(0, m) & ".xlsx"
    k = dic(brr(0, m))

'---------------run OUTLOOK EMAIL--------------
    wbStr = ActiveWorkbook.FullName
    ActiveWorkbook.Close
         Set newMail = OutlookApp.CreateItem(olMailItem)
         With newMail
            .Subject = Format(Date, "yymmdd") & brr(0, m)
            .Body = "请查收" & brr(0, m) & "成绩,谢谢!"
            Set myAttachments = newMail.Attachments
                myAttachments.Add wbStr, olByValue, 1, "workbook"
            .To = k
            '.To = Replace(Join(k, ";"), " ", "")
            .Save
          End With
         
      k = ""
     'ActiveWorkbook.Close
     Set newMail = Nothing
  Next
     dic.RemoveAll
Application.ScreenUpdating = True
cnn.Close: Set cnn = Nothing
Set OutlookApp = Nothing

End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-6-4 15:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
VBA万岁 发表于 2014-6-4 15:20
请测试:
Sub ExcelSplit2()
'---------------Define BILL Split

草稿箱测试效果:
草稿箱测试效果.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-4 15:35 | 显示全部楼层
VBA万岁 发表于 2014-6-4 15:20
请测试:
Sub ExcelSplit2()
'---------------Define BILL Split

可以了,谢谢!终于弄成了,太感谢了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-5 15:10 | 显示全部楼层
VBA万岁 发表于 2014-6-4 15:25
草稿箱测试效果:

老师,你好!
我自己学习了一下这段代码,有些地方不知道是什么意思,可以帮忙看看吗?谢谢!

例如:  ReDim addr(0 To [A65536].End(xlUp).Row - 5)
           For n = 2 To [A65536].End(xlUp).Row - 4
                 For c = 6 To Cells(n, Cells.Columns.Count).End(xlToLeft).Column
                      addr(n - 2) = addr(n - 2) & Cells(n, c) & ";"
                Next c
                addr(n - 2) = Mid(addr(n - 2), 1, Len(addr(n - 2)) - 1)
                dic(Range("b" & n).Value) = addr(n - 2)
           Next

这段中的 addr(0 To [A65536].End(xlUp).Row - 5) 为什么要减5呢?我试过减去其他值时就没法获取结果,请帮解答一下谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 00:30 , Processed in 0.055621 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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