Macro para generar archivo txt desde excel

Como puedo modificar esta macro para que use como separador punto y coma ";" ya que actualmente sale espacio y me gustaría que en vez de espacio salga pegado pero separado por punto y coma ";" les dejo aquí la macro a modificar. Muchas gracias de antemano.

Sub generar_texto()
Dim intUltimaFila As Long
Application.ScreenUpdating = False
ActiveSheet.Copy
intUltimaFila = Columns("A:A").Range("A65536").End(xlUp).Row
For r = intUltimaFila To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r
Range("A1").Select
nbre = InputBox("Nombre del archivo")
ruta = "C:\Users\75070\Desktop" 'AQUI DEBES DEFINIR LA RUTA DONDE GUARDARAS TU ARCHIVO
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ruta & "\" & nbre & ".txt", _
FileFormat:=xlText, CreateBackup:=False
ActiveWorkbook.Close
MsgBox ("Archivo generado exitosamente")
Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
1

Pon todo el siguiente código en el módulo.

Lo que hace es guardar el archivo como CSV separado por "comas", lo pongo entre comillas porque en el inter, estoy cambiando la configuración del sistema para que el separador de listas ahora sea el punto y coma ";", también apago la opción "utilizar separador del sistema".

Ahora sí, se guardar el archivo como txt, separado por punto y coma ";"

Al final de la macro se restablece la coma "," como el separador de listas y se activa la opción "utilizar separador del sistema".

También cuando se guarda el archivo se utiliza el parámetro Local:=True, para que utilice el separador de listas que se ha establecido.


Revisa el archivo y dime si es lo que necesitas

Private Declare Function GetLocaleInfo Lib "kernel32" Alias _
    "GetLocaleInfoA" (ByVal Locale As Long, _
    ByVal LCType As Long, ByVal lpLCData As String, _
    ByVal cchData As Long) As Long
'
Private Declare Function SetLocaleInfo Lib "kernel32" Alias _
    "SetLocaleInfoA" (ByVal Locale As Long, _
    ByVal LCType As Long, ByVal lpLCData As String) As Long
'
Const LOCALE_USER_DEFAULT = &H400
'
Sub generar_texto()
'Act.Por.Dante Amor
    Dim intUltimaFila As Long
    Dim dl As Long
    '
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    ActiveSheet.Copy
    intUltimaFila = Columns("A:A").Range("A65536").End(xlUp).Row
    For r = intUltimaFila To 1 Step -1
        If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
    Next r
    Range("A1").Select
    nbre = InputBox("Nombre del archivo")
    If nbre = "" Then Exit Sub
    ruta = "C:\Users\75070\Desktop" 'AQUI DEBES DEFINIR LA RUTA DONDE GUARDARAS TU ARCHIVO
    ruta = "C:\trabajo"
    Application.DisplayAlerts = False
    'ActiveWorkbook.SaveAs Filename:=ruta & "\" & nbre & ".txt", _
        FileFormat:=xlText, CreateBackup:=False
    ' Establecemos el nuevo símbolo del separador de listas
    dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &HC, ";")
    Application.UseSystemSeparators = False
    DoEvents
    ActiveWorkbook.SaveAs Filename:=ruta & "\" & nbre & ".txt", _
        FileFormat:=xlCSV, CreateBackup:=False, Local:=True
    ActiveWorkbook.Close
    'Reestablecemos la configuración
    dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &HC, ",")
    Application.UseSystemSeparators = True
    DoEvents
    MsgBox ("Archivo generado exitosamente")
    Application.ScreenUpdating = True
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

Disculpe al momento de ejecutarlo me indica "error de compilación no se ha definido sub o function"

 dl = SetLocaleInfo(LOCALE_USER_DEFAULT, &HC, ";")  

Tienes que poner esto al principio de todo el código

Private Declare Function GetLocaleInfo Lib "kernel32" Alias _
    "GetLocaleInfoA" (ByVal Locale As Long, _
    ByVal LCType As Long, ByVal lpLCData As String, _
    ByVal cchData As Long) As Long
'
Private Declare Function SetLocaleInfo Lib "kernel32" Alias _
    "SetLocaleInfoA" (ByVal Locale As Long, _
    ByVal LCType As Long, ByVal lpLCData As String) As Long
'
Const LOCALE_USER_DEFAULT = &H400

Disculpe las molestias ahora me sale que el código de este proyecto se debe actualizar para usarse en sistemas de 64 bits

Tienes windows de 64 bits

asi es amigo windows 10 64bits

La idea era que la macro cambiara la configuración para guardar el archivo separado por punto y coma.

  • Otra opción es que guardes el archivo como CSV separado por coma y después utilices un editor como NotePad, abras el archivo y cambias las comas por punto y coma.
  • Otra opción es que cambies manualmente para que el separador de listas sea punto y coma y después guardes tu archivo como CSV separado por coma. Claro, después tendrás que regresar a cambiar la configuración.
  • Otra opción, es que insertes una columna entre cada columna esa columna la llenes con punto y coma, luego guardes el archivo como txt. En excel hay varios formatos para guardar como txt, selecciona cada uno de ellos, guarda el archivo, revisa cuál es el formato que necesitas, regresa a excel, activa la grabadora de macro, vuelve a guardar con el formato que necesitas, detén la grabadora de macros, listo ya tienes una nueva macro para guardar con punto y coma y el formato que necesitas.

E spero que alguna de las opciones te funcione.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas