创build工作簿并仅复制具有值的工作表

Sub values_dump() Dim sourceWB As Workbook Dim destWB As Workbook Dim ws As Worksheet Dim path As String Dim fname As String Application.ScreenUpdating = False path = ThisWorkbook.path & "\_bck\" fname = "values_" & Format(Now, "dd_mmm_yy_hh_mm_ss") & ".xlsm" Set sourceWB = ThisWorkbook Set destWB = Workbooks.Add destWB.SaveAs path & fname For Each ws In sourceWB.Worksheets Workbooks(sourceWB).Sheets(ws).Copy after:=Workbooks(destWB).Sheets(1) Next ws Application.CutCopyMode = False Application.ScreenUpdating = True End Sub 

我在这行上得到一个错误destWB.SaveAs path & fname – 它说我不能使用“.xlsm”扩展名?

此外,我想复制工作表到新的工作簿,但只保留值和原始格式。

我的代码,错误地复制所有的公式。 我不想以任何方式破坏原来的工作簿。

您正在使用Macro-Enabled工作簿文件扩展名(例如xlsm),但使用Workbook.SaveAs方法,并使用默认的FileFormat参数(可在Excel选项►保存►以这种格式保存文件中find:事实上,最好是完全忽略.xlsm并指定所需的文件格式。如果select正确的格式,Excel将添加.xlsm。有关可用的SaveAs文件types的完整列表,请参阅xlFileFormat枚举 。

如果要将公式恢复为其值,只需复制工作表,然后使用.Cells = .Cells.Value

 Sub values_dump() Dim sourceWB As Workbook Dim destWB As Workbook Dim ws As Worksheet Dim path As String Dim fname As String Dim c As long Application.ScreenUpdating = False path = ThisWorkbook.path & "\_bck\" fname = "values_" & Format(Now, "dd_mmm_yy_hh_mm_ss") & ".xlsm" Set sourceWB = ThisWorkbook Set destWB = Workbooks.Add destWB.SaveAs Filename:=path & fname, FileFormat:=xlOpenXMLWorkbookMacroEnabled 'Open XML Workbook Macro Enabled (52) For Each ws In sourceWB.Worksheets if ws.autofiltermode then ws.autofiltermode = false ws.Copy after:=destWB.Sheets(1) With destWB.Sheets(2).usedrange for c = 1 to .columns.count .columns(c).Cells = .columns(c).Cells.Value next c End With destWB.save Next ws Application.ScreenUpdating = True End Sub 

当您工作簿types的var 设置为工作簿对象时 ,可以直接使用该var。 您似乎正在使用它,就像它是Workbook.Name属性 。 工作表对象和工作表.Name属性也是如此 。