2015-12-08 15 views
9

Apprezzo ci sono un sacco di voci come save individual excel sheets as csv e Export each sheet to a separate csv file - Ma io voglio salvare un singolo foglio di lavoro in una cartella di lavoro.VBA risparmio unico foglio in formato CSV (non intera cartella di lavoro)

Il mio codice nel mio file xlsm ha un parametro e una scheda tecnica. Creo una copia del foglio di lavoro dei dati con valori incollati e poi voglio salvarla come csv. Attualmente tutta la mia cartella di lavoro cambia nome e diventa un csv.

Come si "salva come csv" un foglio singolo in una cartella di lavoro di Excel?

C'è un Worksheet.SaveAs o devo spostare il mio foglio di dati in un'altra cartella di lavoro e salvarlo in questo modo?

CODICE DI ESEMPIO

' [Sample so some DIMs and parameters passed in left out] 
Dim s1 as Worksheet 
Dim s2 as Worksheet 

Set s1 = ThisWorkbook.Sheets(strSourceSheet) 
' copy across 
s1.Range(s1.Cells(1, 1), s1.Cells(lastrow, lastcol)).Copy 

' Create new empty worksheet for holding values 
Set s2 = Worksheets.Add 

s2.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats 

' save sheet 
s2.Activate 
strFullname = strPath & strFilename 


' >>> BIT THAT NEEDS FIXIN' 
s2.SaveAs Filename:=strFullname, _ 
    FileFormat:=xlCSV, CreateBackup:=True 

' Can I do Worksheets.SaveAs? 

Uso di Windows 10 e Office 365

+0

Se si utilizza il metodo Worksheet.Copy, senza impostare una destinazione di pasta, Excel aprirà come una nuova cartella di lavoro, solo contenenti tale foglio. Dopo Worksheet.Copy, puoi semplicemente utilizzare ActiveWorkbook, poiché la cartella di lavoro copiata diventa la cartella di lavoro attiva e da lì la salva come nuovo file CSV. – Alex4336

+0

Incredibile - 2500 visualizzazioni e non un singolo voto ... – micstr

risposta

9

Questo codice funziona correttamente per me.

Sub test() 

Application.DisplayAlerts = False 

ThisWorkbook.Sheets(strSourceSheet).Copy 
ActiveWorkbook.SaveAs Filename:=strFullname, FileFormat:=xlCSV, CreateBackup:=True 
ActiveWorkbook.Close 

Application.DisplayAlerts = True 

End Sub 

Sta facendo una copia l'intero foglio strSourceSheet, che apre una nuova cartella di lavoro, che possiamo quindi salvare come file .csv, quindi si chiude il file CSV appena salvato, non incasinare il nome del file su il tuo file originale.

+0

Grazie @ Alex4336 ho aggiunto alla stretta ' ActiveWorkbook.Close SaveChanges:. = FALSE _ # e rimuovere temperatura foglio di lavoro in xlsm_ 's2.Delete' – micstr

+0

Quello era solo un rapido progetto, quindi sentitevi liberi per usarlo come vuoi :) Il codice sopra non ha bisogno di cancellare s2, dato che non creerà s2 in primo luogo – Alex4336

+0

Ottima risposta, Alex, mi ha aiutato molto. Il comando Copia crea una nuova cartella di lavoro chiamata qualcosa come "Book1.xlsx", con solo il foglio copiato al suo interno.Questa nuova cartella di lavoro diventa ActiveWorkbook.Una volta chiuso, ActiveWorkbook diventa nuovamente la cartella di lavoro con codice originale, che è ancora aperta e invariato. –

1

Hai solo bisogno di salvare la cartella di lavoro come file CSV. Viene visualizzata una finestra di dialogo che avvisa che si sta salvando su un singolo foglio, ma è possibile sopprimere l'avviso con Application.DisplayAlerts = False.

Non dimenticare di reimpostarlo su true.

+0

ActiveWorkbook.SaveAs .... ad esempio. – PaulG

+0

Grazie a @PaulG. Sono abituato a ricevere questo prompt quando lo faccio manualmente in Excel, ma il codice sta rinominando il mio file senza prompt che era strano – micstr

+0

ActiveWorkbook.SaveAs ... sta salvando il foglio (con la richiesta che un file venga sovrascritto) ma sta anche rinominando il mio file mothership xlsm con il nome del file csv nella directory root! Quindi sono ancora bloccato – micstr

0

Questo è abbastanza generico

Sub WriteCSVs() 

Dim mySheet As Worksheet 
Dim myPath As String 

'Application.DisplayAlerts = False 

For Each mySheet In ActiveWorkbook.Worksheets 

    myPath = "\\myserver\myfolder\" 

    ActiveWorkbook.Sheets(mySheet.Index).Copy 
    ActiveWorkbook.SaveAs Filename:=myPath & mySheet.Name, FileFormat:=xlCSV, CreateBackup:=True 
    ActiveWorkbook.Close 

Next mySheet 

'Application.DisplayAlerts = True 

End Sub