2013-04-26 9 views
5

Próbuję eksportować liczbę arkuszy w moim zeszycie do pliku .csv za pomocą jakiegoś kodu:Jak eksportować wiele arkuszy do pliku CSV (bez zapisywania na bieżącym arkuszu)

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 

Problem polega to oszczędza nad bieżącym plikiem .xlsm, który mam otwarty.

W jaki sposób mogę go wyeksportować .csv bez zmiany nazwy bieżącego pliku?

Pomyślałem, że SaveCopyAs załatwiłoby sprawę, ale dotyczy tylko workbook, a nie worksheet.

Odpowiedz

8

Nadchodzi mój pomysł, który mógłby pomóc ... Dodaj tę część kodu zamiast tego prądu for...next sekcja:

'...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 

Logic kodu? Najpierw tworzy kopię twojego arkusza w tymczasowym skoroszycie, następnie zapisuje nowy arkusz jako plik CSV, a na końcu zamyka tymczasowy skoroszyt. Co więcej, dodałem Application.DisplayAlerts instrukcje, że twój kod zastępuje plik .csv bez pytania, czy plik już istnieje.

+0

przygotowywałem tę samą odpowiedź jak najbardziej wygodny jeden, więc + 1 –

+0

To fantastyczne. Dobrego myślenia, aby dać mu tymczasowy skoroszyt, zamiast próbować powstrzymać 'SaveAs' od robienia tego, co chce zrobić! –

0

Można też najpierw zapisać skoroszyt, a następnie zapisać się na arkusze i ostatecznie zamknąć skoroszyt bez konieczności zapisywania (znowu):

' ... 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 
Powiązane problemy