2011-12-07 20 views
10

Ho bisogno di produrre alcuni risultati come file .csv, che viene analizzato in seguito da un altro processo. Per produrre questi risultati, ho un'enorme cartella di lavoro contenente tutte le macro e le funzioni di cui ho bisogno.Come creare un file CSV separato da VBA?

  1. E 'possibile "creare" un file separato .csv da VBA?
  2. È possibile utilizzare le funzioni VBA per scrivere al posto di scrivere semplicemente in un approccio "testuale"?

voi :)

+1

Senza ulteriori dettagli sarà difficile per assistervi. Qual è la fonte dei dati e perché è necessario creare un CSV da zero invece di utilizzare il metodo nativo di Excel (SaveAs)? – JimmyPena

risposta

22

è qualcosa di simile quello che vuoi?

Option Explicit 
Sub WriteFile() 

    Dim ColNum As Integer 
    Dim Line As String 
    Dim LineValues() As Variant 
    Dim OutputFileNum As Integer 
    Dim PathName As String 
    Dim RowNum As Integer 
    Dim SheetValues() As Variant 

    PathName = Application.ActiveWorkbook.Path 
    OutputFileNum = FreeFile 

    Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum 

    Print #OutputFileNum, "Field1" & "," & "Field2" 

    SheetValues = Sheets("Sheet1").Range("A1:H9").Value 
    ReDim LineValues(1 To 8) 

    For RowNum = 1 To 9 
    For ColNum = 1 To 8 
     LineValues(ColNum) = SheetValues(RowNum, ColNum) 
    Next 
    Line = Join(LineValues, ",") 
    Print #OutputFileNum, Line 
    Next 

    Close OutputFileNum 

End Sub 

Non dimenticare che dovrai inserire virgolette in qualsiasi campo contenente una virgola.

+0

Non so perché, ma se modifico commenti di questo codice ed eseguo, gli SheetValues ​​vengono uniti in una o due colonne e il ripristino del codice in quello in questo post non risolve il problema. Ho passato solo un giorno intero a provare questa roba e non ho trovato il motivo. – Alfabravo

+0

@ Alfabravo. Se vai sul mio profilo troverai un indirizzo email. Se mi mandi una copia del tuo codice difettoso, darò un'occhiata. –

+0

@tonyDallimore, cosa fa il "Lock Write as #OutputFileNum"? –

1

Si può scrivere una macro come per salvare la cartella di lavoro corrente (aperto file excel) Grazie in CSV da VBA:

ActiveWorkbook.SaveAs Filename:="C:\Book1.csv", _ 
    FileFormat:=xlCSVMSDOS, CreateBackup:=False 
+0

Ok, sarebbe un inizio. Ma qualche idea su come potrei fare una completamente esterna? – Jerome

7

La risposta di Tony generalmente funziona ma non gestisce il caso in cui il testo contiene virgole o virgolette. Si consiglia di utilizzare il metodo Workbook.SaveAs.

Ecco un esempio se si desidera salvare il contenuto di Sheet1 come file csv separato.

Sub create_csv() 
    Dim FileName As String 
    Dim PathName As String 
    Dim ws As Worksheet 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 
    FileName = "filename.csv" 
    PathName = Application.ActiveWorkbook.Path 
    ws.Copy 
    ActiveWorkbook.SaveAs FileName:=PathName & "\" & FileName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
End Sub 

Immaginate che il vostro Foglio1 contiene:

lorem ipsum

lore, m ips "um" file CSV

L'output sarà:

lorem, ipsum

"lore, m", "ips" "Um" ""

Problemi correlati