Exportar tabla de Office Excel a csv usando una macro

Exportar tabla de Office Excel a csv usando una macro

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.

información relacionada