我有以下代码将工作表复制到新工作簿。这当前复制了包含所有公式等的工作表。之后,我遍历生成的工作簿中的每个工作表以复制和粘贴值。有没有办法只在第一次创建带有值的工作表?
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
答案 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
上使用After
或WorkSheets.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