首页 > 解决方案 > 在工作簿中创建所选工作表的副本并将值仅粘贴到另一个并保留源格式

问题描述

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

我正在使用的文档是一个非常大的工作簿(我们称之为源代码),其中包含很多公式、链接和宏,有几个(准确地说是 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)。

任何建议都会有很大帮助,我一直在努力让它发挥作用!

标签: excelvba

解决方案


保存源文件的临时副本,然后为每个工作表运行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

推荐阅读