gpt4 book ai didi

vba - excel保存临时文件问题的解决方法

转载 作者:行者123 更新时间:2023-12-04 21:00:42 25 4
gpt4 key购买 nike

保存特定工作簿时,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 2010 中测试了这个 Sub,它对我有用。我在删除文件后立即中断循环,因为我认为索引可能与循环不一致。更精细的变体可能会遍历最近的文件列表并创建要删除的索引集合,然后向后迭代该集合并依次删除每个条目。

Public Sub RemoveRecentFile(strFileName As String)

Dim collRecentFiles As Excel.RecentFiles
Dim objRecentFile As Excel.RecentFile
Dim intRecentFileCount As Integer
Dim intCounter As Integer

Set collRecentFiles = Application.RecentFiles
intRecentFileCount = collRecentFiles.Count

For intCounter = 1 To intRecentFileCount
Set objRecentFile = collRecentFiles(intCounter)
If objRecentFile.Name = strFileName Then
objRecentFile.Delete
Exit For
End If
Next intCounter

End Sub

关于vba - excel保存临时文件问题的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37069818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com