Grabar archivo txt

Hola.
Desde ya muchas gracias por tu atención.
Mi duda es muy elemental.
De la web copié un código en Vb para excel, que lee las celdas seleccionadas y las graba por renglón en un archivo txt sin comas ni nada que separe cada campo.
Si bien es lo que necesito, el archivo de salida desde longitud variable, dependiendo del tamaño de los campos.
Lo que necesito es hacer que los registro sean todos iguales. He logrado formatear los campos numéricos para que agregue ceros a la izquierda completando el largo requerido, pero no puedo lograr que un campo del tipo string me deje espacios a la derecha para alcanzar el largo que quiero.
Por si no soy claro pongo un ejemplo
Celda A1 345
Celda A2 juan perez
Celda A3 DNI
Lo que graba es
0000000345Juan PerezDNI
Y necesito que grabe
0000000345Juan Perez DNI
Desde ya muchas gracias por su atención.
Saludos
Antonio

1 Respuesta

Respuesta
1
Tendría que ver el código que tienes para ver si se puede.
Gracias por responder.
Te envío el código.
Public Sub ExportToTextFile(FName As String, Sep As String, SelectionOnly As Boolean)
        Dim WholeLine As String
        Dim FNum As Integer
        Dim RowNdx As Long
        Dim ColNdx As Integer
        Dim StartRow As Long
        Dim EndRow As Long
        Dim StartCol As Integer
        Dim EndCol As Integer
        Dim CellValue As String
        Application.ScreenUpdating = False
        On Error GoTo EndMacro:
        FNum = FreeFile
        If SelectionOnly = True Then
            With Selection
                StartRow = .Cells(1).Row
                StartCol = .Cells(1).Column
                EndRow = .Cells(.Cells.Count).Row
                EndCol = .Cells(.Cells.Count).Column
            End With
        Else
            With ActiveSheet.UsedRange
                StartRow = .Cells(1).Row
                StartCol = .Cells(1).Column
                EndRow = .Cells(.Cells.Count).Row
                EndCol = .Cells(.Cells.Count).Column
            End With
        End If
        Open FName For Output Access Write As #FNum
        For RowNdx = StartRow To EndRow
            WholeLine = ""
            For ColNdx = StartCol To EndCol
                If Cells(RowNdx, ColNdx).Value = "" Then
                    CellValue = Chr(34) & Chr(34)
                Else
                If ColNdx = 1 Then
                   CellValue = Application.WorksheetFunction.Text(Cells(RowNdx, ColNdx).Value, Cells(RowNdx, ColNdx).NumberFormat)
                   CellValue = Format(CellValue, "0000000000")
                End If
                If ColNdx = 2 Then
                   CellValue = Application.WorksheetFunction.Text(Cells(RowNdx, ColNdx).Value, Cells(RowNdx, ColNdx).NumberFormat)
                   CellValue = Format(CellValue, "0000000000000000000000000000000")
                   End If
                If ColNdx > 2 Then
                   CellValue = Application.WorksheetFunction.Text(Cells(RowNdx, ColNdx).Value, Cells(RowNdx, ColNdx).NumberFormat)
                   End If
                End If
                WholeLine = WholeLine & CellValue & Sep
            Next ColNdx
            WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
            Print #FNum, WholeLine
        Next RowNdx
EndMacro:
        On Error GoTo 0
        Application.ScreenUpdating = True
        Close #FNum
    End Sub
    Sub test()
        ExportToTextFile ThisWorkbook.Path & "\test.txt", "", True
    End Sub
Por supuesto aún no está terminado pero solucionando lo de la consulta, podría seguir.
Saludos
Antonio
Prueba utilizando Space(TuCantidad).
Si no te molesta, podrías poner un ejemplo de como se usa esa función
Gracias
CellValue = Application.WorksheetFunction.Text(Cells(RowNdx, ColNdx).Value, Cells(RowNdx, ColNdx).NumberFormat) & Space(10)
Gracias, pero pensaba que lo estaba utilizando mal, en realidad lo que hace la función space(xx) es agregar xx espacios al campo, y lo que yo necesito es que el campo tenga en total xx espacios.
De todas maneras ya lo resolví.
Muchas gracias.
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas