代码之家  ›  专栏  ›  技术社区  ›  Ahmad

如何仅使用工作表复制值(Array()).copy

  •  1
  • Ahmad  · 技术社区  · 14 年前

    我有以下代码将工作表复制到新工作簿。这将复制包含所有公式等的工作表。在此之后,我将循环遍历生成的工作簿中的每个工作表以复制和粘贴值。是否有方法可以在第一次创建值为的工作表?

    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 回复  |  直到 14 年前
        1
  •  2
  •   MikeD    14 年前

    如果应用于工作表或范围,则复制方法会有所不同。只有对区域,以后才能使用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 After 上的参数 WorkSheets.Add )如果原始工作表名之一与系统上新创建的工作簿(通常为Sheet1..)中的默认名称匹配,则可能出现重复的工作表名。。表3)

    希望能帮上忙

    祝你好运

        2
  •  0
  •   Diem    14 年前

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

    从“编辑”->“链接”->“断开链接”或通过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