Extraer filas de un Bloc de notas con VBA

Tengo un bloc de notas en mi escritorio con datos en varias filas tengo un userform muy simple solo con un Combobox1. Lo que me gustaría lograr es que mi Combobox1 aparezca cada fila de mi bloc de notas.

Algunos ejemplos de la info que tiene mi bloc de notas:

Lima 400 Version. 08

Lima 401 Version. 09

Lima 405 Version. 10

Lima 417 Version. 11

...

En mi Combobox1 debe aparecer solo debe agregarse por cada fila

400

401

405

417

...

Extraerde cada fila el valor entre los espacios solamente. Algún apoyo con este problema

3 Respuestas

Respuesta
2

He visto tu comentario así que he venido a aportar lo que pueda.

Hay varias formas de leer un archivo TXT, no se por que los otros compañeros se complicaron para explicarlo, no necesitas cargarlo a la hoja. VBA tiene un par de trucos bajo la manga para leer archivos TXT y cargarlos a la memoria y posteriormente a un Array, que es mi forma favorita y como lo he hecho para ti.

Ahora bien, esta macro dependerá de un par cosas para que funcione que no explicas en tu pregunta:

1. Las lineas siempre comenzaran igual, con la palabra Lima

2. Lo que quieres extraer es un numero que viene después de la palabra "Lima"

3. El numero que quieres extraer es siempre de 3 dígitos

NOTA: En mis pruebas de rendimiento, usé 368 lineas en el archivo TXT, el combobox se carga con las 368 lineas al instante en milisegundos, el rendimiento está bien, los bucles por Arrays siempre son rápidos.

Dicho esto, aquí el código (en el evento Initialize del UserForm, haz tus ajustes, cambia la ruta del archivo):

Private Sub UserForm_Initialize()
Dim i As Integer
Dim FSO As Object, archivo As Object, ruta As String, lineas As Variant
ruta = "C:\Users\andym\Desktop\prueba.txt" 'cambia la ruta
Set FSO = CreateObject("Scripting.FileSystemObject")
Set archivo = FSO.OpenTextFile(ruta, 1)
lineas = Split(archivo.ReadAll, vbNewLine)
For i = LBound(lineas) To UBound(lineas)
    Me.ComboBox1.AddItem Mid(lineas(i), 6, 3)
Next i
End Sub

Andy M

¡Gracias! Me quedo Excelente su código. Gracias nuevamente. 

Si me ayudarías con eso del Slipt por espacios y así tener una idea más clara de como funciona esa función je je ... bueno que descansen muchas gracias.

Claro, la función Split() separa un string por un delimitador (opcional). La sintaxis seria la siguiente:

Split(string, delimitador(opcional))

Si omites el delimitador, por defecto se usara el "espacio". Ejemplo:

Split("Lima 400 Version. 08")

Recibiras un array con los siguientes items

-Lima

-400

-Version.

-08

Así que solo habría que crear un algoritmo que analice cada uno de esos items y vea cual es el más parecido al dato que quieres extraer.

Respuesta
1

[Hola

Si tu archivo es del tipo *.txt "común" (¡Y sin encabezados!), la extracción de una sola columna de datos no es cosa fácil y además tienes que saber usar archivos schema.ini, además de ADO:

http://www.mvp-access.es/softjaen/articulos/texto/jet_text_isam.htm

Como quizá te compliques, yo sugiero que uses Power Query para extraer los datos solo de la columna que te interesa y una vez en una hoja pues ya con los datos en las celdas llenas tu Combobox, si usas la grabadora de macros podrás tenerlo en macro.

No me refiero a extraer una columna sino en un combobox darme cada fila como dato ya de esa fila con alguna función la podría extraer el texto del centro.

Se puede reconocer las filas en el bloc de notas y ponerlas en un Combobox1? 

Si tus datos son todos tal cual has mostrado, la propuesta de Andy es rápida y simple.

¡Gracias! A usted también Abraham Me hizo descubrir un nuevo concepto y estaré investigando sobre ese tema que me parece interesante.

Respuesta
-1

Crea una macro que te importe los datos a excel y luego en excel extraes la información.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas