2011-09-08 89 views
0

我正在尝试在Outlook(VBA)中编写一些代码,以便在文件到达时自动将附件保存到文件中。然而,难点是我想保存它们的文件名是部分从文件内容中提取的(例如,附件名为'10-0123.xls',并且包含Lockyer Valley的数据。我希望磁盘上的文件被称为'10 -0123_Lockyer.xls')。唯一参考位置(在这种情况下为'Lockyer')在附件中,并且每个电子邮件都会随着每个电子邮件而改变数字(在这种情况下为'10-0123')和位置(在这种情况下为'Lockyer')。Outlook VBA从附件中找到的字符串中获取附件的文件名

我已经找到了一种方法,通过将文件保存到磁盘('10-0123.xls'),打开它,在文件中找到字符串('Lockyer'),保存为新的文件名('10-0123_Lockyer.xls'),然后杀死原始文件('10-0123.xls'),但由于文件非常大,运行宏需要一段时间。有没有更高效的方法来实现这一目标?也许有一种方法可以直接从outlook打开文件,而不必先保存到磁盘上?

代码:

unPrntdRprts = "C:\New Reports" 
For Each Attachment In MailItem.Attachments 
    AtNameExt = Attachment.DisplayName 
    AtExt = Right(AtNameExt, 4) 
    AtName = Left(AtNameExt, Len(AtNameExt) - 4) 
    XLApp.DisplayAlerts = False 
    Attachment.SaveAsFile (UnPrntdRprts & "\" & AtNameExt) 
    XLApp.DisplayAlerts = True 
    XLApp.Workbooks.Open (UnPrntdRprts & "\" & AtNameExt) 
    SiteName = XLApp.Workbooks(AtNameExt).Worksheets(1).Range("A24").Value 
    SavName = AtName & "_" & SiteName & AtExt 
    XLApp.DisplayAlerts = False 
    XLApp.Workbooks(AtNameExt).SaveAs (UnPrntdRprts & "\" & SavName) 
    XLApp.DisplayAlerts = True 
    XLApp.Workbooks(SavName).Close 
    Kill (UnPrntdRprts & "\" & AtNameExt) 
Next 

回答

2

你能否:

  1. 保存文件
  2. 打开文件,以确定正确的文件名
  3. 关闭文件
  4. 重命名文件

然后这将删除第二个保存功能。

+0

干杯克雷格,这是一个想法,我会在明天早上看看它,让你知道。 –

+0

克雷格的想法欢呼,工作就像一个魅力。 –

+0

恐怕无法在Outlook中打开文件(您需要先保存它),但如果Craig的答案奏效,您能否将其标记为答案? – JimmyPena