保存为公式的#REF后保存Excel

我需要一个macros,它可以创build一个包含所有工作表(“数据列表”除外)和所有macros/用户表单的重复工作簿。 这是我迄今为止:

fname = Application.GetSaveAsFilename(FileFilter:="Excel Files (*.xlsm), *.xlsm") ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=52 Application.DisplayAlerts = False Worksheets("Data List").Delete 

问题是,我的公式停止工作,因为他们回到“数据列表”。 我该如何解决这个问题?

背景/编辑:

对不起,我的问题措辞不好。 我忘了包括我得到#REF错误的事实,因为有些公式引用了原来的工作簿,它有“数据列表”表。 以前,我把除了“数据列表”以外的所有表格复制到一个新的工作簿中,并且一切都像魅力一样,直到我将文件发送给另一个人,然后所有的macros都失败了。 所以我正在寻找解决这个问题的过程,因此保存了整个工作簿,然后删除了一个工作表。 但是,现在我的公式不起作用。

这是一个基本框架。 如果你喜欢,你应该可以添加花里胡哨的。

 Sub flatten_WB() Dim fn As String, w As Long fn = Application.GetSaveAsFilename(FileFilter:="Excel Files (*.xlsm), *.xlsm") On Error Resume Next 'don't know if one worksheet may have zero formulas Application.DisplayAlerts = False 'might need this for the SaveAs as well as delete worksheet With ActiveWorkbook '.Save 'I would save the original before saving as a new workbook .SaveAs Filename:=fn, FileFormat:=52 For w = 1 To .Worksheets.Count With .Worksheets(w) If .Name <> "Data List" Then 'don't bother doing the one we are nuking .Cells.SpecialCells(xlCellTypeFormulas) = _ .Cells.SpecialCells(xlCellTypeFormulas).Value End If End With Next w .Worksheets("Data List").Delete End With Application.DisplayAlerts = True On Error GoTo 0 End Sub 
  1. 获取一个新的文件名。
  2. 另存为新文件名(作为启用macros的工作簿)。 可能要考虑在SaveAs之前保存原件。
  3. 遍历所有工作表(除了要删除的工作表)并将所有公式转换为其返回的值。
  4. 删除“数据列表”工作表。
  5. 还原应用程序环境。