VBA – Escribir en un Archivo de Texto
In this Article
Este tutorial demostrará cómo escribir en archivos de texto utilizando VBA.
Escribir en un archivo de texto
Los siguientes códigos utilizan el FileSystemObject(aprenda más). Para utilizarlo, necesitará establecer una referencia a la biblioteca de tiempo de ejecución del script VB.
Escribir en un nuevo archivo de texto
Con el método CreateTextFile de FileSystemObject puedes crear y luego añadir contenido a un archivo de texto:
Sub FSOCrear_y_Escribir_en_Archivo_de_texto()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileToCreate = FSO.CreateTextFile("C:\Carpeta VBA\TestFile.txt")
FileToCreate.Write "Línea de Prueba"
FileToCreate.Close
End Sub
Tenga en cuenta que el contenido no irá entre comillas.
Escribir en un archivo de texto existente
Para escribir en un archivo de texto existente puede utilizar el método OpenTextFile de FileSystemObject con el modo ForWriting.
Sub FSOEscribir_en_Archivo_de_texto()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileToWrite = FSO.OpenTextFile("C:\Carpeta VBA\TestFile.txt", ForWriting)
FileToWrite.Write "Línea de Prueba"
FileToWrite.Close
End Sub
Tenga en cuenta que no necesariamente necesita FileSystemObject para escribir en un archivo de texto existente. El ejemplo anterior se muestra de otra manera en este código de abajo (ver otro ejemplo en la sección Rango de Datos a Archivo de Texto):
Sub Escribir_en_Archivo_de_texto()
Dim FileName As String
FileName = "C:\Carpeta VBA\TestFile1.txt"
Open FileName For Output As #1
Print #1, "Línea de Prueba 2"
Close #1
End Sub
Tenga en cuenta que si utiliza el comando Write en lugar de Print, el contenido añadido aparecerá entre comillas. Teniendo ambos comandos en su macro
Write #1, "línea de prueba #1"
Print #1, "línea de prueba #2"
resultará en un archivo de texto como este:
Anexar a un archivo de texto
Cambiando el modo en el código anterior a ForAppending, se puede añadir una línea al final del archivo de texto:
Set FileToWrite = FSO.OpenTextFile("C:\Carpeta VBA\TestFile.txt", ForAppending)
Método WriteLine
Este método añade la cadena de entrada como una línea separada al contenido existente.
Método Write
La cadena de entrada se añade en la misma línea que el contenido existente.
Método WriteBlankLines
Este método toma como parámetro el número de líneas en blanco que se van a escribir en el archivo de texto. El siguiente código ilustra la diferencia entre los diferentes métodos de escritura:
Sub MetodosDeEscritura()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileToWrite = FSO.OpenTextFile("C:\Carpeta VBA\TestFile.txt", ForAppending)
FileToWrite.Write "test line #1 "
FileToWrite.Write "test line #2"
FileToWrite.WriteBlankLines (3)
FileToWrite.WriteLine "test line #3"
FileToWrite.WriteLine "test line #4"
FileToWrite.Close
End Sub
Y el resultado:
Rango de datos a archivo de texto
Si quieres dar salida a un rango de datos de tu hoja de cálculo a un archivo de texto, puedes usar este código:
Sub SalidaHaciaArchivoDeTexto()
Dim FileName As String, LineText As String
Dim MyRange As Range, i, j
FileName = "C:\Carpeta VBA\ArchivoPrueba.txt" 'puede especificar aquí el nombre del archivo de texto que desea crear
Open FileName For Output As #1
Set MyRange = Range("datos") 'asume que tienes un rango de datos llamado "datos" en tu hoja de cálculo
For i = 1 To MyRange.Rows.Count
For j = 1 To MyRange.Columns.Count
LineText = IIf(j = 1, "", LineText & ",") & MyRange.Cells(i, j) 'el archivo de texto que se crea tendrá un separador de comas
Next j
Print #1, LineText 'si utiliza el comando Write en lugar de Print, los datos aparecerán entre comillas en el archivo de texto de salida
Next i
Close #1
End Sub
Array a archivo de texto
También puede guardar su Array de datos en un archivo de texto como este:
Sub GuardarArrayEnArchhivoDeTexto()
Dim MyArray As Variant
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
MyArray = Array(Array("00", "01"), Array("10", "11"), Array("20", "21"))
Set FileToCreate = FSO.CreateTextFile("C:\Carpeta VBA\Array_a_texto.txt")
For N = 0 To UBound(MyArray)
FileToCreate.WriteLine MyArray(N)(0) & "," & MyArray(N)(1)
Next
FileToCreate.Close
End Sub