Excel VBA如何生成仅存值版本且无需关闭原文件保留原有公式?
解决方案
核心思路是全程不修改原工作簿,直接生成原文件的副本后在副本内完成转值、保存操作,从根源上避免了需要恢复原文件公式的问题,比修改原文件后再撤销的方案安全性高得多,不会出现公式意外丢失的问题。
你可以直接替换原有代码为下方版本:
Sub Create_version_with_values_only() Dim originalWb As Workbook Dim newWb As Workbook Dim ws As Worksheet ' 关闭屏幕更新和警告弹窗,提升运行效率 Application.ScreenUpdating = False Application.DisplayAlerts = False Set originalWb = ThisWorkbook ' 一次性复制所有工作表到新工作簿,保留原文件全部格式、表结构 originalWb.Sheets.Copy Set newWb = ActiveWorkbook ' 仅在新工作簿内将公式转为值,完全不影响原文件内容 For Each ws In newWb.Worksheets ws.UsedRange.Value = ws.UsedRange.Value Next ws ' 保存新的仅值版本,可根据需求修改路径和格式 newWb.SaveAs Filename:="G:\Folder\test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled newWb.Close SaveChanges:=False ' 恢复Excel默认设置 Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
方案说明
- 运行代码后原工作簿不会有任何改动,所有公式完整保留,你可以直接继续操作原文件
- 转值使用直接赋值的方式,不调用剪贴板,比复制粘贴的方式运行速度更快,也不会覆盖你剪贴板里的原有内容
- 如果不需要保留宏,可将保存路径后缀改为
.xlsx,同时把FileFormat参数改为xlOpenXMLWorkbook - 如果需要灵活选择保存位置,可以调用
Application.GetSaveAsFilename方法替代硬编码的固定路径,实现让用户手动选择保存位置和文件名。
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

