Saltar al contenido

Sobresalir: macro para exportar la hoja de trabajo como archivo CSV sin salir de mi hoja de Excel actual

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:

  1. exporta solo la hoja codificada llamada “Hoja1”;
  2. siempre exporta al mismo archivo temporal, sobrescribiéndolo;
  3. 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:

  1. .Close y DisplayAlerts=True debería estar en una cláusula final, pero no sé cómo hacerlo en VBA
  2. 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.
  3. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *