ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 如何实现outlook指定文件夹中的邮件附件全部下载并按日期归类到不同文件夹中?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-11-8 15:17 | 显示全部楼层 |阅读模式
各位大神,我碰到一个有问题,需要您帮忙给个建议。
问题如下:我用VBA已经实现了读取outlook指定文件夹“For Download”中的邮件的附件,并全部下载将其保存在桌面新建的“Email Attachment Temp”文件夹中(这是第一步功能)


但是我想进一步让这些文件能根据不同的接收日期放到不同的子文件夹中。每个子文件夹都以接收日期来命名,同一天的邮件的附件都放在一个子文件夹中(这是第二步功能)。例如,子文件夹“2017-11-08”中存放的都是2017年11月8号收到的邮件的附件。


请各位大神帮我看看,我应该怎么修改我的VBA代码才可以实现这个指令。谢谢您的帮助。O(∩_∩)O哈哈~

这是我已经完成的代码,经过测试,可以实现第一步功能,但是第二步功能还无法实现。┭┮﹏┭┮
'将For Download中的附件全部保存
Sub Savetheattachment1()
    Dim olApp As New Outlook.Application
    Dim nmsName As Outlook.NameSpace
    Dim vItem As Object
    Set nmsName = olApp.GetNamespace("MAPI")
    Set myFolder = nmsName.GetDefaultFolder(olFolderInbox)
    Set fldFolder = myFolder.Folders("For Download")
    dd = "C:\Users\Public\Desktop\Email Attachment Temp"
    If Dir(dd, vbDirectory) = "" Then MkDir dd
    '若无C:\Email Attachment Temp 文件夹则新建该文件夹
    For Each vItem In fldFolder.Items
    '对fldFolder里的每一封邮件进行循环
        For Each att In vItem.Attachments
        '对每一封带附件的邮件
        fn = "C:\Users\Public\Desktop\Email Attachment Temp\" & att.FileName
        'fn为路径+附件名
        n = 1
        Do Until Dir(fn) = ""
        '如果为空,说明该路径下没有该文件
        fn = "C:\Users\Public\Desktop\Email Attachment Temp\ " & n & "_" & att.FileName
        '有该文件名则重命名前面加数字
        n = n + 1
        Loop
        att.SaveAsFile fn
        '附件存到C:\Email Attachment Temp中
        Next
    Next
    Set fldFolder = Nothing
    Set nmsName = Nothing
    MsgBox "已导出全部附件到“C:\Users\Public\Desktop\Email Attachment Temp”,请查看。"
End Sub


TA的精华主题

TA的得分主题

发表于 2017-11-9 22:50 | 显示全部楼层
  dd = "C:\Users\Public\Desktop\Email Attachment Temp" 修改DD 就行

dd= "C:\Users\Public\Desktop\Email Attachment Temp" & today()
但是你要判断是否已经建立这个日期的 文件夹

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-11-10 17:06 | 显示全部楼层
闻启学 发表于 2017-11-9 22:50
dd = "C:%users\Public\Desktop\Email Attachment Temp" 修改DD 就行

dd= "C:%users\Public\Desktop\ ...

我试了你说的这一句,但是运行不了。我想问一下,如何用VBA获取邮件的收件时间呢?

TA的精华主题

TA的得分主题

发表于 2017-11-27 13:54 | 显示全部楼层
第二步实现可以分为下面几个步骤去实现:
1.获取邮件的接受或发送时间作为文件夹命名标准
2.每个附件要保存的时候都要先判断该日期文件夹是否存在
3.存在直接保存到文件中,不存在创建再保存到文件中。
PS:需要注意Windows下文件命名的规范!

TA的精华主题

TA的得分主题

发表于 2017-11-28 23:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 00:52 , Processed in 0.025954 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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