Saltar al contenido

Modulo VBA exporta txt no funciona al cambiar celda origen tabla


CORSAIR620

Recommended Posts

publicado

Buenos dias,

 

Tengo un modulo en VBA que me coge una tabla y me la exporta a txt por Tabulaciones.

Funciona perfectamente siempre que la tabla empiexe en la celda "A1".

El problema es que cuando quier por ejemplo que la tabla empieze a partir de "C10" y lo indico en la fila que cuenta filas y columnas no funciona.

El codigo que uso es el siguiente:

Sub ASM()

    Dim NombreArchivo, RutaArchivo As String
    Dim obj As FileSystemObject
    Dim tx As Scripting.TextStream
    Dim Ht As Worksheet
    Dim i, j, nFilas, nColumnas As Integer
    
    NombreArchivo = "pedidos"
    RutaArchivo = "C:\IMPORTA_PEDIDOS\IMPORTA_ASM" & "\" & NombreArchivo & ".txt"
    
    Set Ht = Worksheets("CARGA_ETIQUETAS")
    Set obj = New FileSystemObject
    Set tx = obj.CreateTextFile(RutaArchivo)
      
    nColumnas = Ht.Range("A1", Ht.Range("A1").End(xlToRight)).Cells.Count
    nFilas = Ht.Range("A1", Ht.Range("A1").End(xlDown)).Cells.Count
    
    For i = 1 To nFilas
    
        For j = 1 To nColumnas
                
            tx.Write Ht.Cells(i, j).Value
            If j < nColumnas Then tx.Write vbTab
                
        Next j
                
        tx.WriteLine
    
    Next i
    
    tx.Close
    
    Set obj = Nothing
    
    MsgBox "El txt creado con exito..."

End Sub

Estando la tabla en A1 funciona prefectamente tal y como en el adjunto TABLA EN A1

een cambio si la muevo a C10 me sale totalmente descuadrado, con filas vacias por encima y se come parte de las columnas tal como el adjunto TABLA EN C10.

Lo unico que de moneto he cambiado es la primera posicion de la tabla, es decir:

    nColumnas = Ht.Range("C10", Ht.Range("C10").End(xlToRight)).Cells.Count
    nFilas = Ht.Range("C10", Ht.Range("C10").End(xlDown)).Cells.Count

Pero el resultado no es el deseado. Alguna solucion de como indicar correctamente el inicio de la tabla??

Ya me estoy volviendo un poco loco.

Muchas gracias, saludos.

 

 

TABLA EN A1.txt TABLA EN C10.txt

publicado

Adjunto Excel.

Asi funciona bien, el problema esta al situar la tabla por ejemplo en C10.

los datos los recoge de un .txt que se baja de Magento. Se carga la tabla a traves de PowerQuery y en la barra de herramientas esta los distintos transportistas a los que enviar el txt por tabulaciones.

Si pongo que cargue la tabla añadiendo columnas y filas dejandola en C10 es cuando se va todo al traste.

Gracias, un saludo.

CARGA_ETIQUETAS_v2.xlsm

publicado

Así debería funcionar, este donde esté la tabla.

Option Explicit
Sub ASM()
    Dim NombreArchivo, RutaArchivo As String
    Dim obj As FileSystemObject
    Dim tx As Scripting.TextStream
    Dim Ht As Worksheet
    Dim i, j, iFila, iColumna, uFila, uColumna
    
    NombreArchivo = "pedidos"
    RutaArchivo = "C:\IMPORTA_PEDIDOS\IMPORTA_ASM" & "\" & NombreArchivo & ".txt"
    'RutaArchivo = ThisWorkbook.Path & "\" & NombreArchivo & ".txt"
    Set Ht = Worksheets("CARGA_ETIQUETAS")
    Set obj = New FileSystemObject
    Set tx = obj.CreateTextFile(RutaArchivo)
    With Ht.ListObjects("export_pedidos")
      pFila = .ListRows(1).Range.Row
      pColumna = .ListColumns(1).Range.Column
      uFila = pFila + .DataBodyRange.Rows.Count - 1
      uColumna = pColumna + .DataBodyRange.Columns.Count - 1
      For i = pFila To uFila
          For j = pColumna To uColumna
              tx.Write Ht.Cells(i, j).Value
              If j < uColumna Then tx.Write vbTab
          Next j
          tx.WriteLine
      Next i
    End With
    tx.Close
    Set obj = Nothing
    MsgBox "El txt creado con exito..."
