0
我正在寫一個Excel宏以下算法:的Excel本身做一個文件覆蓋
步驟:在Outlook
2)下載附件
1)循環通過電子郵件(Excel文件)到一個特定的文件夾
3)打開Excel儀表盤模板
4)打開保存附件(excel文件)
5)從連接複製數據到模板
6)關閉附件
7)在模板調整數據
8)保存模板作爲新的工作簿
9)轉到步驟3並繼續下一步附件
我的問題是,在第6步中文件(附件)並沒有完全關閉 - 它仍然可以在項目瀏覽器中看到,所以每次我薩文g模板擅長作爲新的Dashboard.xlsx,它立即用附件覆蓋它。我已經搜索瞭解決方案,但是我發現的所有內容都是在附件上使用workbooks.close
,這對我不起作用。
我發現完全關閉附件的唯一方法是關閉模板文件,因此看起來它們以某種方式連接。
下面是代碼:
' this code gets called by a macro that downloads the attachments
Sub update_WB()
Dim main_book, att_book As Workbook
Dim lastrow, firstrow As Long
Dim att_name as string
Workbooks.Open "../template.xlsx" ‘<- I have shorten the path for the purpose of posting
Set main_book = Application.ActiveWorkbook
main_book.Worksheets("Raw Data").Activate
main_book.Worksheets("Raw Data").Cells.Select
Selection.ClearContents
Selection.UnMerge
Application.Workbooks.Open "../attachment.xlsx" ‘<- I have shorten the path for the purpose of posting
Set att_book = ActiveWorkbook
att_book.Worksheets(1).Range("A:BD").Select
Selection.Copy main_book.Worksheets("Raw Data").Range("A:BD")
att_book.Close ‘<- this is where the attachment should close, but it does not. It only disappears from windows taskbar.
main_book.Worksheets("Raw Data").Activate
lastrow = Worksheets("Raw Data").Cells(Worksheets("Raw Data").Rows.Count, "A").End(xlUp).Row - 1
For firstrow = 1 To 100
If Worksheets("Raw Data").Cells(firstrow, 1).Text = "Date" Then Exit For
Next firstrow
main_book.Worksheets("Raw Data").Activate
main_book.Worksheets("Raw Data").Cells.Select
Selection.UnMerge
main_book.Worksheets("Raw Data").Range("A" & firstrow & ":BG" & lastrow - 1).Name = "Raw_Data"
‘.
‘.
‘.
‘. Some data manipulation –> copy, paste, delete, etc.
‘.
‘.
‘.
‘.
Application.DisplayAlerts = False
main_book.SaveAs (「../Dashboard_" & Format(Timeserial(hour(now()),minute(now()),second(now())),"hhmmss") & ".xlsx") ‘<- I have shorten the path for the purpose of posting. This is where excel does the saving twice – first it saved the main_book and then att_book, both under the same name.
Application.DisplayAlerts = True
main_book.Close '<- this is where both of the files close entirely
End Sub
感謝您的答覆,但遺憾的是它沒有工作,保存的文件是由Attachment.xlsx覆蓋。 – Wujaszkun
我細化了我的答案,請注意,您還通過活動工作簿在附件中提到了活動工作簿。這種類型的分配很容易出現錯誤,因爲沒有明確指向某個打開的文件。 –
仍然一樣。我嘗試了以下所有組合,但它沒有奏效。: '設置main_book = Workbooks.Open(模板:= 「../ template.xlsx 」)' '設置main_book = Workbooks.Add(模板:=「 ../ template.xlsx」)' '設置att_book = Application.Workbooks.Open「../ attachment.xlsx」' 'Set att_book = Application.Workbooks.Add「../ attachment.xlsx」' 事情是當我有附件已經保存在我的桌面,然後重新啓動應用程序,宏的錯誤部分完美工作。這實際上是我現在使用的解決方法 - 下載後重新啓動整個事情。 – Wujaszkun