2009-04-22 4 views
2

J'ai une feuille de calcul Excel 2007 et je voudrais écrire une procédure VBA pour imprimer des feuilles de calcul particulières par leur nom. Comment puis-je faire cela?Excel imprimer des feuilles de calcul par nom

Par exemple, j'aimerais imprimer "FirstSheet","ThirdSheet", et "FourthSheet" mais pas "SecondSheet".

Répondre

0

Quelque chose de semblable à ce qui suit devrait fonctionner:

Dim sh As Worksheet 
For Each sh In ActiveWorkbook.Worksheets 
     If (sh.Name = "Sheet1") Then 
      sh.PrintOut 
     End If 
Next sh 
+0

peut-il être fait dans un lot? par exemple. Puis-je imprimer plusieurs feuilles dans un seul travail d'impression? – Caveatrob

1
Public Sub PrintByName(Names As Variant) 

    Dim s As Worksheet 
    Dim i As Integer 

    If IsArray(Names) Then 
    For Each s In ActiveWorkbook.Worksheets 
     For i = 0 To UBound(Names) 
     If StrComp(s.Name, Names(i), vbTextCompare) = 0 Then 
      s.PrintOut 
     End If 
     Next i 
    Next s 
    End If 

End Sub 

Appel comme:

PrintByName Array("FirstSheet", "ThirdSheet", "FourthSheet") 

Le lo imbriqué op n'est pas optimal, en ce qui concerne les performances d'exécution. Avec le nombre limité de feuilles qu'un classeur Excel peut contenir, je pense que c'est négligeable. Toutefois, l'utilisation d'un Collection pour contenir les noms de feuille souhaités au lieu d'un Array serait mieux.

+1

Pensez-vous que accuser * et * insulter les gens en même temps est utile de quelque façon que ce soit? – Tomalak

+0

Désolé si j'ai offensé votre ego fragile. – jgallant

+0

Je ne pense pas que c'est mon ego qui est fragile ici. – Tomalak

5

Si vous connaissez le nom de la feuille simplement appeler la fonction PrintOut comme ceci:

Sheets("Name").PrintOut 

Pour de petites quantités de feuilles, il est tout à fait plus facile de cette façon!

1

Ne pas besoin de boucle pour ce faire, une ligne de code suffit:

Sheets(Array("FirstSheet", "ThirdSheet", "FourthSheet")).PrintOut Copies:=1 
Questions connexes