Duda con macro exportar rango celdas de excel a txt

Estoy con una macro para exportar un rango de celdas de excel a txt, he conseguido montarla, pero solo consigo que me exporte una celda, no sé cómo decirle que abarque todo el rango de columnas y todas las filas mientras existan datos. Os pego el código:

Sub Exporta_txt ()

Dim Archivo As integer

Archivo = Freefile

Open "Prueba.txt" For Output As #Archivo

uf= Range("B" & Rows.Count).End(xlUp).Row

With Sheets("Hoja1")

Print #Archivo, .Range("B7:AB7" & uf)Close #ArchivoEnd WithEnd SubEl rango de celdas que quiero pasar a txt es desde B7 hasta AB7 y que me pase a txt todas las filas a partir de ahí mientras existan datos. Si pongo B7:AB7 etc me da error, y si solo pongo B7, solo me pasa a txt esa celda. ¿Alguna sugerencia de dónde tengo el error?
Respuesta
1

1 respuesta más de otro experto

Respuesta
1

Revisa si esto te ayuda:

Sub ExportarHojaTxt()
'Por.Dante Amor
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Sheets("Hoja1").Copy
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Prueba.txt", FileFormat:=xlText
    ActiveWorkbook.Close False
End Sub

De lo contrario vas a tener que explicar exactamente cómo quieres la salida, algún formato especial para cada columna, cómo debe ir la separación de cada campo: espacios, tabulador...?

Hola, Dante! Ya lo he probado y se crea el txt perfectamente, el problema es que se crea el txt de toda la hoja, y la tabla que intento pasar está entre las columnas B7 y AB7 y de ahí hasta el resto de filas que tengan datos. Lo conseguí hacer con Print #Archivo, .Range("B7").Close pero solo se me copia esa celda (la B7) al txt, y si le pongo B7:AB7 me da error... y no sé cómo decirle que me pase esas columnas hasta la última fila con datos. Gracias!

Prueba lo siguiente:

Sub ExportarHojaTxt()
'Por.Dante Amor
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Dim lr As Long
    With Sheets("Hoja1")
      lr = .Range("B:AB").Find("*", , xlValues, , xlByRows, xlPrevious).Row
      .Range("B7:AB" & lr).Copy
      Workbooks.Add
      Range("A1").PasteSpecial xlPasteValues
      Cells.EntireColumn.AutoFit
    End With
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Prueba.txt", FileFormat:=xlText
    ActiveWorkbook.Close False
End Sub

Hola, Dante.

Se crea ya el txt perfecto, he entendido cómo haces para recorrer las filas, pero tengo un problema con las columnas que están en formato fecha de ese rango, he creado un excel nuevo y he importado el txt para comprobar que todo estuviera OK, solo me encuentro con ese problema, y es que las fechas no conservan el formato... Salen así: 43956

Se puede modificar eso? Gracias!

Prueba esto, si la fecha en la hoja1 está en la columna F, entonces en la macro pones "E:E". Si la fecha está en "N", entonces en la macro "M", y así.

Sub ExportarHojaTxt()
'Por.Dante Amor
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Dim lr As Long
    With Sheets("Hoja1")
      lr = .Range("B:AB").Find("*", , xlValues, , xlByRows, xlPrevious).Row
      .Range("B7:AB" & lr).Copy
      Workbooks.Add
      Range("A1").PasteSpecial xlPasteValues
      Range("E:E").NumberFormat = "mm/dd/yyyy"
      Cells.EntireColumn.AutoFit
    End With
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Prueba.txt", FileFormat:=xlText
    ActiveWorkbook.Close False
End Sub

Me pongo a ello! He entendido la lógica, entonces para las fechas sería eso, y para las celdas que normalmente tengo que son 120,1 y al crear el txt me aparece 120.1?

Qué le tendría que poner? me he dado cuenta ahora que también me falla ahí...

Gracias de antemano!

Revisa en Windows / Panel de Control / Configuración regional y de idioma, que tengas el separador de decimales en coma (, )

Y en las Opciones de excel / Avanzadas / Usar separadores del sistema

Hola, Dante.

Ya lo revisé todo y está correcto, no sé dónde puede estar el problema...

Ya me acordé, hay que activar el parámetro: Local:=True

Reemplaza con esto:

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Prueba.txt", FileFormat:=xlText, Local:=True

Ciapo, Dante! Era eso!!!! Mil millones de gracias!!!!!

Oye, Dante. Necesito hacerte una última pregunta respecto a esto. 

Mi libro tiene Hoja1 y Hoja2. He tratado de replicar el código con Sheet("hoja2").Active pero a la hora de guardar cada uno, no sé cómo indicarle cada hoja por separado, como dice activeworkbook...

ActiveWorkbook.SaveAs

Lo siguiente guarda las hojas "Hoja1" y "Hoja2" en los archivos:

"prueba hoja1.txt" y "prueba hoja2.txt"

Sub ExportarHojaTxt()
'Por.Dante Amor
  Dim hojas As Variant, sh As Variant
  hojas = Array("Hoja1", "Hoja2")
  Application.DisplayAlerts = False
  Application.ScreenUpdating = False
  Dim lr As Long
  For Each sh In hojas
    With Sheets(sh)
      lr = .Range("B:AB").Find("*", , xlValues, , xlByRows, xlPrevious).Row
      .Range("B7:AB" & lr).Copy
      Workbooks.Add
      Range("A1").PasteSpecial xlPasteValues
      Range("E:E").NumberFormat = "mm/dd/yyyy"
      Cells.EntireColumn.AutoFit
    End With
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Prueba " & sh & ".txt", FileFormat:=xlText, Local:=True
    ActiveWorkbook.Close False
  Next
End Sub

Perfecto! Además entendí esto que pusiste aquí, muchísimas gracias!!

 ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & "Prueba " & sh & ".txt", FileFormat:=xlText, Local:=True
    ActiveWorkbook.Close False

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas