PROGRAMAR EN VBA MACROS PARA EXCEL: Como Exportar Desde Excel a TXT con Ancho Fijo

Como Exportar Desde Excel a TXT con Ancho Fijo






En este post se muestra Como Exportar de Excel a TXT Delimitando Registros con Ancho Fijo, es decir se generará un archivo plano con todos los datos que hayamos exportado de Excel al TXT.

Para ver más tutoriales sobre exportación importación de datos de Excel a TXT debes seguir el siguiente link

Recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

Suscribe a nuestro canal para que YouTube te avise cuando se suba nuevo contenido al canal, en el vídeo encontrarás una explicación gráfica y detallada del ejemplo que se muestra en este post.






 


El ejemplo permite exportar dos datos contenidos en la hoja de Excel a un Archivo TXT, pero delimitados o separados los registros entre sí por un ancho fijo, normalmente los sistemas informáticos cuando importan o exportan datos tienen un ancho determinado de caracteres para cada campo, bien en este ejemplo se crea un TXT con se ancho predeterminado de campo.

La macro crea un archivo TXT que lleva el mismo nombre que el archivo con la macro, pero con extensión TXT, eso se crea con los códigos que se muestran a continuación:

nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"

Ahora la macro establece cual va a ser el ancho de cada campo, llamamos campo a cada columna de la hoja de Excel, se crea con los siguientes códigos:

larC1 = 5
larC2 = 10
larC3 = 50
larC4 = 50
larC5 = 15
larC6 = 10
larC7 = 15

Luego asignamos a la variable cara cual va a ser el caracter que delimitará los registros, en este ejemplo el caracter para completar los espacios faltantes para llegar al largo de cada campo, es un espacio en blanco, se usa el siguiente código:

cara = " " 'caracter para completar el espacio


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como cargar listbox de más de diez columnas

Como enviar mail con archivo Excel y PDF mediante Outlook con Excel

Como hacer un link o hiperlink a google maps con Excel

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Luego la macro realiza un bucle entre la primer y la última fila con datos, cuyas filas de Excel va a ir recorriendo y exportando a TXT.

Para agregar los espacios en blanco necesarios para que se cumpla el largo del campo, se hace una resta entre el largo establecido del campo menos el largo de los registros, agregando el caracter en blanco a los espacios faltantes para completar el largo del campo.

C1 = String(larC1 - Len(Cells(i, 1)), cara) & Cells(i, 1)

Luego de determinar cada registro se concatena todos los registros de la columnas y fila que recorre el bucle en cada momentos, luego exporta dicho registro a TXT. Lo mencionado se hace con el siguiente código:

Print #1, C1 & C2 & C3 & C4 & C5 & C6 & C7

El ejemplo Como Exportar Desde Excel a TXT con ancho fijo, se puede descargar desde el link del final, a continuación la codificación completa.


Código que se inserta en un Formulario de Excel

'**************https://programarexcel.com  **** https://youtube.com/programarexcel*********



#If VBA7 And Win64 Then
'Si es de 64 bits
Public Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
Public Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
Public Declare PtrSafe Function SetWindowLongPtr Lib "USER32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Public Declare PtrSafe Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As LongPtr
Public Declare PtrSafe Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As LongPtr, ByVal lpSubKey As String, phkResult As LongPtr) As LongPtr
#Else
'Si es de 32 bits
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Public Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long
Public Declare Function RegOpenKeyA Lib "advapire32.dll" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
#End If

Sub ExportaTXTAnchoFijoRellenoEspacios()
Dim i As Double
On Error Resume Next
Set a = Sheets("Hoja1")
nom = ActiveWorkbook.Name
pto = InStr(nom, ".")
nomarch = Left(nom, pto - 1)
myfile = ThisWorkbook.Path & "\" & nomarch & ".txt"
'largo de campos
larC1 = 5
larC2 = 10
larC3 = 50
larC4 = 50
larC5 = 15
larC6 = 10
larC7 = 15
cara = " " 'caracter para completar el espacio
uf = a.Range("A" & Rows.Count).End(xlUp).Row

Open myfile For Output As #1
For i = 2 To uf
C1 = String(larC1 - Len(Cells(i, 1)), cara) & Cells(i, 1)
C2 = String(larC2 - Len(Cells(i, 2)), cara) & Cells(i, 2)
C3 = Cells(i, 3) & String(larC3 - Len(Cells(i, 3)), cara)
C4 = Cells(i, 4) & String(larC4 - Len(Cells(i, 4)), cara)
C5 = String(larC5 - Len(Cells(i, 5)), cara) & Cells(i, 5)
C6 = String(larC6 - Len(Cells(i, 6)), cara) & Cells(i, 6)
C7 = String(larC7 - Len(Cells(i, 7)), cara) & Cells(i, 7)
Print #1, C1 & C2 & C3 & C4 & C5 & C6 & C7
Next i
Close
MsgBox ("El archivo txt se creo con éxito"), vbInformation, "AVISO"
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends