将工作表另存为外部文件中的值

时间:2019-06-25 07:21:39

标签: excel vba

我有一本6页的工作簿。 我想将工作表1和2的(不是公式)保存在2个外部文件中。

尝试过:

Worksheets("Sheet1").Copy
With ActiveWorkbook
.SaveAs Filename:="D:\sheet1.xls", FileFormat:=56, CreateBackup:=False
End With

Worksheets("Sheet2").Copy
With ActiveWorkbook
.SaveAs Filename:="D:\sheet2.xls", FileFormat:=56, CreateBackup:=False
End With

有效。但是:

  1. 它正在保存公式,而不是其值。

  2. 如果文件存在,则提示信息询问是否要覆盖

2 个答案:

答案 0 :(得分:3)

您需要自行将公式转换为值。请执行以下操作:

ThisWorkbook.Worksheets("Sheet1").Copy 'create a copy in a new workbook

Dim wb As Workbook
Set wb = ActiveWorkbook 'get the new workbook

'change formulas into values
wb.Worksheets(1).UsedRange.Value = wb.Worksheets(1).UsedRange.Value

'save
wb.SaveAs Filename:="D:\sheet1.xls", FileFormat:=56, CreateBackup:=False

'close it
wb.Close SaveChanges:=False

如果要摆脱覆盖问题,请在保存之前检查文件D:\sheet1.xls是否存在并杀死它。我没有详细解释,因为已经有一百万本教程。


改进

使用过程重新使用您的代码:

Public Sub ExportWorksheet(ByVal SheetName As String, ByVal ExportToFile As String)
    ThisWorkbook.Worksheets(SheetName).Copy 

    Dim wb As Workbook
    Set wb = ActiveWorkbook

    wb.Worksheets(1).UsedRange.Value = wb.Worksheets(1).UsedRange.Value

    If Dir(ExportToFile) <> vbNullString Then Kill ExportToFile
    wb.SaveAs Filename:=ExportToFile, FileFormat:=56, CreateBackup:=False

    wb.Close SaveChanges:=False
End Sub

Sub TestIt()
    ExportWorksheet SheetName:="Sheet1" ExportToFile:="D:\sheet1.xls"
    ExportWorksheet SheetName:="Sheet2" ExportToFile:="D:\sheet2.xls"
End Sub

请注意,每当需要复制代码时,请将其拆分为单独的过程以避免重复。

答案 1 :(得分:1)

一个小例子可能会有所帮助:Option Explicit

Sub test()

    Dim wsSou As Worksheet, wsDes As Worksheet

    With ThisWorkbook

        Set wsSou = .Worksheets("Sheet1")
        Set wsDes = .Worksheets("Sheet2")

        'Copy Paste - ONLY Values
        wsSou.UsedRange.Copy
        wsDes.Range("A1").PasteSpecial xlPasteValues

        'Copy Paste - Values and Formattings
        wsSou.UsedRange.Copy wsDes.Range("A1")

    End With

End Sub