2009-07-03 6 views
0

J'essaie de copier un en-tête et un ensemble de données dans une nouvelle feuille de calcul pour l'imprimer.Copier l'en-tête et la plage d'une feuille à l'autre

Bien que je puisse copier correctement les données, les largeurs de colonnes sont perdues et l'exécution automatique de la fonction casse à nouveau la page. Les largeurs de colonnes ont été définies à la main manuellement lorsque la page a été conçue à l'origine.

Actuellement, j'ai:

Dim tmp As Worksheet 
Set tmp = Sheets.Add(after:=ActiveSheet) 
RD.Copy tmp.Range("A1") ' Range data (set elsewhere) 
RH.Copy tmp.Range("A1") ' Range header (set elsewhere) 

J'ai essayé d'utiliser xlPasteSpecial et xlPasteAll mais ils ne donnent aucune différence tout en utilisant le presse-papiers.

Que dois-je faire pour copier les largeurs de cellules entre les feuilles?

Répondre

3

Graham,

Après avoir copié les plages à travers, juste obtenir le numéro de colonne du plage de destination, puis parcourez les colonnes de la plage source en copiant la propriété .ColumnWidth sur ...

Dim RD As Range 
Dim RH As Range 

Set RH = Cells.Range("A1:C1") 
Set RD = Cells.Range("A2:C2") 

Dim tmp As Worksheet 
Set tmp = Sheets.Add(after:=ActiveSheet) 
RD.Copy tmp.Range("A1") ' Range data (set elsewhere)' 
RH.Copy tmp.Range("A2") ' Range header (set elsewhere)' 

' Get the column number of the first cell in the destination range' 
' because it looks like we are just setting the first cell of the destination range' 
' and letting Excel roll the range over' 
Dim tmpCol As Integer 
tmpCol = tmp.Range("A1").Cells(1, 1).Column ' make sure you use the same range value' 

Now loop through the source columns setting the dest column to the same width. 
For Each objCol In RH.Columns 

    tmp.Columns(tmpCol).ColumnWidth = objCol.ColumnWidth 
    tmpCol = tmpCol + 1 

Next 
+0

Bien que n'étant pas le premier, c'est la réponse plus détaillée. –

3

Vous pouvez boucle à travers les colonnes de la source, et définissez les ColumnWidths correspondants de la fourchette cible:

Dim i As Integer 
For i = 1 To sourceRange.Columns.Count 
    targetRange.Columns(i).ColumnWidth = sourceRange.Columns(i).ColumnWidth 
Next 
+0

Cela fonctionnerait. J'étais obsédé par la mentalité de copie. –

Questions connexes