Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6323|回复: 4

[已解决]OUTLOOK批量下载附件,重复文件名无法全部下载

[复制链接]
发表于 2014-3-25 09:52 | 显示全部楼层 |阅读模式
我最近使用OUTLOOK批量下载附件的代码,这个真可以大大提高工作效率。同时 ,带来一个问题,当对方回复的附件名有重复时,比如,ABC三位的附件名是重复的,应该下载3份,最终只有1份。

高手们,应该怎么修改呢?

最佳答案
2014-3-25 12:12
H若君E 发表于 2014-3-25 11:45
DIR啊,我不太懂,附上代码,能帮忙修改下吗?有时附件名字重复达到4个以上的。

保存附件那段改成这样
  1.          For Each att In vItem.Attachments
  2.             fn = "C:\Users\XXX\Documents" & att.Filename
  3.             Do Until Dir(fn) = ""
  4.                 fn = "C:\Users\XXX\Documents" & n & att.Filename
  5.                 n = n + 1
  6.             Loop
  7.             att.SaveAsFile fn
  8.          Next
复制代码
发表于 2014-3-25 10:14 | 显示全部楼层
保存附件前用dir(路径+文件名)检查同名文件是否已存在,若已存在则修改当前附件名称.
回复

使用道具 举报

 楼主| 发表于 2014-3-25 11:45 | 显示全部楼层
Zipall 发表于 2014-3-25 10:14
保存附件前用dir(路径+文件名)检查同名文件是否已存在,若已存在则修改当前附件名称.

DIR啊,我不太懂,附上代码,能帮忙修改下吗?有时附件名字重复达到4个以上的。
  1. Sub 下载电邮附件()

  2. On Error Resume Next


  3. Dim olApp As New Outlook.Application
  4.      Dim nmsName As Outlook.Namespace
  5.      Dim vItem As Object
  6.      Set nmsName = olApp.GetNamespace("MAPI")
  7.      Set myFolder = nmsName.GetDefaultFolder(olFolderInbox)
  8.      Set fldFolder = myFolder.Folders("Current")
  9.          
  10.      For Each vItem In fldFolder.Items

  11.             
  12.          MyArray = Split(Attachment.DisplayName, ".", -1, 1)
  13.          strname = MyArray(0) & Format(mymailitem.CreationTime, "_yyyymmdd_hhnnss") & "." & MyArray(1)
  14.          strname = MyArray(0) & Format(mymailitem.ReceivedTime, "_yyyymmdd_hhnn") & "." & MyArray(1)
  15.          strname = Right(MyArray(0), InStr(MyArray(0), "G1m")) & "." & MyArray(1)

  16.          If (fso.FileExists(filefolder & strname) = False) Then
  17.              temp = i & " " & mymailitem.Subject & "   " & mymailitem.CreationTime & " " & Attachment.DisplayName
  18.              Attachment.SaveAsFile filefolder & strname
  19.              temp = mymailitem.CreationTime & " " & filefolder & strname
  20.              f.Writeline temp
  21.             
  22.             msg = msg & temp & vbCrLf
  23.              wcount = wcount + 1
  24.         End If
  25.       
  26.          For Each att In vItem.Attachments
  27. att.SaveAsFile "C:\Users\XXX\Documents" & att.Filename
  28.          
  29.          Next
  30.       
  31.      Next
  32.      
  33.     Set fldFolder = Nothing
  34.      Set nmsName = Nothing



  35. End Sub
复制代码
回复

使用道具 举报

发表于 2014-3-25 12:12 | 显示全部楼层    本楼为最佳答案   
H若君E 发表于 2014-3-25 11:45
DIR啊,我不太懂,附上代码,能帮忙修改下吗?有时附件名字重复达到4个以上的。

保存附件那段改成这样
  1.          For Each att In vItem.Attachments
  2.             fn = "C:\Users\XXX\Documents" & att.Filename
  3.             Do Until Dir(fn) = ""
  4.                 fn = "C:\Users\XXX\Documents" & n & att.Filename
  5.                 n = n + 1
  6.             Loop
  7.             att.SaveAsFile fn
  8.          Next
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-4-4 10:29 | 显示全部楼层
Zipall 发表于 2014-3-25 12:12
保存附件那段改成这样

高手啊,有新情况,现在发现下载后的文件名五花八门,七零八落,惨不忍睹。

想一次性对下载后的附件们直接进行重命名,YYYYMM_OUTLOOKATT_XXXX,YYYYMM是附件所保存的文件夹的名字(如201404),XXXX就是每份附件EXCEL单元格A2的内容,每一份附件单元格A2的内容都是不同的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-17 22:07 , Processed in 0.242460 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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