2010-11-16 68 views
1

我有以下代码将工作表复制到新的工作簿。这目前使用所有公式等复制工作表。在此之后,我循环通过生成的工作簿中的每个工作表来复制和粘贴值。有没有办法用第一次创建值的工作表?如何仅使用图纸复制值(Array())复制

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  

回答

2

如果应用于工作表或范围,则与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.AddBeforeAfter参数),而不是重复的工作表名称如果原始表名称的一个匹配您的系统(通常是工作表Sheet1在新创建的工作簿的默认名称可能出现的..表Sheet 3)

希望帮助您好,

+0

感谢 - 这就是我以前有几乎一字不差之前,我发现床单(阵列).copy .. – Ahmad 2010-11-16 18:18:18

+0

只是意识到为什么我放弃了你提供的方法。我的源代码中的所有工作表都不需要复制,因此为什么我使用'Sheets(Array(“..”))。复制' – Ahmad 2010-12-03 06:27:56

+0

有点过期,但我最终使用了我的现有解决方案的修改版本做法。谢谢。 – Ahmad 2011-02-18 05:44:33

0

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

手动从编辑 - >链接 - >断开链接,或者通过VBA(source):

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