Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como Exportar Desde Excel y Guardar Archivo TXT con Ancho Fijo Rellenando Campos con Barra Inclinada


.

En este ejemplo de macro se muestra como Exportar de Excel a un Archivo TXT Delimitado con Acho Fijo, Rellenando Campo con Barras; es decir la macro crea un archivo TXT con la información contenida en la hoja de Excel, los campos del archivo de texto plano estarán delimitados o separados por un ancho fijo de cada campo y el campo se rrellenará con barras inclinadas en caso de que los caracteres del campo sean menores al ancho fijo establecido.

Quieres aprender más sobre como importar exportar archivos de Excel a TXT o TXT a Excel, mira el siguiente playlist donde encontrarás muchos ejemplos.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, 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.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

 
La macro en un primer lugar crea el nombre del archivo TXT para eso determina el nombre del archivo actual que es el que contiene la macro, para denominar el fichero TXT a crear con el nombre del archivo actual, pero con extensión TXT, usa los siguientes códigos:

nom = ActiveWorkbook.Name

pto = InStr(nom, «.»)

nomarch = Left(nom, pto – 1)

myfile = ThisWorkbook.Path & «» & nomarch & «.txt»

Luego establece cual va a ser el largo de cada campo, establece el largo de todos los campos a exportarse a TX, ello se hace con la siguiente codificación:

larC1 = 5

larC2 = 10

larC3 = 50

larC4 = 50

larC5 = 15

larC6 = 10

larC7 = 15

Las variables anteriores establecen cual va a ser el ancho fijo de cada columna y lo carga en cada unas de las variables, esto es lo que se debe modificar para establecer la cantidad de caracteres o ancho de campo, pudiendo agregar más variables en el caso de tener más columnas a Exportar a TXT.

Con las siguientes variables se va a establecer cual va a ser el caracter que se va a usar para rellenar los campos en caso que la cantidad de texto de las palabras o string que hayan en cada celda sea menor al ancho fijo de caracteres, si la cantidad de caracteres de la celda  es menor rellena con barra inclinada (/), si es igual no hace nada y si es mayor va a truncar o cortar los caracteres acortándolos al ancho dado en las variables destinadas a tal fin.

cara = «/» ‘caracter para completar el espacio

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

Quizá sea de utilidad también

Como crear una factura con excel, guardarla y enviarla por mail automáticamente

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

Como hacer un link o hiperlink a google maps con Excel

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

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

Con el siguiente código se determinar la última fila con datos para realizar un bucle y se crea el archivo TXT :

uf = a.Range(«A» & Rows.Count).End(xlUp).Row

Open myfile For Output As #1

Luego se realiza un bucle de la primer a la última fila con datos exportando los datos de Excel a TXT, de la siguiente forma:

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

Se debe destacar que se crea una variable por cada columna a exportar utilizando una función de VBA para repetir un caracteres en este caso la barra inclinada, cuantas veces se repetirá dependerá de la diferencia entre el largo del campo y el largo del texto de cada ceda, con el siguiente código se logra repetir la cantidad de caracteres necesarios para rellenar el campo: 

 String(larC1 – Len(Cells(i, 1)), cara)

Luego se concatena los datos repetidos con el dato de cada celda recorrida por el bucle, dando origen a las variables C1, C2…Cn.
A medida que el bucle recorre cada celda va agregando los datos el archivo TXT, con la siguiente codificación:

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

El ejemplo denominado como Exportar Datos Desde Excel a TXT Delimitado por Ancho Fijo Rellenando Campos con Barra Inclinada, se puede descargar desde el link del final y seguidamente se muestra la codificación entera del ejemplo, el cual contiene los códigos necesarios al principio para hacerlo compatible en entornos de 32 o 64 Bits.

Código que se inserta en un módulo

‘**************https://macrosenexcel.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 ExportaTXTAnchoFijoRellenoBarra()

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