
Ich verwende Excel-Tabellen in Excel 2010. Ich möchte den Inhalt dieser Tabellen schnell in *.csv exportieren.
Mein aktueller Workflow: 1. Tabelle manuell auswählen 2. Inhalt in neues Arbeitsbuch kopieren 3. Arbeitsbuch als *.csv Datei speichern
Gewünschter Workflow: 1. Tabelle manuell auswählen 2. Makro ausführen, das in eine vordefinierte Datei schreibt
Da die Tabellen eindeutige Namen haben (z. B. CurrentDataTable), gibt es eine Funktion, die den Tabellennamen, die Zieldatei und das gewünschte Ausgabeformat übernimmt und die Ausgabedatei schreibt?
Antwort1
Es gibt keinen integrierten Excel-Befehl oder keine integrierte Funktion, die das von Ihnen gewünschte Ergebnis liefert, Sie können es jedoch mit VBA programmieren.
Der folgende Code könnte dem von Ihnen gesuchten Code ähneln:
Sub ExportTable()
Dim wb As Workbook, wbNew As Workbook
Dim ws As Worksheet, wsNew As Worksheet
Dim wbNewName As String
Set wb = ThisWorkbook
Set ws = ActiveSheet
Set wbNew = Workbooks.Add
With wbNew
Set wsNew = wbNew.Sheets("Sheet1")
wbNewName = ws.ListObjects(1).Name
ws.ListObjects(1).Range.Copy
wsNew.Range("A1").PasteSpecial Paste:=xlPasteAll
.SaveAs Filename:=wb.Path & "\" & wbNewName & ".csv", _
FileFormat:=xlCSVMSDOS, CreateBackup:=False
End With
End Sub
Der Code geht davon aus, dass Sie in jedem Arbeitsblatt eine Tabelle haben. Er erstellt eine neue Arbeitsmappe, kopiert die Tabelle in Blatt 1 dieser Arbeitsmappe und speichert die Arbeitsmappe als CSV-Datei unter demselben Namen wie die Tabelle.
Antwort2
Hier ist meine Version von Chuffs Antwort für Excel 2013. Sie deaktiviert auch die modalen Dialoge:
Sub ExportCSV()
Dim wb As Workbook, wbNew As Workbook
Dim ws As Worksheet, wsNew As Worksheet
Set wb = ThisWorkbook
Set ws = ActiveSheet
Set wbNew = Workbooks.Add
Application.DisplayAlerts = False
With wbNew
Set wsNew = wbNew.Sheets("Sheet1")
ws.Rows.Copy
wsNew.Paste
.SaveAs Filename:=ws.name & ".csv", FileFormat:=xlCSV, CreateBackup:=True
wsNew.Delete
End With
Windows(ws.name & ".csv").Activate
ActiveWindow.Close
Application.DisplayAlerts = True
End Sub
Antwort3
Ich musste dasselbe tun, musste aber angeben, welche Tabellen als CSV-Dateien exportiert werden sollten. Ich habe mit VBA einen Bereich mit dem Namen „ExportTables“ erstellt, und zwar wie folgt:
Public Sub Export()
Dim i As Integer
Dim iMax As Integer
Dim sTable As String
iMax = Range("ExportTables").Rows.Count
For i = 1 To iMax
sTable = Range("ExportTables").Cells(i, 1).Value
Call ExportTable(sTable)
Next i
End Sub
Public Sub ExportTable(tableName As String)
Dim wkb As Workbook
Dim wkbNew As Workbook
Dim wks As Worksheet
Dim wksNew As Worksheet
Set wkb = ThisWorkbook
Application.Goto Reference:=tableName
Set wks = ActiveSheet
Set wkbNew = Workbooks.Add
Set wksNew = wkbNew.Sheets(1)
wks.ListObjects(tableName).Range.Copy
wksNew.Range("A1").PasteSpecial Paste:=xlPasteValues
Application.DisplayAlerts = False
wkbNew.SaveAs Filename:=wkb.Path & "\" & tableName & ".csv", _
FileFormat:=xlCSV, CreateBackup:=False
wkbNew.Close SaveChanges:=False
Application.DisplayAlerts = True
' Release object variables.
Set wkb = Nothing
Set wkbNew = Nothing
Set wks = Nothing
Set wksNew = Nothing
End Sub
Antwort4
Ich habe einen 1004-Fehler vom obigen Code erhalten. Löschen in Thorstens Code. Ich habe es zusammengeführt mitdieses Beispielund habe das hier bekommen, was bei mir funktioniert:
Sub ExportCSV2()
Dim wb As Workbook, wbNew As Workbook
Dim ws As Worksheet, wsNew As Worksheet
Set wb = ThisWorkbook
Set ws = ActiveSheet
Application.DisplayAlerts = False
ws.Copy
ActiveWorkbook.SaveAs Filename:=ws.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=True
Windows(ws.Name & ".csv").Activate
ActiveWorkbook.Close False
Application.DisplayAlerts = True
End Sub
Bitte beachten Sie, dass bei diesem (Thorstens) Ansatz das gesamte Blatt und nicht nur die Tabelle exportiert wird, sodass Sie SEHR VIELE leere Zeilen erhalten.