Este dilema se puede abordar de diversas maneras, pero nosotros te mostramos la que en nuestra opinión es la solución más completa.
Solución:
@NathanClement fue un poco más rápido. Sin embargo, aquí está el código completo (un poco más elaborado):
Option Explicit
Public Sub ExportWorksheetAndSaveAsCSV()
Dim wbkExport As Workbook
Dim shtToExport As Worksheet
Set shtToExport = ThisWorkbook.Worksheets("Sheet1") 'Sheet to export as CSV
Set wbkExport = Application.Workbooks.Add
shtToExport.Copy Before:=wbkExport.Worksheets(wbkExport.Worksheets.Count)
Application.DisplayAlerts = False 'Possibly overwrite without asking
wbkExport.SaveAs Filename:="C:tmptest.csv", FileFormat:=xlCSV
Application.DisplayAlerts = True
wbkExport.Close SaveChanges:=False
End Sub
Casi lo que quería @Ralph, pero aquí está el la mejor respuesta. Resolverá tus problemas de código:
- exporta solo la hoja codificada llamada “Hoja1”;
- siempre exporta al mismo archivo temporal, sobrescribiéndolo;
- ignora el carácter de separación de configuración regional.
A resolver estos problemas, y cumple con todos mis requisitos, he adaptado el código de aquí. Lo he limpiado un poco para que sea más legible.
Option Explicit
Sub ExportAsCSV()
Dim MyFileName As String
Dim CurrentWB As Workbook, TempWB As Workbook
Set CurrentWB = ActiveWorkbook
ActiveWorkbook.ActiveSheet.UsedRange.Copy
Set TempWB = Application.Workbooks.Add(1)
With TempWB.Sheets(1).Range("A1")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
End With
Dim Change below to "- 4" to become compatible with .xls files
MyFileName = CurrentWB.Path & "" & Left(CurrentWB.Name, Len(CurrentWB.Name) - 5) & ".csv"
Application.DisplayAlerts = False
TempWB.SaveAs Filename:=MyFileName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
TempWB.Close SaveChanges:=False
Application.DisplayAlerts = True
End Sub
Todavía hay algunas cosas pequeñas con el código anterior que deberías notar:
.Close
yDisplayAlerts=True
debería estar en una cláusula final, pero no sé cómo hacerlo en VBA- Funciona solo si el nombre de archivo actual tiene 4 letras, como .xlsm. No funcionaría en archivos antiguos de Excel .xls. Para extensiones de archivo de 3 caracteres, debe cambiar el
- 5
a- 4
al establecer MyFileName. - Como efecto colateral, su portapapeles será sustituido por el contenido actual de la hoja.
Editar: poner Local:=True
para guardar con mi delimitador CSV de configuración regional.
Según mi comentario en la publicación de @neves, mejoré esto ligeramente al agregar xlPasteFormats, así como también la parte de valores para que las fechas aparezcan como fechas; principalmente guardo como CSV para extractos bancarios, por lo que necesitaba fechas.
Sub ExportAsCSV()
Dim MyFileName As String
Dim CurrentWB As Workbook, TempWB As Workbook
Set CurrentWB = ActiveWorkbook
ActiveWorkbook.ActiveSheet.UsedRange.Copy
Set TempWB = Application.Workbooks.Add(1)
With TempWB.Sheets(1).Range("A1")
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
End With
'Dim Change below to "- 4" to become compatible with .xls files
MyFileName = CurrentWB.Path & "" & Left(CurrentWB.Name, Len(CurrentWB.Name) - 5) & ".csv"
Application.DisplayAlerts = False
TempWB.SaveAs Filename:=MyFileName, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
TempWB.Close SaveChanges:=False
Application.DisplayAlerts = True
End Sub
Sección de Reseñas y Valoraciones
Nos encantaría que puedieras mostrar este post si lograste el éxito.