Rellenar ListBox con datos de varias hojas.

22/09/2007 - 17:37 por ~ jose ~ | Informe spam
Hola, que tal?
Como puedo rellenar un ListBox1 con los datos de todas las hojas de un
libro menos de la primera?.
Para rellenar los datos de una hoja empleo estas celdas:
("c6:e" & Range("b6").End(xlDown) + 5)

Venga, gracias y un saludo,
jose

Preguntas similare

Leer las respuestas

#16 Héctor Miguel
24/09/2007 - 00:48 | Informe spam
hola, jose !

Mostrar la cita
1) el que no te muestre la fila 6 [primera del archivo .CSV que se genera correctamente segun confirmas, y hasta donde se]...
se debe a que las maquinarias de consulta a bases de datos *asumen* [por omision] que el primer registro son los *titulos*
y para poder *administrar* este parametro necesitas *cambiar de proveedor* modificando las siguientes dos partes de la macro:

a) la linea que establece la conexion:

-> de:
Conexion.Open _
"Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"DBQ=" & Ruta & ";Extensions=asc,csv,tab,txt;"

-> a:
Conexion.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Ruta & _
"\;Extended Properties=""text;HDR=No;FMT=Delimited"""

b) la linea que *abre* [o hace uso de la conexion para abrir] el *RecordSet*

-> de:
Registros.Open Consulta, Conexion, adOpenForwardOnly, adLockReadOnly, adCmdText

-> a:
Registros.Open Consulta, Conexion, adOpenStatic, adLockReadOnly, adCmdText

2) el resto de las *fallas* que comentas:
- la omision de la *utima* fila de la primera hoja -65536-
- la omision de los registros/filas de todas las hojas siguientes
- que todos los registros se muestran en *una sola columna* -y separados por comas-
-> *me hace suponer* que [probablemente]...
o... en tu configuracion regional el separador de listas y argumentos NO es la coma
o... tendrias que modificar la EXTenxsion del archivo de .CSV a .TXT
o... tendrias que modificar la linea con la instruccion que hace la carga del RecordSet al ListBox [p.e.]
de: -> .Column = Registros.GetRows
a: -> .List = Registros.GetRows

3) es probable que necesites hacer pruebas *combinando* las posbilidades anteriores y comentar los resultados -?-
esto, porque he probado con una segunda hoja llena hasta la fila 65536 y otra con solo 10 filas y... *sin problemas* ;)

o [si lo prefieres] puedes consultar temas relacionados con el uso da ADO y la obtencion de datos externos [p.e.] desde:

Como abrir archivos de texto delimitado que utilizan el texto IIsam del proveedor Jet
http://support.microsoft.com/kb/q262537/
-> Microsoft Active Data Objects y Microsoft ADO Ext.2.x for DDL and Security

otras fuentes de informacion:
-> http://tinyurl.com/2ejcmp [http://preview.tinyurl.com/2ejcmp]

-> Carl Prothman
ODBC Driver for TextFiles
http://www.carlprothman.net/Default.aspx?tabid#ODBCDriverForText
OLEDB Provider for Microsofr Jet TextFiles
http://www.carlprothman.net/Default.aspx?tabid‡#OLEDBProviderForMicrosoftJetText

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
#17 Ivan
24/09/2007 - 01:53 | Informe spam
hola chicos,

Mostrar la cita
aparte de la propuesta de Hetor, y aunque a lo mejor es una salida de
'pata de banco' (y ademas no tengo ni idea sobre el tema)

¿y un Spreadsheet no podria hacer el apaño?

como digo no tengo ni idea de como se carga, pero tengo entendido que
acepta muchas mas filas

bueno solo como idea

un saludo
Ivan
#18 Héctor Miguel
24/09/2007 - 07:28 | Informe spam
hola, chicos !

Mostrar la cita
[bueno... como suelo decir]... tal parece que todo tiene sus *pros* y sus *contras* :-((

algunos comentarios en seguida y... si cualquier duda [o informacion adicional]... comenta/s/n ?
saludos,
hector.

1) la propuesta del listbox, aunque tiene su lentitud en la generacion de los archivos de texto...
funciona *aceptablemente bien* [incluso] desde la version '97 ;)

2) los objetos SpreadSheet [de las librerias OWC - Office Web Components]
a) [de entrada] ya requieren de una version minima de office/excel 2000 [OWC v-9.0] en adelante
b) en la version *minima* [2000] SI tienen un *limite* en sus filas de... [adivina] -> 65536 :((
no corri pruebas en versiones posteriores [por si alguien se decide a hacer lo propio] :))

