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
干杯克雷格,这是一个想法,我会在明天早上看看它,让你知道。 –
克雷格的想法欢呼,工作就像一个魅力。 –
恐怕无法在Outlook中打开文件(您需要先保存它),但如果Craig的答案奏效,您能否将其标记为答案? – JimmyPena