【发布时间】:2016-09-01 09:01:20
【问题描述】:
保存特定工作簿时,Excel 会创建一个临时文件而不是保存数据(不显示错误或警告消息)。症状与这篇文章中描述的大致相同: microsoft-excel-returns-the-error-document-not-saved-after-generating-a-2gb-temp-file 我尝试了几种解决方案,但决定实施一种变通方法,因为“另存为”工作正常。
下面的代码执行“另存为”,基于文件名以一个值结尾(例如 myFile V1.xlsm),宏将在每次保存工作簿时添加一个递增字符(a 到 z)。 (例如 myFile V1a.xlsm)。
宏在标准模块中工作正常,但在移动到“thisWorkbook”时会导致 Excel“停止响应”。我通过将它保存在标准模块中并将组合键“control-s”分配给宏来“解决”这个问题。仍然有兴趣知道它是否可以在“thisWorkbook”中使用。
此解决方法的缺点是每次增量保存都会阻塞“最近文件”列表。从最近的文件历史记录中删除以前的文件名会很好,但这似乎无法通过 VBA 完成。 (VBA - How do I remove a file from the recent documents list in excel 2007?)。有什么建议吗?
Windows 10、Excel 2016(版本 16.0.6868.2060)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim newFilename As String
Dim oldFilename As String
oldFilename = ActiveWorkbook.Name
newFilename = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)
If IsNumeric(Right(newFilename, 1)) = True Then
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path + "\" + newFilename & "a.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Else
If Right(newFilename, 1) = "z" Then
MsgBox "'z' reached, please save as new version"
Exit Sub
End If
newFilename = Left(newFilename, Len(newFilename) - 1) & Chr(Asc(Right(newFilename, 1)) + 1)
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.Path + "\" + newFilename & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End If
'potential code to remove oldFilename from 'Recent File' list
End Sub
【问题讨论】:
-
顺便说一句,我怀疑我的 excel 文件因在工作表中复制宏框而损坏(在按下控制按钮的同时拖动框)。