在工作簿中创建所选工作表的副本,然后仅将值粘贴到另一个工作簿中,并保留源的格式

时间:2018-10-12 23:15:16

标签: excel vba excel-vba

我正在尝试创建一个“报表打印机”,该报表可以使用选定的工作表,并且仅将值粘贴到另一个工作簿中,同时保留格式。

我正在使用的文档是一个非常大的工作簿(可称其为源),其中包含许多公式,链接和宏,其中有几个(准确地说是6个)“报告”页面,其中包含信息从工作表中显示出来,并很好地显示它们。我正在尝试找到一种方法,将这些报告页面放入另一个工作簿,并将它们仅转换为价值,并保留所有可爱的格式。

我尝试了这个宏

`Sub copyPrintValues()

Dim ReportPrintOutput As Workbook
Dim Current As String
Dim FileName As String

Set ReportPrintOutput = ThisWorkbook
Current = ThisWorkbook.FullName

Application.DisplayAlerts = False

Dim SH As Worksheet
For Each SH In ReportPrintOutput.Worksheets

    SH.UsedRange.Copy
    SH.UsedRange.PasteSpecial xlPasteColumnWidths
    SH.UsedRange.PasteSpecial xlPasteFormats
    SH.UsedRange.PasteSpecial xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=True, Transpose:=False

Next

Worksheets("WorkSheet1").Delete

FileName = ThisWorkbook.Path & "\" & Pre & ThisWorkbook.Name & "_ReportPrint.xlsx"
ReportPrintOutput.SaveAs FileName, XlFileFormat.xlOpenXMLWorkbook
Workbooks.Open Current
PrintOutput.Close
Application.DisplayAlerts = True
End Sub`

我当时想的理论是将所有内容复制到输出中,然后仅删除输出中不需要的工作表(通过vba)。

任何建议都会有很大的帮助,我一直在努力使自己的头发蓬勃发展!

1 个答案:

答案 0 :(得分:0)

保存源文件的临时副本,然后为每个工作表运行UsedRange.Value = UsedRange.Value删除公式(或仅在“报告”工作表上执行此操作)。现在,您可以删除不想保留的工作表。

Sub NoFormulas()

    Dim wbTemp As Workbook, tempPath As String, sht As Worksheet, wbReport As Workbook
    Dim ReportPrintOutput As Workbook
    Dim Current As String
    Dim FileName As String

    tempPath = ThisWorkbook.Path & "\" & "temp_" & ThisWorkbook.Name

    ThisWorkbook.SaveCopyAs tempPath
    Set wbTemp = Workbooks.Open(tempPath)
    For Each sht In wbTemp.Worksheets
        sht.UsedRange.Value = sht.UsedRange.Value
    Next sht

    wbTemp.Sheets(Array("Sheet1", "Sheet3")).Copy '<< copy the needed sheets to a new workbook
    Set wbReport = ActiveWorkbook
    wbReport.SaveAs ThisWorkbook.Path & "\Report.xlsx"

    wbTemp.Close False 'close and delete the temporary copy
    Kill tempPath

End Sub