2013-10-09 2 views
8

Dire che ho una funzione che genera alcuni dati nelle celle nel foglio di lavoro corrente come:esportazione dei dati in un file CSV - Excel VBA

Cells(1, "A").Value = ... 
Cells(2, "A").Value = ... 
Cells(3, "A").Value = ... 
Cells(4, "A").Value = ... 

Invece del essendo il foglio di lavoro corrente nella cartella di lavoro corrente, voglio crea e caricalo in un file csv, in un percorso dare

Dire C:\USERS\Documents\Sample.csv.

Ho visto cose come

 ActiveWorkbook.SaveAs Filename:= _ 
"c:\MyFile.csv", FileFormat:=xlCSV _ 
, CreateBackup:=False 

Ma questo sarà solo salvare la cartella di lavoro corrente in un'altra posizione, ma non voglio generare dati nel foglio di lavoro corrente e quindi salvare, piuttosto voglio esportare subito? C'è comunque che posso farlo. Forse fare come ActiveWorkbook = //pathname e poi attivarlo?

+3

prima aprire una nuova cartella di lavoro. Quindi i tuoi dati di deposito macro nella nuova cartella di lavoro. Quindi fai macro salvando la nuova cartella di lavoro come csv nella cartella scelta con il tuo nome di scelta. Quindi chiudi la nuova cartella di lavoro. –

+0

@ Gary'sStudent Sto usando 'Workbooks.Add' per creare un'altra cartella di lavoro. Come potrei attivarmi ora per assicurarmi di importarlo ... è qualcosa come 'NewWorkbook.Sheets (1) .Activate'? – Thatdude1

+2

Non usare solo workbooks.add ... usa qualcosa come ... dim wb as workbook // Imposta wb = workbooks.add // con wb ... –

risposta

12

È possibile scrivere in un CSV semplicemente utilizzando VBA. Un esempio potrebbe essere:

Sub WriteCSVFile() 

Dim My_filenumber As Integer 
Dim logSTR As String 

My_filenumber = FreeFile 

logSTR = logSTR & Cells(1, "A").Value & " , " 
logSTR = logSTR & Cells(2, "A").Value & " , " 
logSTR = logSTR & Cells(3, "A").Value & " , " 
logSTR = logSTR & Cells(4, "A").Value 

Open "C:\USERS\Documents\Sample.csv" For Append As #My_filenumber 
    Print #My_filenumber, logSTR 
Close #My_filenumber 

End Sub 
+0

The_Barman: Very nice & clean! –

+5

Questa soluzione non gestisce i casi in cui esistono spazi bianchi o nuove o virgole nei dati. Utilizza sempre una funzione CSV reale anziché concatenare le tue stringhe. – dataless

+10

dataless ... piuttosto che suggerire una soluzione migliore e non aggiungere realmente al sito ... per favore, prenditi il ​​tempo per pubblicare la tua soluzione migliore. Sono sempre felice di imparare. Forse, cerca di non abbattere gli altri, piuttosto cerca di aiutarli. –

6

Utilizzare la .Portare per fare un nuovo libro del foglio di destinazione, quindi .SaveAs il libro appena creato come CSV. Regola il nome del percorso per regolare la directory in cui desideri salvare il tuo csv.

Pathname = "" & Thisworkbook.path & "YourName.csv" 
    Sheets("Sheet you want as CSV").Move 
    ActiveWorkbook.SaveAs Filename:=PathName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
0

appena modificato il codice @CharlieSmith ad un codice abbastanza semplice e più usabile, che convertirà tutti i fogli nella cartella di lavoro per i nuovi file CSV denominato con i relativi nomi dei fogli.

Sub WriteCSVFile() 
Dim i As Integer 
Dim WS_Count As Integer 

WS_Count = ActiveWorkbook.Worksheets.Count 
For i = 1 To WS_Count 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Worksheets(i) 
    PathName = "" & ThisWorkbook.Path & "\" & ws.Name & ".csv" 
    ws.Copy 
    ActiveWorkbook.SaveAs Filename:=PathName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
Next i 

End Sub 

Spero che questo aiuti