以下VBA代碼旨在運行於MS Office 2003。因爲這是我們數十億美元的公司給我們的合作伙伴。 =)爲什麼ThisWorkbook.SaveCopyAs在宏運行時工作,但在沒有運行時會運行?
好消息。如果我在IDE中編輯代碼並點擊保存,它會很好地工作。如果我正在處理電子表格本身,也一樣。如果不存在,則創建一個備份文件夾,並在其中保存一個過時的備份副本。
壞消息。當我運行主宏(太大而不能發佈)時,下面的代碼會執行但不保存備份副本。該事件被正確調用。實際上,如果不存在,它將創建一個備份文件夾。每條線都可以運行。這些變量都是正確的。錯誤處理工作。
簡單地說,如果主宏正在運行並調用ThisWorkbook.Save,則ThisWorkbook.SaveCopyAs將不起作用。
我幾個月前才知道這個特定項目的VBA,所以如果有什麼明顯的道歉,但是,我閱讀了所有相關的MSDN文檔並瘋狂地Google搜索,但沒有出現。
在此先感謝您的幫助。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'********************************************************************
'Purpose: Triggered by ThisWorkbook.BeforeSave event
' Creates backup folder and saves date appended copies
'********************************************************************
Dim strBackupPath As String 'Path to Backup Folder
Dim strFarkPath As String 'Path to running workbook
Dim strBackupName As String 'Filename of backup
Dim strFullName As String 'Full path & filename of running workbook
Dim strBackupExtension As String 'Extension of backup
Dim strDestination As String 'Full path & filename of backup
Dim strDrive As String 'Drive letter
strFarkPath = Application.ActiveWorkbook.Path
strDrive = Left(strFarkPath, 1)
strBackupPath = strFarkPath & "\_Backups"
strBackupName = "\Backup-" & Year(Now) & "-" & Month(Now) & "-" & Day(Now)
strFullName = Application.ActiveWorkbook.FullName
strBackupExtension = Right(strFullName, Len(strFullName) - InStrRev(strFullName, ".", -1, vbTextCompare) + 1)
strDestination = strBackupPath & strBackupName & strBackupExtension
On Error GoTo Incorrect
If Len(Dir(strBackupPath, vbDirectory)) = 0 Then
MkDir strBackupPath
End If
Application.DisplayAlerts = False
ThisWorkbook.SaveCopyAs Filename:=strDestination
Application.DisplayAlerts = True
Exit Sub
Incorrect:
MsgBox "Unable to back record keeper up. Next time, please run the program from a location where you can read and write files.", vbCritical + vbOKOnly
End Sub
是否'SaveCopyAs'觸發錯誤處理程序,或者只是什麼也不做? – 2015-02-08 19:51:05
感謝您的回覆。如果宏沒有運行,當我點擊Ctrl-S時它會保存一個副本。如果宏正在運行,它什麼都不做。它不會觸發錯誤處理程序。 – curieux 2015-02-08 19:53:37
在保存之前添加'Debug.Print strDestination' - 是您期望的輸出嗎? (輸出應該出現在VB編輯器的「即時」窗格中) – 2015-02-08 20:00:18