2011-12-07 82 views
10

Necesito dar como resultado algunos resultados como un archivo .csv, que luego es analizado por otro proceso. Para producir estos resultados, tengo un enorme libro de trabajo que contiene todas las macros y funciones que necesito.¿Cómo crear un archivo CSV separado de VBA?

  1. ¿Es posible "crear" un archivo separado .csv de VBA?
  2. ¿Es posible utilizar las características VBA para escribir en él en lugar de simplemente escribir en un enfoque de "texto sin formato"?

ti :)

+1

Sin más detalles será difícil para ayudarle. ¿Cuál es la fuente de los datos y por qué necesita crear un CSV desde cero en lugar de utilizar el método nativo de Excel (SaveAs)? – JimmyPena

Respuesta

22

es algo como esto lo que quieres?

Option Explicit 
Sub WriteFile() 

    Dim ColNum As Integer 
    Dim Line As String 
    Dim LineValues() As Variant 
    Dim OutputFileNum As Integer 
    Dim PathName As String 
    Dim RowNum As Integer 
    Dim SheetValues() As Variant 

    PathName = Application.ActiveWorkbook.Path 
    OutputFileNum = FreeFile 

    Open PathName & "\Test.csv" For Output Lock Write As #OutputFileNum 

    Print #OutputFileNum, "Field1" & "," & "Field2" 

    SheetValues = Sheets("Sheet1").Range("A1:H9").Value 
    ReDim LineValues(1 To 8) 

    For RowNum = 1 To 9 
    For ColNum = 1 To 8 
     LineValues(ColNum) = SheetValues(RowNum, ColNum) 
    Next 
    Line = Join(LineValues, ",") 
    Print #OutputFileNum, Line 
    Next 

    Close OutputFileNum 

End Sub 

No olvides que tendrás que poner comillas en cualquier campo que contenga una coma.

+0

No sé por qué, pero si modifico el comentario de este código y lo ejecuto, los SheetValues ​​se fusionan en una o dos columnas y si revierte el código al de esta publicación, no solucione el problema. Acabo de pasar todo un día intentando probar estas cosas y no pude encontrar el motivo. – Alfabravo

+0

@ Alfabravo. Si vas a mi perfil, encontrarás una dirección de correo electrónico. Si me envía una copia de su código defectuoso lo echaré un vistazo. –

+0

@tonyDallimore, ¿qué significa "Lock Write as #OutputFileNum"? –

1

Es posible escribir una macro desea guardar el libro actual (abierto archivo excel) Gracias de CSV desde VBA:

ActiveWorkbook.SaveAs Filename:="C:\Book1.csv", _ 
    FileFormat:=xlCSVMSDOS, CreateBackup:=False 
+0

Bueno, eso sería un comienzo. ¿Pero alguna idea de cómo podría hacer una completamente externa? – Jerome

7

La respuesta de Tony generalmente funciona pero no maneja el caso en que el texto contiene comas o comillas. Puede preferir utilizar el método Workbook.SaveAs.

Aquí hay un ejemplo si desea guardar el contenido de Sheet1 como un archivo csv separado.

Sub create_csv() 
    Dim FileName As String 
    Dim PathName As String 
    Dim ws As Worksheet 

    Set ws = ActiveWorkbook.Sheets("Sheet1") 
    FileName = "filename.csv" 
    PathName = Application.ActiveWorkbook.Path 
    ws.Copy 
    ActiveWorkbook.SaveAs FileName:=PathName & "\" & FileName, _ 
     FileFormat:=xlCSV, CreateBackup:=False 
End Sub 

Imagine que su Hoja1 contiene:

lorem ipsum

tradición, m ips "um" archivo csv

La salida será:

lorem, ipsum

"tradición, M", "ips" "um" ""

Cuestiones relacionadas