2013-07-03 76 views
1

我遇到了很多的困難得到一個SaveAs命令才能正常工作。對於當地醫院來說,患者圖表是從模板文件創建的,其中輸入患者數據,然後手動重命名(使用save-As),然後複製到另一個位置作爲備份。該模板一遍又一遍地重複使用。另存爲命令不起作用,但SaveCopyAs確實

我的代碼的目標是這個自動執行此過程。因此我想從模板文件開始保存到兩個不同的位置。模板文件不應該被覆蓋。在模板中,用戶分別在單元格K1和N1中設置部門名稱和牀號。這些字段確定該文件夾中的文件夾和文件名。

當按下保存按鈕時,我的代碼開始運行。我使用SaveCopyAs來保存備份文件,之後我想使用SaveAs保存到我的主文件夾。 SaveAs應該將這個新文件設置爲我的工作文件,因此不會覆蓋我的模板。至少這是我相信...

問題:當運行SaveAs,Excel崩潰(沒有任何明確的錯誤信息)。奇怪的事情(對我來說)是,當我將SaveAs替換爲SaveCopyAs時,它不會崩潰。

問題:爲什麼Excel會在這一點上崩潰?有沒有辦法來解決或避免這種行爲?我無法找到不會改變我的模板的合適解決方案。任何幫助或建議都是值得歡迎的。

下面的代碼放置在我的「的ThisWorkbook」的文件夾,並執行我點擊「保存」按鈕上每一次。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

    department = Range("K1").Value 'Name of department: CHIC, THIC, ICB or NCIC 
    bedNumber = Range("N1").Value 'bednumber or roomnumber: Bed 1. Bed 2 or Room 1, Room 2. 
    newFileName = department & "\" & bedNumber & ".xls" 

    If IsEmpty(department) Then 
     MsgBox "You haven't entered a department. Please try again." 
    ElseIf IsEmpty(bedNumber) Then 
     MsgBox "You haven't entered a bed or room number. Please try again." 
    Else 
     ActiveWorkbook.SaveCopyAs "C:\myBackupFolder\" + newFileName 
    End If 


    ActiveWorkbook.SaveAs "C:\myPrimaryFolder\" + newFileName 'Doesn't work 

    'ActiveWorkbook.SaveCopyAs "C:\myPrimaryFolder\" + newFileName 'Does work, but I end up with a messed up template! 
End Sub 
+1

我注意到你沒有在程序中設置Cancel。你可能想把'Cancel'設置爲** True **,所以excel不會自己保存。 – SeanC

+0

好點!謝謝! –

回答

1

以及設置Cancel = True防止默認保存行爲,添加:

Application.EnableEvents = False 
ActiveWorkbook.SaveAs "C:\myPrimaryFolder\" + newFileName 'Doesn't work 
Application.EnableEvents = True 

防止被再次調用相同的程序(並再次..)。這可能是它崩潰的原因。

+0

非常感謝,這解決了我的問題! –