
Estoy usando tablas de Excel en Excel 2010. Me gustaría exportar rápidamente el contenido de estas tablas a *.csv.
Mi flujo de trabajo actual: 1. Seleccionar la tabla manualmente 2. Copiar el contenido en un nuevo libro 3. Guardar el libro como un archivo *.csv
Flujo de trabajo deseado: 1. Seleccionar la tabla manualmente 2. Ejecutar una macro que escribe en un nombre de archivo predefinido
Dado que las tablas tienen nombres únicos (por ejemplo, CurrentDataTable), ¿existe una función que tome el nombre de la tabla, el archivo de destino y el formato de salida deseado y escriba el archivo de salida?
Respuesta1
No existe ningún comando o función integrado de Excel que haga el tipo de cosas que desea, pero puede usar VBA para programarlo.
El siguiente código puede estar cerca de lo que estás buscando:
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
El código supone que tiene una tabla en cada hoja de trabajo. Crea un nuevo libro de trabajo, copia la tabla en la Hoja 1 de ese libro de trabajo y guarda el libro como un archivo CSV con el mismo nombre que la tabla.
Respuesta2
Aquí está mi versión de la respuesta de chuff para Excel 2013. También deshabilita los cuadros de diálogo modales:
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
Respuesta3
Necesitaba hacer lo mismo, pero necesitaba especificar qué tablas debían exportarse como archivos CSV. Creé un rango llamado 'ExportTables', con VBA de la siguiente manera:
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
Respuesta4
Recibí un error 1004 en el código anterior. Eliminar en el código de Thorsten. lo fusioné coneste ejemploy obtuve esto, que funciona para mí:
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
Tenga en cuenta que este enfoque (de Thorsten) exporta la hoja completa, no solo la tabla, por lo que obtiene MUCHAS filas vacías.