Как копировать значения только используя Sheets (Array ()). Copy - PullRequest
1 голос
/ 16 ноября 2010

У меня есть следующий код, который копирует листы в новую книгу.В настоящее время это копирует листы со всеми формулами и т. Д. После этого я зацикливаю каждый лист в результирующей книге для копирования и вставки значений.Есть ли способ создать таблицы со значениями только в первый раз?

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 ]

2 голосов
/ 16 ноября 2010

есть разница с методом копирования, если он применяется к рабочим листам или диапазонам.Только с диапазонами вы можете использовать PasteSpecial [Format] позже, поэтому вы должны копировать диапазоны с самого начала, как в

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)

Надеюсь, это поможет

удачи

0 голосов
/ 19 ноября 2010

Альтернативой является использование функции «Разрыв ссылок». Это сохранит все вычисления, которые относятся только к другим частям (новой) рабочей книги, но заменит все внешние ячейки их значениями.

Вручную из Правка -> Ссылки -> Разорвать ссылки или через VBA ( источник ):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...