2010-11-16 48 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