webentwicklung-frage-antwort-db.com.de

Wie erstelle ich eine separate CSV-Datei von VBA?

Ich muss einige Ergebnisse als .csv-Datei ausgeben, die später von einem anderen Prozess analysiert wird. Um diese Ergebnisse zu erzielen, habe ich eine riesige Arbeitsmappe mit allen Makros und Funktionen, die ich brauche. 

  1. Kann eine separate .csv-Datei von VBA "erstellt" werden? 
  2. Ist es möglich, VBA-Funktionen zu verwenden, um darin zu schreiben, anstatt nur in einem "rohen Text" -Ansatz zu schreiben?

Vielen Dank :)

11
Jerome

Ist so etwas was du willst?

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

Vergessen Sie nicht, dass Sie Anführungszeichen um jedes Feld setzen müssen, das ein Komma enthält.

23
Tony Dallimore

Tonys Antwort funktioniert im Allgemeinen, behandelt jedoch nicht den Fall, in dem Ihr Text Kommas oder Anführungszeichen enthält. Möglicherweise bevorzugen Sie die Methode Workbook.SaveAs.

Hier ein Beispiel, wenn Sie den Inhalt von Sheet1 als separate CSV-Datei speichern möchten. 

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

Stellen Sie sich vor, Ihr Sheet1 enthält:

lorem Ipsum

geschichte, m ips "um"

Die Ausgabe der CSV-Datei lautet: 

lorem, Ipsum

"lore, m", "ips" "um" ""

8
user3707264

Sie können ein Makro wie die aktuelle Arbeitsmappe (geöffnete Excel-Datei) in CSV von VBA speichern:

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