2009-05-08 9 views
1

J'ai un tas de classeurs Excel qui contiennent plusieurs feuilles de calcul. Je veux parcourir chaque classeur et exporter chaque feuille de calcul dans son propre nouveau classeur. Je veux une feuille de travail dans chaque nouveau classeur.Comment exporter des feuilles de calcul Excel dans de nouveaux classeurs

Voici ce que j'ai jusqu'à présent:

Sub ExportWorksheet(ByVal worksheet As Excel.Worksheet, ByVal filePath As String) 
     Dim xlApp As Excel.Application = New Excel.ApplicationClass 
     Dim xlWorkBook As Excel.Workbook = xlApp.Workbooks.Add 
     worksheet.Select() 
     worksheet.Copy() 
     xlWorkBook.Worksheets.Add() 
     worksheet.Paste(Destination:=xlWorkBook) 

     xlWorkBook.SaveAs(Filename:=filePath) 

     xlWorkBook.Close(False) 
     xlApp.Quit() 
    End Sub 
+0

Est-ce que cela fonctionne pour une feuille de calcul? – AndreiM

+0

Non, je reçois une erreur sur les bits de pâte: System.Runtime.InteropServices.COMException était unhandled ErrorCode = -2146827284 message = "Exception de HRESULT: 0x800A03EC" Source = "Microsoft.Office.Interop.Excel" – GernBlandston

Répondre

1

Doh!

worksheet.SaveAs(Filename:=filePath)

+0

Oui, cela fonctionne aussi si votre but est, en fin de compte, d'enregistrer le classeur. Lunatik l'a bien compris, vous devriez lui donner la coche pour une réponse correcte. –

+0

Hmm .. ok, bien il y a au moins un avantage à utiliser .SaveAs (chaîne) par rapport à .Copy(): vous connaîtrez au moins le nom de votre classeur une fois l'opération terminée. Donc, cette approche est effectivement meilleure tant que l'on veut (ou a besoin) de sauvegarder le classeur. –

4

Dans Excel ce serait en copiant la feuille de calcul à un nouveau classeur, non pas en créant un nouveau classeur puis en ajoutant la feuille de calcul à elle. Cela est réalisé en utilisant Worksheet.Copy sans spécifier où dans le classeur vous souhaitez placer la feuille de calcul copiée.

More reading: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.copy(VS.80).aspx

+0

Comment accéder au classeur nouvellement créé avec la nouvelle feuille de calcul? – GernBlandston

+0

Belle réponse Lunatik +1. Gern, vous soulevez un bon point. Vous devriez accéder au classeur par son nom ... qui serait automatiquement généré. L'approche Worksheet.SaveAs (chaîne) a un problème similaire en ce que vous ne pouvez pas obtenir la référence de classeur directement - mais dans ce cas, vous connaissez au moins le nom du classeur. Donc, tant que vous êtes prêt à enregistrer le classeur (ou voulez le faire) alors l'approche SaveAs est un peu mieux. –

+1

Juste un commentaire sur ce qui précède, une fois que vous créez le nouveau classeur, vous pouvez le référencer en tant que 'ActiveWorkbook' afin que vous puissiez définir le nom, ou inviter l'utilisateur à l'avance, en utilisant' GetSaveAsFilename'. – Lunatik

Questions connexes