2013-04-26 17 views
5

Sto cercando di esportare un numero di fogli di lavoro nel mio libro di esercizi in .csv tramite un codice simile a questo:Come esportare più fogli di lavoro in formato CSV (senza salvare il foglio di lavoro corrente)

Sub Export_To_CSV(exportPath As String)  

    Dim filePath As String 

    For Each WS In ThisWorkbook.Worksheets 

      filePath = exportPath & "(" & WS.Name & ").dat" 
      WS.SaveAs Filename:=filePath, FileFormat:=xlCSV 

    Next 
End Sub 

Il problema è che questo salva il file .xlsm corrente che ho aperto.

Come posso esportarlo in .csv senza modificare il nome del file corrente?

Ho pensato che il SaveCopyAs avrebbe funzionato, ma si applica solo a workbook e non a worksheet.

risposta

8

Qui viene la mia idea, che potrebbe aiutare ... Aggiungi questa parte del codice invece corrente for...next sezione:

'...your code here 
Dim tmpWS As Worksheet 
Application.DisplayAlerts = False 
For Each WS In ThisWorkbook.Worksheets 

     filePath = exportPath & "(" & WS.Name & ").dat" 

     WS.Copy 
     Set tmpWS = ActiveSheet 
     tmpWS.SaveAs Filename:=filePath, FileFormat:=xlCSV 
     tmpWS.Parent.Close False 
Next 
Application.DisplayAlerts = True 
'...your code here 

logica del codice? Innanzitutto, copia una copia del tuo foglio in una cartella di lavoro temporanea, quindi salva il nuovo foglio come file CSV e infine chiude la cartella di lavoro temporanea. Inoltre, ho aggiunto le istruzioni Application.DisplayAlerts che il tuo codice sovrascrive il file .csv senza chiedere se il file esiste già.

+0

stavo preparando questa stessa risposta come la più conveniente, in modo + 1 –

+0

È fantastico. È una buona idea lasciare che sia una cartella di lavoro temporanea piuttosto che cercare di impedire a 'SaveAs' di fare ciò che vuole fare! –

0

Si potrebbe anche prima salvare la cartella di lavoro, quindi salvare fuori i fogli di lavoro e, infine, chiudere la cartella di lavoro senza dover salvare (di nuovo):

' ... your code here 
    ActiveWorkbook.Save 
    Application.DisplayAlerts = False 

Dim WS As Worksheet 

For Each WS In Worksheets 
     Filepath = "c:\temp\" & WS.Name & ".dat" 
     WS.SaveAs Filename:=Filepath, FileFormat:=xlCSV, _ 
     CreateBackup:=False 
Next 
    ActiveWorkbook.Close 
' ... your code here 
Problemi correlati