2013-02-18 3 views
3

Je travaille sur l'écriture d'un code VBA pour exporter certaines feuilles en Excel vers le même fichier PDF. J'ai plusieurs feuilles de graphique dans mon fichier Excel dont chacune se termine par "(nom) _Chart". Je souhaite exporter toutes les feuilles dont le nom se termine par un graphique en un seul fichier PDF. Voici le code que j'essaie d'écrire.Exportation de certaines feuilles d'un classeur Excel au format PDF

Sub FindWS() 
     'look if it at least contains part of the name 
     Dim s As Worksheet 
     Dim strPath As String 

     strPath = ActiveWorkbook.Path & "\" 

     For Each s In ThisWorkbook.Sheets 
      If InStr(1, s.Name, Chart) Then 
       s.Activate 
       ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & s.Name & ".pdf" 
       Exit Sub 
      End If 
     Next s 
End Sub 

Ce code ne se limite pas à l'exportation vers les feuilles de graphique mais l'exportation de tout votre classeur. Quelqu'un peut-il m'aider avec figurint sur ce qui manque dans mon code.

Merci!

CODE MODIFIÉ:

Sub FindWS() 
'look if it at least contains part of the name 
Dim s As Worksheet 
Dim strPath As String 

strPath = ActiveWorkbook.Path & "\" 

For Each s In ThisWorkbook.Worksheets 
     If InStr(1, s.Name, "Chart") = 0 Then 
      ' Hide the sheet so it is not exported as PDF 
      s.Visible = False 
      End If 
Next s 
      With ActiveWorkbook 
      .ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf" 
       End With 

End Sub

+0

Qu'est-ce qui se passe si vous devez d'abord cacher vos feuilles indésirables dans la boucle au-dessus, puis juste exporter une fois au format PDF? –

+0

@ElectricLlama Merci pour votre réponse. J'ai plus de 300 feuilles Excel et cacher toutes les feuilles indésirables dans ceux-ci serait trop long. Alors, est-ce que je peux modifier le code? – datacentric

+0

Vous masquez les feuilles dans votre code, exportez-les, puis affichez-les. Je vais poster un code pour vous d'essayer –

Répondre

2

Je suis surpris que votre code est en cours d'exécution en premier lieu:) Vous devriez avoir effectivement eu une erreur run time error '13', type mismatch

Sheets et Worksheets sont deux choses différentes dans Excel

La collection Worksheets est une collection d'al l les objets Worksheet dans le classeur spécifié ou actif. Chaque objet Worksheet représente une feuille de calcul. En revanche, la collection Sheets consiste non seulement en une collection de feuilles de calcul, mais également en d'autres types de feuilles pour inclure des feuilles de graphique, des feuilles de macro Excel 4.0 et des feuilles de dialogue Excel 5.0.

Donc, si vous déclarez votre objet comme Worksheet

Dim s As Worksheet 

Ensuite, faire en sorte que lorsque la boucle boucle vous à travers la collection correcte

For Each s In ThisWorkbook.Worksheets 

et non

For Each s In ThisWorkbook.Sheets 

autre que vous obtiendrez un

FOLLOWUP (Basé sur les commentaires)

@ Siddharth: 1. Oui, je veux exporter des feuilles de graphique qui se termine avec le nom "graphique". 2. Je veux tous ces graphiques dans un PDF et le nom du PDF devrait être le nom de fichier "original". (Je devrai enregistrer les fichiers PDF finaux dans un emplacement différent afin qu'il n'y ait pas de chevauchement de fichiers.) - datacentric

Option Explicit 

Sub Sample() 
    Dim ws As Object 
    Dim strPath As String, OriginalName As String, Filename As String 

    On Error GoTo Whoa 

    '~~> Get activeworkbook path 
    strPath = ActiveWorkbook.Path & "\" 
    '~~> Get just the name without extension and path 
    OriginalName = Left(ActiveWorkbook.Name, (InStrRev(ActiveWorkbook.Name, ".", -1, vbTextCompare) - 1)) 
    '~~> PDF File name 
    Filename = strPath & OriginalName & ".pdf" 

    '~~> Loop through Sheets Collesction 
    For Each ws In ActiveWorkbook.Sheets 
     '~~> Check if it is a Chart Sheet and also it ends in "Chart" 
     If ws.Type = 3 And UCase(Right(Trim(ws.Name), 5)) = "CHART" Then 
      ws.Visible = True 
     Else 
      ws.Visible = False 
     End If 
    Next ws 

    '~~> Export to pdf 
    ActiveWorkbook.ExportAsFixedFormat xlTypePDF, Filename 

LetsContinue: 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 
+0

Merci pour votre réponse. J'ai compris qu'il y avait un problème avec l'utilisation de feuilles au lieu de feuille de calcul. Donc, j'ai modifié mon code mais maintenant il n'exporte que la première feuille en Excel et pas toutes les feuilles. Le code modifié est dans ma question ci-dessus. – datacentric

+0

Si vous voulez vérifier si la feuille se termine par "Chart" alors "instr()" n'est pas le bon chemin. Vous devez utiliser 'Right()' –

+0

Aussi, j'ai les deux feuilles de calcul et les feuilles de graphique dans Excel. Je veux seulement exporter des feuilles de graphique. – datacentric

0

Ce code regardera à travers toutes les feuilles. Si le nom de la feuille ne correspond pas, il sera masqué. Quand c'est fini, il exporte toutes les feuilles visibles en un seul PDF. Assurez-vous que vous ne sauvegardez pas le fichier Excel par la suite ou les feuilles resteront cachées.

Bien sûr, ce code n'est pas testé donc si vous avez des problèmes redemanderai (ou essayer de résoudre themself que vous pouvez apprendre quelque chose)

Sub FindWS() 
    'look if it at least contains part of the name 
    Dim s As Worksheet 
    Dim strPath As String 

    strPath = ActiveWorkbook.Path & "\" 

    For Each s In ThisWorkbook.Sheets 
     If InStr(1, s.Name, "Chart") = 0 Then 
       ' Hide the sheet so it is not exported as PDF 
       s.Visible = False 
     End If 
    Next s 

    ' Export all sheets as PDF   
    ActiveSheet.ExportAsFixedFormat xlTypePDF, strPath & "TEST.pdf" 
End Sub 
+0

Le code donne une erreur d'exécution "13", incompatibilité de type. – datacentric

+0

OH! Je n'avais pas réalisé que votre code ne fonctionnait pas avant - laissez-moi le réparer. –

Questions connexes