End Sub

 

publicado

Muchas gracias por la respuesta, lo he ejecutado y me dice que no se ha definido la variable.

pFila = .ListRows(1).Range.Row

Ademas otra observacion, me gustaria indicarle donde empieza la tabla ya que quiero insertar una arriba de ella, pero que no la exporte a txt. tan solo la tabla que le diga donde empieza, por ejemplo la que empieza en C10 o C30, ya que encima iria otra tabla.

Gracias, saludos.

publicado

Modifica la línea:

Dim i, j, iFila, iColumna, uFila, uColumna

por

Dim i, j, pFila, pColumna, uFila, uColumna

Ya te he comentado que solo trata la tabla export_pedidos, la pongas donde la pongas

publicado
hace 30 minutos , Antoni dijo:

Modifica la línea:

Dim i, j, iFila, iColumna, uFila, uColumna

por

Dim i, j, pFila, pColumna, uFila, uColumna

Ya te he comentado que solo trata la tabla export_pedidos, la pongas donde la pongas

Funciona perfecto, de escandalo, muchisimas gracias.

Lo unico que necesitaria es que me generara tambien los encabezados de la tabla.

Cambio a realizar?

Muhas gracias, saludos

publicado
hace 23 minutos , Antoni dijo:

Modifica esta línea:

      pFila = .ListRows(1).Range.Row

por:

      pFila = .ListRows(1).Range.Row - 1

 

Se me come la ultima linea. ?

publicado

Perdón, ahora si:

Option Explicit
Sub ASM()
    Dim NombreArchivo, RutaArchivo As String
    Dim obj As FileSystemObject
    Dim tx As Scripting.TextStream
    Dim Ht As Worksheet
    Dim i, j, iFila, iColumna, uFila, uColumna
    
    NombreArchivo = "pedidos"
    RutaArchivo = "C:\IMPORTA_PEDIDOS\IMPORTA_ASM" & "\" & NombreArchivo & ".txt"
    'RutaArchivo = ThisWorkbook.Path & "\" & NombreArchivo & ".txt"
    Set Ht = Worksheets("CARGA_ETIQUETAS")
    Set obj = New FileSystemObject
    Set tx = obj.CreateTextFile(RutaArchivo)
    With Ht.ListObjects("export_pedidos")
      pFila = .ListRows(1).Range.Row
      pColumna = .ListColumns(1).Range.Column
      uFila = pFila + .DataBodyRange.Rows.Count - 1
      uColumna = pColumna + .DataBodyRange.Columns.Count - 1
      For i = pFila - 1 To uFila '<-----------------------
          For j = pColumna To uColumna
              tx.Write Ht.Cells(i, j).Value
              If j < uColumna Then tx.Write vbTab
          Next j
          tx.WriteLine
      Next i
    End With
    tx.Close
    Set obj = Nothing
    MsgBox "El txt creado con exito..."
End Sub

 

publicado
hace 27 minutos , Antoni dijo:

Perdón, ahora si:

Option Explicit
Sub ASM()
    Dim NombreArchivo, RutaArchivo As String
    Dim obj As FileSystemObject
    Dim tx As Scripting.TextStream
    Dim Ht As Worksheet
    Dim i, j, iFila, iColumna, uFila, uColumna
    
    NombreArchivo = "pedidos"
    RutaArchivo = "C:\IMPORTA_PEDIDOS\IMPORTA_ASM" & "\" & NombreArchivo & ".txt"
    'RutaArchivo = ThisWorkbook.Path & "\" & NombreArchivo & ".txt"
    Set Ht = Worksheets("CARGA_ETIQUETAS")
    Set obj = New FileSystemObject
    Set tx = obj.CreateTextFile(RutaArchivo)
    With Ht.ListObjects("export_pedidos")
      pFila = .ListRows(1).Range.Row
      pColumna = .ListColumns(1).Range.Column
      uFila = pFila + .DataBodyRange.Rows.Count - 1
      uColumna = pColumna + .DataBodyRange.Columns.Count - 1
      For i = pFila - 1 To uFila '<-----------------------
          For j = pColumna To uColumna
              tx.Write Ht.Cells(i, j).Value
              If j < uColumna Then tx.Write vbTab
          Next j
          tx.WriteLine
      Next i
    End With
    tx.Close
    Set obj = Nothing
    MsgBox "El txt creado con exito..."
End Sub

 

Funciona perfecto.

Muchas gracias!!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.