2012-09-19 3 views
0

J'ai un script, un script très simple, qui fait partie d'un script beaucoup plus grand, et maintenant ce dernier bit me donne des problèmes et je ne sais pas pourquoi.Copier le format en utilisant VBA

C'est la partie du script qui me pose problème.

Option Explicit 


Sub Test() 

    Dim wsJL As Worksheet 'Jobs List 
    Dim lastrow As Long  
    Set wsJL = Sheets("Jobs List") 

    lastrow = wsJL.Range("B" & Rows.Count).End(xlUp).Row 
    wsJL.Range("B3:N3").Copy 
    wsJL.Range("B4:N" & lastrow).PasteSpecial xlPasteFormats 

End Sub 

Voici le classeur.

https://dl.dropbox.com/u/3327208/Excel/format.xlsm

Pour autant que je peux dire ce que je fais ne devrait pas se produire. Ce qui se passe est qu'il écrase tout, au lieu de remplacer le format par ce qui a été copié à l'origine.

Quelqu'un peut-il s'il vous plaît tenter de reproduire thisand me dire où est mon erreur?

Merci.

+0

Ce code semble correct. Êtes-vous sûr que c'est la partie qui ne fonctionne pas? Pouvez-vous essayer d'exécuter ce code exact sur votre feuille de calcul? (Désolé, je ne peux pas télécharger votre fichier de ma machine actuelle pour tester ...) –

+3

Je l'ai juste couru et ça a l'air bien. Copié le format jusqu'à "lastrow". N'a pas copié les données de la ligne 3 sur les autres lignes. J'ai même changé un peu le formatage à tester. Travaillé. –

+0

Je vais essayer au travail demain, mon ordinateur agit parfois drôle au travail. Je ne sais pas pourquoi mais ça le fait. Eh ... merci pour les essais, je pensais que ça avait l'air bien, j'avais juste besoin d'une vérification. –

Répondre

1

Vous pouvez faire la même chose sans copier-coller. Il nécessite un peu plus de code, mais n'utilise pas le presse-papiers et ne sélectionne rien sur votre feuille.

Il fonctionne considérablement plus rapidement. Je serais curieux de savoir si cela fonctionne mieux sur votre ordinateur de travail que ce que vous avez déjà essayé.

Essayez ceci:

Sub WriteInsteadOfCopyFormatting() 

    Dim wsJL As Worksheet 'Jobs List 
    Dim rng As Range ' Columns B through N 
    Dim dateRng As Range ' Column F 
    Dim numbersRng As Range ' Columns J through L 
    Dim NCMRRng As Range ' Column M 

    Dim lastRow As Long 
    Dim firstCopyRow As Long 

    Set wsJL = Sheets("Jobs List") 

    lastRow = wsJL.Range("B" & Rows.Count).End(xlUp).Row 
    firstCopyRow = 4 
    Set rng = wsJL.Range("B" & firstCopyRow & ":N" & lastRow) 
    Set dateRng = wsJL.Range("F" & firstCopyRow & ":F" & lastRow) 
    Set numbersRng = wsJL.Range("J" & firstCopyRow & ":J" & lastRow) 
    Set NCMRRng = wsJL.Range("M" & firstCopyRow & ":M" & lastRow) 

    With rng 
     .Interior.Color = 16777215 
     .Font.Name = "Calibri" 
     .Font.Size = 11 
     .Font.Color = vbBlack 
     .BorderAround Weight:=xlThin, Color:=vbBlack 
    End With 
    With rng.Borders(xlInsideVertical) 
     .Weight = xlThin 
     .Color = vbBlack 
    End With 
    With rng.Borders(xlInsideHorizontal) 
     .Weight = xlThin 
     .Color = vbBlack 
    End With 

    dateRng.NumberFormat = "d/mm/yyyy" 
    numbersRng.NumberFormat = "#,##0" 
    NCMRRng.NumberFormat = "0######" 

End Sub 
+0

Je pourrais, mais j'essaie de rationaliser mon code. –

+0

Je l'ai essayé pour S & G et il se déplace un peu plus vite, mais pas assez pour justifier le code supplémentaire. –

+1

N'oubliez pas que la copie et le collage à l'aide du presse-papier sont identiques à la sélection et que la sélection dans le code doit (et peut) être presque toujours évitée. Lisez cet excellent fil pour plus de détails: http://stackoverflow.com/q/10714251/138938 –

Questions connexes