
Estou usando 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 em 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 grave em um nome de arquivo predefinido
Como as tabelas têm nomes exclusivos (por exemplo, CurrentDataTable), existe uma função que pega o nome da tabela, o arquivo de destino e o formato de saída desejado e grava o arquivo de saída?
Responder1
Não existe nenhum comando ou função integrada do Excel que faça o tipo de coisa que você deseja, mas você pode usar o VBA para programá-lo.
O código a seguir pode estar próximo do 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 Planilha 1 dessa pasta de trabalho e salva a pasta de trabalho como um arquivo CSV com o mesmo nome da tabela.
Responder2
Aqui está minha versão da resposta do chuff para 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
Responder3
Eu precisava fazer o mesmo, mas precisava especificar quais tabelas deveriam ser exportadas como arquivos CSV. 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
Responder4
Eu estava recebendo um erro 1004 do código acima .Delete no código de Thorsten. Eu mesclei comeste exemploe consegui isso, que funciona para mim:
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
Observe que esta abordagem (de Thorsten) exporta a planilha inteira, não apenas a tabela, então você obtém MUITAS linhas vazias.