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

#21 Héctor Miguel
25/09/2007 - 00:34 | Informe spam
hola, jose !

__ 1 __
... Como ya comentaba antes (creo) tengo muchas celdas que estan vacias [...]



1) [si no me equivoco *demasiado*]... esta parte de *muchas celdas vacias* es la primera vez que lo comentas -???-

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



2) te alcanzaria perfectamente para el contenido de 4 hojas *llenas* [65531 x 4 = 262124] ;)
si en la realidad necesitaras mostrar algun contenido superior a esta cifra... -???-

__ 3 __
Sobre los enlces que propones, la verdad no lo he mirado, estan casi todos en ingles y no me entero de mucho
pero si me dices que por cojones tengo que probarlos ya me intentare apa#ar con algun traductor.



3) [creo que] no estaria *de sobra* :)) [pero vamos viendo si conseguimos evitarlos] ;)

__ 4 __
... ya que tengo problemas con el separador de listas, se podria pasar cada una de las hojas a un archivo Access
y despues recuperar todo el contenido en el listbox... lo que hacemos con el csv pero con el Access. Quizas es mejor?



4) [yo ?]... de access... me sigo considerando *todo un neofito*... ni fu... ni fa... :-((
-> si encuentras la manera de *mandar bloques* de excel a access de manera *acumulativa* [como en los OWC]
despues podrias usar el *RecordSet* de ADO para *levantar* de la tabla de access al control en vba-excel -?-

__ 5 __
PD: la prueba que me dices que te funciono, me puedes madar el archivo por e-mail?

5) lo unico que *conservo* son los conocimientos adquiridos [generalmente NO los archivos de las pruebas] :-((
si no funciona lo del pase por access... puedo volver a *armar* un ejemplo [con sus consabidas *restricciones* coma ? punto y coma ?]

saludos,
hector.
Respuesta Responder a este mensaje
#22 Ivan
25/09/2007 - 04:17 | Informe spam
hola chicos,

aqui vuelvo de nuevo, mas por vicio y por aprender que otra cosa, sobre todo por que estoy [casi] seguro que a Jose mi
propuesta no le va a interesar (entre otras cosas por que ni siquiera esta acabada, aparte de que implica 'sacrificar'
algunas filas de cada hoja), ademas de que estoy convencido (a falta de meterle mano, que se la metere seguro pronto) de
que la propuesta con el archivo de texto es mucho mejor,

he estado tanteando un poco la via del listbox 'actualizable' segun el listindex y aunque quedan varios flecos (quizas
alguno complicadillo) por lo menos parece que da el pego

se trata de cargar el listbox con:

.-si es la 1ª hoja=> los registros + los 'n' [nº de filas visibles en el listbox - 1] primeros registros de la
siguiente (previamente copiados en la anterior, de aqui viene el prescindir de n registros + 2 por hoja)
.-si es la ultima con sus registros mas el ultimo de la anterior insertado previamente en la fila 6
.-si es intermedia con ambas cosas

e ir renovandolo al llegar al ultimo /primer registro.(de momento lo hago en mouseUp ).

esta probado con 3 hojas. Las 2 primeras hasta la fila 65524 y la utima con varios cientos menos y el cambio entre
listas apenas es perceptible

algunos de los problemas que quedan por resolver serian:

1º controlar las diferentes teclas de avance retroceso (no creo que sea [demasiado] dificil)

2º simular/sustituir el scrollbar del list mediante uno autonomo (dentro de un frame, por el orden z) y sincronizarlo
con el nº total de registro. Tampoco creo que sea demasiado complicado aunque si liosillo

3º el que creo me dara mas quebraderos de cabeza y directamente relacionado con el anterior, coordinar los diferntes
eventos del listbox y el scrollbar

bueno, solo por si se te/os ocurre alguna idea para el scrollbar y porque ya que esta pues al final lo pongo.

en cuanto a las dudas que te comentaba, Hector, la del listbox ya la he resuelto (los dichosos eventos) y sobre el
spreadsheet no he podido meterle mano apenas, asi que me reservo para cuando haga algunas pruebas (las uno a las que
seguro que apareceran cuando pruebe la propuesta del csv)

bueno estos son los codigos (he dejado solo lo referente al listbox, pues con el scrollbar estaba todavia muy verde)

los unicos requisitos serian que la 1ª hoja de las listas ea la 2, que la ultima fila de datos de todas las hojas(menos
la ultima) fuese 65524 y el nº de filas en el listbox 11 . Aunque se pueden modificar en las constantes del inicio,< y
por supuesto la primera fila la 6 y columnas b/c:e>

'**********************
Const F As Long = 65524, plusF As Long = 10
Dim n_Hjs As Byte
'
Sub CargarListbox()
Dim hj As Integer, ni As Long
With ListBox1
hj = Val(.Tag)
If .ListIndex = 0 And Val(.Tag) > 2 Then
hj = Val(.Tag) - 1
ElseIf .ListIndex = .ListCount - 1 And Val(.Tag) < n_Hjs Then
hj = Val(.Tag) + 1
End If
With ThisWorkbook.Worksheets(hj)
ListBox1.List = .Range("c6:e" & .[b65536].End(xlUp).Row).Value
End With
ni = ((.ListCount - 1) * -(hj < Val(.Tag)))
.ListIndex = ni + IIf(hj < Val(.Tag), -plusF, plusF)
.TopIndex = ni
.Tag = hj
End With
End Sub
'
Sub FilasExtra()
Dim n As Byte
If n_Hjs < 3 Then Exit Sub
Application.ScreenUpdating = False
With ThisWorkbook
For n = 3 To n_Hjs
.Worksheets(n).Range("b6:e" & 5 + plusF).Copy .Worksheets(n - 1).Range("b" & F + 1)
Next
n = n_Hjs - 1
Do While n > 1
.Worksheets(n).Range("b" & F & ":e" & F).Copy
.Worksheets(n + 1).Range("b6:e6").Insert xlShiftDown
n = n - 1
Loop
End With
Application.CutCopyMode = False
End Sub
'-
Sub QuitarFilasExtra()
Dim n As Byte
If n_Hjs < 3 Then Exit Sub
Application.ScreenUpdating = False
With ThisWorkbook
For n = 3 To n_Hjs
.Worksheets(n).[b6:e6].Delete xlShiftUp
Next
n = n_Hjs - 1
Do While n > 1
.Worksheets(n).Range("b" & F + 1 & ":e" & F + plusF).Delete
n = n - 1
Loop
End With
Application.CutCopyMode = False
End Sub
'--
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
With ListBox1
If .ListIndex = 0 Or .ListIndex = .ListCount - 1 Then CargarListbox
End With
End Sub
'-
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 3: .Tag = 2
End With
With ThisWorkbook
n_Hjs = .Worksheets.Count
FilasExtra
With .Worksheets(2)
ListBox1.List = .Range("c6:e" & .[b65536].End(xlUp).Row).Value
End With
End With
End Sub
'
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
QuitarFilasExtra
End Sub
'--

un saludo
Ivan

PD: la verdad es que lo de las celdas vacias tambien es una novedad por aqui
Respuesta Responder a este mensaje
#23 ~ jose ~
25/09/2007 - 20:16 | Informe spam
Hola, muy buenas,

lo primero deciros que estaba equivocado, creía que os había comentado
lo de las celdas vacías, de todas formas ya decía entre paréntesis
"creo".

El solucionar este problema mediante Access, no se ni por donde
empezar, así que lo descarto, prefiero que me vuelvas a rearmar el
código teniendo en cuenta el separador de listas, lo que pasa que me
crea una duda, y si en otro pc hay otro separador de listas?, se
podría saber mediante código que separador de listas o argumentos
tiene un pc para así aplicar un código u otro?

Sobre el pedazo de curro que se ha pegado el amigo Ivan, decir que
tiene alguna pega que otra como bien dices como por ej:
Si en la "Hoja3" hay menos de 10 filas, se interrumpe el código en
esta línea:
ListBox1.List = .Range("c6:e" & .[b65536].End(xlUp).Row).Value

De momento no es el caso pero si quisiera que al pinchar sobre alguna
línea del listbox hiciera "algo" como por ejemplo rellenarse los
textbox si pincho en la primera fila me manda a la 11 y si pinchara en
la última si que se marcaria dicha fila pero vería la siguiente página
que esto tampoco es problema eh! sólo comentaba.

Estoy pensado que si para ver las siguientes hojas de datos en el
listbox tengo que pinchar sobre la fila del listbox, bien sea la
última o la primera, que te parece si hago un par de botones
"siguiente" y "atrás". De esta forma podría hacerlos con el RowSource
y así podría poner encabezados. Dejo este código al final del mensaje
por si a alguien le interesa.

De todas formas me gustaría probar el nuevo código que pido al
principio del mensaje a Hector porque así podría mostar todos los
registros a la vez en el listbox y además aprenderíamos a exportar e
importar datos.

Muchas gracias
Un saludo
jose
Respuesta Responder a este mensaje
#24 ~ jose ~
25/09/2007 - 20:37 | Informe spam
... Dejo este código al final del mensaje por si a alguien le interesa.


Perdón, el código tiene aún errores...

Hola, muy buenas,

lo primero deciros que estaba equivocado, creía que os había comentado
lo de las celdas vacías, de todas formas ya decía entre paréntesis
"creo".

El solucionar este problema mediante Access, no se ni por donde
empezar, así que lo descarto, prefiero que me vuelvas a rearmar el
código teniendo en cuenta el separador de listas, lo que pasa que me
crea una duda, y si en otro pc hay otro separador de listas?, se
podría saber mediante código que separador de listas o argumentos
tiene un pc para así aplicar un código u otro?

Sobre el pedazo de curro que se ha pegado el amigo Ivan, decir que
tiene alguna pega que otra como bien dices como por ej:
Si en la "Hoja3" hay menos de 10 filas, se interrumpe el código en
esta línea:
ListBox1.List = .Range("c6:e" & .[b65536].End(xlUp).Row).Value

De momento no es el caso pero si quisiera que al pinchar sobre alguna
línea del listbox hiciera "algo" como por ejemplo rellenarse los
textbox si pincho en la primera fila me manda a la 11 y si pinchara en
la última si que se marcaria dicha fila pero vería la siguiente página
que esto tampoco es problema eh! sólo comentaba.

Estoy pensado que si para ver las siguientes hojas de datos en el
listbox tengo que pinchar sobre la fila del listbox, bien sea la
última o la primera, que te parece si hago un par de botones
"siguiente" y "atrás". De esta forma podría hacerlos con el RowSource
y así podría poner encabezados. Dejo este código al final del mensaje
por si a alguien le interesa.

De todas formas me gustaría probar el nuevo código que pido al
principio del mensaje a Hector porque así podría mostar todos los
registros a la vez en el listbox y además aprenderíamos a exportar e
importar datos.

Muchas gracias
Un saludo
jose
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida