Copier

2010-11-16 25 views
1

Je copie le code suivant qui copie les feuilles de calcul dans un nouveau classeur. Cela copie actuellement les feuilles avec toutes les formules etc. Après cela, je boucle chaque feuille de calcul dans le classeur résultant pour copier et coller des valeurs. Est-il possible de créer les feuilles de calcul avec les valeurs seulement la première fois?Copier

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  

Répondre

2

Il existe une différence avec la méthode Copier si elle est appliquée aux feuilles de calcul ou aux plages. Seulement avec des plages, vous pouvez utiliser les touches [Format] PasteSpecial plus tard, de sorte que vous devez copier des plages depuis le début, comme dans

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 

Ce code devrait illustrer le principe, il ne se soucie pas de positionnement correct des feuilles (utiliser Before ou After paramètres sur WorkSheets.Add) et non pour les noms de feuille en double qui peut se produire si l'un des noms de feuille originaux correspondent aux noms par défaut dans un classeur nouvellement créé sur votre système (généralement Sheet1 .. Feuil3)

Hope qui aide

bonne chance

+0

Merci - c'est ce que j'avais déjà presque mot pour mot avant que je trouve les feuilles (tableau) .copy .. – Ahmad

+0

Je viens de réaliser pourquoi je me suis éloigné de la méthode fournie. Toutes les feuilles de ma source WB n'ont pas besoin d'être copiées, donc pourquoi j'ai utilisé 'Sheets (Array (" ..)). Copier – Ahmad

+0

un peu en retard, mais j'ai fini par utiliser une version modifiée de votre solution avec mon existant approche. Merci. – Ahmad

0

Une alternative est d'utiliser la fonctionnalité "Break Links". Cela conservera tous les calculs qui se réfèrent uniquement à d'autres parties du (nouveau) classeur, mais remplacera toutes les cellules externes par leurs valeurs.

manuellement à partir Modifier -> Liens -> Liens Pause ou via 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