如何仅使用Sheets(Array())复制值。复制

我有以下代码将工作表复制到一个新的工作簿。 这目前复制与所有公式等工作表之后,我循环通过生成的工作簿中的每个工作表来复制和粘贴值。 有没有办法用第一次创build值的工作表?

Sheets(Array("EQ Spot Moves Valuation", _ "ZARi Swap Prll", _ "ZARi Bond Prll", _ "ZAR Swap PDH", _ "ZAR Bond PDH", _ "Grid Report EQ", _ "Valuations", _ "ZAR Bond Prll PDH", _ "Grid Report FX")).Copy ' ...snip For Each ws In exposureOutputWB.Sheets ' copy and past values on each sheet Next ws 

如果应用于工作表或范围,则Copy方法有所不同。 只有在范围之后,您才可以稍后使用PasteSpecial [格式],所以您必须从头开始复制范围

 Sub CopyAllAsValues() Dim WO As Workbook, SO As Worksheet ' old Dim WN As Workbook, SN As Worksheet ' new Set WO = ActiveWorkbook ' this is where we come from Set WN = Workbooks.Add ' the new sheet with only values For Each SO In WO.Worksheets Set SN = WN.Worksheets.Add ' create new sheet SN.Name = SO.Name ' copy name SO.Cells.Copy ' copy all cells to clipboard SN.[A1].PasteSpecial xlPasteValues ' paste values at A1 SN.[A1].PasteSpecial xlPasteFormats ' paste formats as well at A1 Next SO End Sub 

这段代码应该说明原理,它不关心工作表的正确定位(在WorkSheets.Add使用BeforeAfter参数),而不用于在原始工作表名称之一与缺省名称匹配的情况下可能发生的重复工作表名称您的系统上新创build的工作簿(通常是Sheet1 .. Sheet3)

希望有所帮助

祝你好运

另一种方法是使用“断开链接”function。 这将保留任何仅涉及(新)工作簿的其他部分的计算,但将用其值来replace所有外部单元格。

手动从编辑 – >链接 – >断开链接,或通过VBA( 源 ):

 Sub UseBreakLink() Dim astrLinks As Variant ' Define variable as an Excel link type. astrLinks = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks) ' Break the first link in the active workbook. For i = 1 To UBound(astrLinks) ActiveWorkbook.BreakLink Name:=astrLinks(i), Type:=xlLinkTypeExcelLinks Next i End Sub