如何仅使用表格(数组())复制值。复制

时间:2010-11-16 13:06:57

标签: excel vba excel-2007

我有以下代码将工作表复制到新工作簿。这当前复制了包含所有公式等的工作表。之后,我遍历生成的工作簿中的每个工作表以复制和粘贴值。有没有办法只在第一次创建带有值的工作表?

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 个答案:

答案 0 :(得分:2)

如果应用于工作表或范围,则复制方法有所不同。只有使用范围,您可以稍后使用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

此代码应说明原理,它不关心工作表的正确定位(在Before上使用AfterWorkSheets.Add参数),而不关心可能出现的重复工作表名称如果其中一个原始工作表名称与系统上新创建的工作簿中的默认名称匹配(通常为Sheet1 .. Sheet3)

希望有所帮助

祝你好运

答案 1 :(得分:0)

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

手动编辑 - >链接 - >断开链接,或通过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