我正在尝试创建一个“报表打印机”,该报表可以使用选定的工作表,并且仅将值粘贴到另一个工作簿中,同时保留格式。
我正在使用的文档是一个非常大的工作簿(可称其为源),其中包含许多公式,链接和宏,其中有几个(准确地说是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)。
任何建议都会有很大的帮助,我一直在努力使自己的头发蓬勃发展!
答案 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