Pasar .txt a ListBox Excel VBA 2013

Recientemente recibí ayuda en este foro para completar la tarea de importar el contenido de un archivo .txt ubicado en una carpeta a un UserForm (ListBox1).

Funcionó perfecto hasta que me encontré con el siguiente problema:

El siguiente código "lee" renglón por renglón del .txt y lo pasa al ListBox, pero cuando encuentra un renglón con demasiados datos, no lo puede importar...

Este es el código.

Mi amigo Dante, si lo ves, te será conocido:

socio_r = String(8 - Len(socio_r), "0") & socio_r

ListBox1.Clear
On Error Resume Next
Dim LineofText As Variant
Dim archivo As Variant
' Open the file for Input.
Open "O:\memo\" & socio_r & ".TXT" For Input As #1
archivo = "O:\memo\" & socio_r & ".TXT"
If Dir(archivo) = "" Then
MsgBox "No se encontraron observaciones para el socio: " & TextBox70.Text, vbInformation
Application.ScreenUpdating = True
Exit Sub
End If
Open archivo For Input As #1
' Read each line of the text file into a single string
' variable.
Do While Not EOF(1)
Line Input #1, LineofText
ListBox1.AddItem LineofText
Loop
' Close the file.
Close #1

1 respuesta

Respuesta
1

La longitud máxima en una línea del listbox es de 248 caracteres, pero se pueden cargar hasta 247 caracteres.

Referencia: http://www.know-access.com/view/155641-listbox-value-list-limit-limitations-2048-characters-.html 

Lo que podemos hacer es cortar la cadena y cargar solamente 247 caracteres:

Cambia esta línea

ListBox1. AddItem LineofText

Por estas

LineofText = Left(LineofText, 2047)
ListBox1. AddItem LineofText

Estimado Dante, no puedo encontrar un pedido de aclaración que te envié. Al parecer no se cargó. Con la modificación sugerida, persiste el problema. Deja de importar líneas de texto cuando encuentra la línea extensa dentro del .txt, hay alguna otra sugerencia?

Gracias..!

Intenta cargar menos longitud de línea, por ejemplo: pon estas líneas

LineofText = Left(LineofText, 1000)
ListBox1. AddItem LineofText

Dante, lo he probado sin éxito. Cuando llega a la línea extensa, termina el loop. Lo probé hasta con 100 caracteres y hace lo mismo.

Do While Not EOF(1)
Line Input #1, LineofText
LineofText = Left(LineofText, 100)
ListBox1.AddItem LineofText
Loop
' Close the file.
Close #1

Quita esta línea de la macro

On Error Resume Next

Vuelve a ejecutar la macro, me dices en qué línea se detiene y qué mensaje de error te envía

Al desactivar "On Error Resume Next" continúa funcionando igual, es decir, el código no se detiene, pero no importa todas las líneas del .txt al ListBox (sólo el contenido hasta que encuentra la línea extensa).

Como verás más abajo, puse un código para que me muestre esa línea cuando la encuentre y lo hace, y allí da por terminado el loop. (????) 

'On Error Resume Next
Dim LineofText As Variant
Dim archivo As Variant
' Open the file for Input.
Open "O:\memo\" & socio_r & ".TXT" For Input As #1
archivo = "O:\memo\" & socio_r & ".TXT"
If Dir(archivo) = "" Then
MsgBox "No se encontraron observaciones para el socio: " & TextBox70.Text, vbInformation
Application.ScreenUpdating = True
Exit Sub
End If
Open archivo For Input As #1
' Read each line of the text file into a single string
' variable.
Do While Not EOF(1)
Line Input #1, LineofText
LineofText = Left(LineofText, 2047)
ListBox1.AddItem LineofText
If LineofText > Left(LineofText, 1000) Then
MsgBox LineofText
End If
Loop
' Close the file.
Close #1

Te cambio la forma de cargar en el listbox, probé con una línea de 18,000 caracteres y pude cargar 2047 caracteres.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Application.ScreenUpdating = False
    archivo = "C:\trabajo\varios\a1.txt"
    If Dir(archivo) = "" Then Exit Sub
    '
    Workbooks.OpenText Filename:=archivo, Origin:=xlMSDOS, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=False, _
        Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
        TrailingMinusNumbers:=True
    Set l2 = ActiveWorkbook
    '
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        ListBox1.AddItem Left(Cells(i, "A"), 2047)
    Next
    '
    l2.Close False
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas