Exporte a tabela do Office Excel para o csv usando uma macro

6

Estou usando as Tabelas do Excel no Excel 2010. Gostaria de exportar rapidamente o conteúdo dessas tabelas para * .csv.

Meu fluxo de trabalho atual: 1. Selecione a tabela manualmente 2. Copie o conteúdo para uma nova pasta de trabalho 3. Salve a pasta de trabalho como um arquivo * .csv

Fluxo de trabalho desejado: 1. Selecione a tabela manualmente 2. Execute uma macro que grava em um nome de arquivo pré-definido

Como as tabelas têm nomes exclusivos (por exemplo, CurrentDataTable), existe uma função que leva o nome da tabela, o arquivo de destino e o formato de saída desejado e grava o arquivo de saída?

    
por vg425 25.01.2013 / 04:57

3 respostas

5

Não há nenhum comando ou função interna do Excel que faça o tipo de coisa que você quer, mas você pode usar o VBA para programá-lo.

O código a seguir pode estar próximo ao que você está procurando:

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

O código pressupõe que você tenha uma tabela em cada planilha. Ele cria uma nova pasta de trabalho, copia a tabela na Folha 1 dessa pasta de trabalho e salva a pasta de trabalho como um arquivo CSV com o mesmo nome da tabela.

    
por 25.01.2013 / 07:51
2

Esta é minha versão da resposta de chuff para o Excel 2013. Ela também desativa as caixas de diálogo modais:

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
    
por 15.04.2015 / 13:28
1

Eu precisava fazer o mesmo, mas precisava especificar quais tabelas precisavam ser exportadas como arquivos CSV. Eu criei um intervalo chamado 'ExportTables', com o VBA da seguinte forma:

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
    
por 03.06.2017 / 14:46