Macro en txt separado por comas + nombre hoja

He estado buscando en otras preguntas, pero ninguna consigue resolver mi casuística y no he sabido adaptarlas a ella.
- Necesito una macro que exporte una sola hoja de excel a .txt separando los campos por comas, pero únicamente los campos predefinidos o los que yo seleccione, no todos los de la hoja.

- Por otro lado, necesito que el archivo se guarde con el mismo nombre que el de la hoja y que este nombre lo pueda cambiar desde un cuadro de texto.

¡Se agradece mucho la ayuda!

Añado imagen del resultado final deseado:

1 Respuesta

Respuesta
1

Prueba esto y lo vamos actualizando:

Sub GuardarTxt()
'Por.Dante Amor
  Dim FileNum As Long
  Dim ruta As String, arch As String, car As String
  Dim dato As Variant
  Dim i As Long, j As Long, k As Long, largo As Long, uc As Long
  '
  FileNum = FreeFile()
  ruta = ThisWorkbook.Path & "\"
  arch = ActiveSheet.Name & ".txt"
  Open ruta & arch For Output As #FileNum
  For i = 2 To Range("A" & Rows.Count).End(3).Row
    uc = Cells(i, Columns.Count).End(1).Column
    For j = 1 To uc
      dato = Cells(i, j)
      largo = Len(dato)
      For k = 1 To largo
        car = Mid(dato, k, 1)
        Print #FileNum, car;  'poner caracteres
      Next
      If j = uc Then
        Print #FileNum, ;    'poner campo
      Else
        Print #FileNum, ","; 'poner campo
      End If
    Next
    Print #FileNum,          'poner fila
  Next
  Close #FileNum
  '
  MsgBox "Txt generado"
End Sub

Después de probarlo decir que va bien encaminado, pero falta algún retoque.

Por si te puede ayudar, especifico un poco más mi casuística:

- Los 3 primeros valores que aparecen al principio (A2:C2), siempre serán los mismos y en el mismo lugar. Por si lo quieres dejar predefinido en la macro al generar el .txt y así no aparecer en la hoja Excel. Mi intención era simplemente ocultar la fila 2 con dicho texto ya introducido. 

- Solo se entrarán dos longitudes de valores, de 6 o 23 caracteres. Estos se irán introduciendo de forma aleatoria en las filas.

- Al generar el TXT con el código de prueba, en lugar de 6, muestra 5. Es decir, falta una “,” después de “60000”, como se ve en la imagen que adjunté anteriormente.

- Cambiando el nombre de la celda se cambia el nombre del archivo guardado. Perfecto. Solo falta poder introducir el nombre desde el Cuadro de texto “Private Sub TextBox1_Change()”.

Dante Amor se nota tu experiencia y nivel, gran trabajo, gran ayuda.

H o l a Adan Pulido y bienvenido a TodoExpertos.


Supongo que tu textbox es un Control ActiveX.

No entiendo para qué el evento “Private Sub TextBox1_Change()”.


Tampoco entiendo para qué un textbox, puedes poner el nombre del archivo simplemente en una celda, pero el código va a tomar el nombre del textbox1.


Captura el nombre en el textbox1 y ejecuta la siguiente macro.

Sub GuardarTxt()
'Por.Dante Amor
  Dim FileNum As Long
  Dim ruta As String, arch As String
  Dim dato As Variant
  Dim i As Long, j As Long, n As Long, uc As Long
  '
  FileNum = FreeFile()
  ruta = ThisWorkbook.Path & "\"
  arch = ActiveSheet.TextBox1.Value & ".txt"
  Open ruta & arch For Output As #FileNum
  For i = 2 To Range("A" & Rows.Count).End(3).Row
    n = WorksheetFunction.CountA(Range(Cells(i, "G"), Cells(i, "W")))
    Select Case True
      Case i = 2: uc = 3
      Case n = 0: uc = 6
      Case Else:  uc = 23
    End Select
    For j = 1 To uc
      dato = Trim(Cells(i, j).Value)
      If j = uc Then
        Print #FileNum, dato;       'poner campo
      Else
        Print #FileNum, dato; ",";  'poner campo
      End If
    Next
    Print #FileNum,                 'poner fila
  Next
  Close #FileNum
  '
  MsgBox "Txt generado"
End Sub

Al final de mi respuesta hay un botón para valorar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas