2011-09-08 90 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