3) en todo caso, el codigo que *debiera* funcionar [a excepcion de lo comentado para la version 2000] es:

Private Sub UserForm_Activate()
Dim n As Byte, Filas As Long, Base As Long: Base = 1
With ThisWorkbook
For n = 2 To .Worksheets.Count
With .Worksheets(n)
Filas = .Range("b6").End(xlDown).Row - 5
Me.Spreadsheet1.ActiveSheet _
.Range("a" & Base & ":c" & Base + Filas - 1).Value = _
.Range("c6:e" & Filas + 5).Value
End With
Base = Base + Filas
Next
End With
End Sub

notas:
1) no se puede usar en el evento '_initialize', puesto que como el formulario aun no es mostrado
-> el objeto Spreadsheet1 [obviamente] no tiene aun una *ActiveSheet*
2) si el formulario se presenta como *No Modal*, habria que cuidar de los re/disparos del evento '_activate'
3) falta *darle forma* [visualmente] al control Spreadsheet y *administrar* algunas de sus propiedades [como]:
- si se quiere [o no] mostrar los encabezados [fila/columna], los menus, si sera *editable*, etc. etc. etc.
#19 Ivan
24/09/2007 - 16:08 | Informe spam
hola Hector,

no se si le servira a OP (entre las limitaciones que comentas mas por
lo que me ha parecido que no admite mas de 260000 (aprox) registros
(uffff)) pero yo tenia ganas de saber un poco mas sobre este control y
esto podria abrir la veda. La verdad es que tu codigo es muy rapido
(me ha cargado 200000 +/- en 2/3 segundos).

aunque ahora no tengo tiempo,si no te importa, y espero que con el
permiso de OP, me gustaria consultarte algunas cosillas sobre este
control y sobre unos problemillas que me han surgido al intentar
preparar otra propuesta con un listbox

si puedo esta tarde/noche te las envio por aqui

un saludo y gracias por lo que me toca
Ivan
#20 ~ jose ~
24/09/2007 - 22:40 | Informe spam
Hola chicos, que hay?

hector he estado probando todo lo que me has dicho pero sin resultado
del todo satisfactorio.
He modificado el código como propones, haciendo pruebas por partes,
quiero decir que modificaba una parte del código y probaba, modificaba
la otra parte que proponias y probaba. He cambiado la extensión csv
por la de txt, también donde dice xlCSV por xlTEXT para guardar el
archivo en este formato, he cambiado el separador de listas que tenia
";" por ",", he reiniciado el pc por si acaso no lo habia pillado
bien, en fin... muchas muchas pruebas y lo más que he conseguido es
que me muestre todo el contenido (que no es poco) pero en una sola
columna no en tres. Esto lo he conseguido reemplazando esas dos partes
de código qeu decias en tu post anterior, PERO hay una pega. Como ya
comentaba antes (creo) tengo muchas celdas que están vacias, de la
primera columna siempre hay algún dato de las otras dos hay muchisimas
que no tienen datos, si hago pruebas así no me muestra el contenido
bien, pero si relleno todas las celdas vacias me muestra todo el
contenido desde la primera fila hasta la última, lo unico, eso, que me
muestra todo en una columna separado por comas.

Sobre el Spreadsheet decirte que en excel 2003 y el control MO
Spreadsheet 11 el nº de filas son 262144.

Sobre los enlces que propones, la verdad no lo he mirado, están casi
todos en inglés y no me entero de mucho, pero si me dices que por
cojones tengo que probarlos ya me intentaré apañar con algún
traductor.

Tengo una idea, ya que tengo problemas con el separador de listas, se
podría pasar cada una de las hojas a un archivo Access y después
recuperar todo el contenido en el listbox, vamos, lo que hacemos con
el csv pero con el Access. Quizás es mejor?

Bueno, muchas gracias y un saludo, vale?
jose

PD: la prueba que me dices que te funcionó, me puedes madar el archivo
por e-mail?
Ads by Google
Search Busqueda sugerida