将工作表(而非公式)从工作表保存到新工作簿?

时间:2013-07-29 11:03:35

标签: excel vba excel-vba

我使用以下函数从工作簿中保存工作表并将其保存到单独的工作簿。但是,它正在保存公式,而我宁愿只是最终值在最终工作簿中。如何修改它,以便生成的工作簿不包含公式和值?

Sub Sheet_SaveAs(FilePath As String, SheetToSave As Worksheet)
    Dim wb As Workbook

    Set wb = Workbooks.Add(xlWBATWorksheet)
    With wb
        SheetToSave.Copy After:=.Worksheets(.Worksheets.Count)
        Application.DisplayAlerts = False
        .Worksheets(1).Delete
        Application.DisplayAlerts = True
        .SaveAs FilePath
        .Close False
    End With

End Sub

使用友情提供的链接我尝试了这个,但无济于事:

Sub Sheet_SaveAs(FilePath As String, SheetToSave As Worksheet)
    Dim wb As Workbook

    Set wb = Workbooks.Add(xlWBATWorksheet)
    With wb
        SheetToSave.Copy After:=.Worksheets(.Worksheets.Count)
        Application.DisplayAlerts = False
        .Worksheets(1).Delete
        .Worksheets(1).Copy
        .Worksheets(1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.DisplayAlerts = True
        .SaveAs FilePath
        .Close False
    End With

End Sub

但我在pastespecial行上出错?

3 个答案:

答案 0 :(得分:2)

.Worksheets(1).Copy

这会复制工作表本身,与PasteSpecial无关。你可以使用:

.Worksheets(1).UsedRange.Copy

或类似的。例如,Worksheets(1).Cells.Copy

我认为它应该是Worksheets(.Worksheets.Count)

在下文中,我使用SpecialCells仅识别工作表中的公式,并设置rng.Value = rng.Value以将这些公式转换为公式的结果。

Sub Sheet_SaveAs(FilePath As String, SheetToSave As Worksheet)
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rngFormulas As Range, rng As Range

    Set wb = Workbooks.Add(xlWBATWorksheet)
    With wb
        SheetToSave.Copy After:=.Worksheets(.Worksheets.Count)
        Set ws = .Worksheets(.Worksheets.Count)
        Application.DisplayAlerts = False
        .Worksheets(1).Delete
        Application.DisplayAlerts = True

        With ws
            Set rngFormulas = ws.Cells.SpecialCells(xlCellTypeFormulas)
            For Each rng In rngFormulas
                rng.Value = rng.Value
            Next rng
        End With

        .SaveAs FilePath
        .Close False
    End With
End Sub

您需要添加一些错误处理代码,以处理复制的工作表中没有公式的情况。 (也可能需要考虑数组公式。)

答案 1 :(得分:2)

复制值的最简单方法是分两步完成:
复制工作表,然后用其值替换公式

后:

.Worksheets(1).Delete

在原始代码中添加以下行:

With Range(Worksheets(.Worksheets.Count).UsedRange.Address)
    .Value = .Value
End With

.value=.value告诉excel用当前显示的值替换每个值,因此所有公式都将替换为其计算值

答案 2 :(得分:1)

抱歉,答案开始变得一团糟,所以删除它并重新开始。我写过这个 - 当我测试它时似乎工作正常 - 你只需要一个额外的行来保存任何结果的电子表格。 :)

For Each Cell In ActiveSheet.UsedRange.Cells
    Cell.Copy
    Cell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next