Mi amigo Johan Moreno, deVenezuela y gran seguidor del blog, me realiza la siguiente consulta: necesita cargar todas las hojas de un libro en un control ListBox y permitir que el usuario seleccione una, alguna o todas esas hojas para su posterior impresión, evitando así que deban ir "saltando" de un lado al otro para llevar a cabo dicha tarea. Bueno, comencemos.
Colocamos un ListBox (control ActiveX) en la hoja de cálculos, mas precisamente en la Hoja1. Desde la ventana de propiedades le damos un nombre cualquiera (list1, en este caso) y nos fijamos bien que la propiedad Multiselect (selección múltiple) esté en: 1-fmMultiSelectMulti. Es decir que permitiremos que varios items de ese objeto puedan ser seleccionados al mismo tiempo. Y para que visualmente aún quede mejor, nos cercioramos que la propiedad ListStyle (estilo de lista) sea igual a: 1-fmListStyleOption. Nos quedará de la siguiente forma:
el ListStyle elegido nos brinda esas casillas de verificación (checkboxes) en cada ítem
[+/-] Ver el resto / Ocultar
hola damian excelente solucion exactamente lo que requeria... gracias como siempre tu valiosa ayuda...
ResponderEliminarUna ultima situacion para que me ayudes con el archivo que adjuntaste...
En el formato que adapte para tu codigo tengo hojas ocultas que el listbox me muestra como evitaria eso...
si agregro mas hojas ejemplo
hoja1
hoja3
hoja2
caracas
brasilia
buenos aires
quito
hoja4
la paz
Como haria para que el listbox me mostrara apartir de la hoja caracas por ejemplo y evitando mostrar las hojas ocultas..
Gracias Nuevamente
Dentro del bucle podrías colocar un condicional:
ResponderEliminarIf hoja.visible = true then
'codigo para imprimir la hoja.
End If
Un abrazo
Hola damian, su blog es muy bueno y quisiera solicitar ayda como hacer una macro, el problema es que tengo un menu incial con unos botones y al pinchar un boton me muestr la informacion correspondiente a ese boton y luego otro boton que me regrese al menu anterior.
ResponderEliminarEdwin: ¿necesitas hacer una ayuda "contextual", que explique al usuario que es lo que hace ese botón? Explicame mas detalladamente el tema o bien enviame el archivo al mail que figura al pié del formulario, así puedo ayudarte mejor.
ResponderEliminarUn abrazo.
Hola damian hice la recomendacion que me diste y el codigo quedo de esta manera..
ResponderEliminarSub CargarList()
'antes limpio, por las dudas:
imphoja.List1.Clear
'uso al bucle para recorrer la colección de Hojas, agregando
'el nombre de ellas al ListBox:
'If Hoja.Visible = True Then
For Each hoja In ActiveWorkbook.Sheets
If hoja.Visible = True Then
imphoja.List1.AddItem hoja.Name
End If
Next hoja
Set hoja = Nothing
'End If
End Sub
si, parece todo correcto (quitando los comentarios que le hiciste al If)
ResponderEliminarSub CargarList()
'antes limpio, por las dudas:
imphoja.List1.Clear
'uso al bucle para recorrer la colección de Hojas, agregando
'el nombre de ellas al ListBox:
For Each hoja In ActiveWorkbook.Sheets
If hoja.Visible = True Then
imphoja.List1.AddItem hoja.Name
End If
Next hoja
Set hoja = Nothing
End Sub
¿te funcionó correctamente?
Si efectivamente me funciono como queria... muchas gracias de nuevo...
ResponderEliminaruna ultima consulta a respecto del formato que me facilitaste...
Como haria para que solo me tome en la lista despues de la tercera hoja por ejemplo
Tengo
hoja1 caracas
hoja2 buenos aires
hoja3 quito
hoja4 bogota
hoja5 la paz
que en el listbox solo aparezca de Quito en adelante omitiendo(ya lo hiciste con las hojas ocultas) ahora si tengo la hoja del menu principal y la hoja desde donde imprimo no quiero que al imprimir todo me aparezcan esas hojas
Anexo codigo para imprimir que adapte (o mal adapte...
sub imprimir_todo()
Sheets("IMPHOJA").Select
For I = 0 To list1.ListCount - 1
list1.Selected(I) = True
Next I
Call ImprimirSeleccionadas
end sub
Gracias amigo damian
Johan: cada una de las hojas presentes en el libro tiene una propiedad llamada "index", que determina la ubicación de la misma con respecto a las demás.
ResponderEliminareste número es único.
si creas un sub con este código:
MsgBox Activesheet.Index
verás que el mensaje te devuelve el índice de la hoja sobre la cual se ejecuta la macro.
ahora bien, teniendo en cuenta esta propiedad (y ordenando convenientemente las hojas del libro) podrías agregar un If... que solo incluya a las hojas cuyo Index sea mayor a 3:
If Hoja.Index > 3 then
'codigo
End if
Saludos.
Hola Damian,
ResponderEliminarGracias por tus aportes, tengo un problema, quiero que en la celda activa que "llama" al listbox se muestren todas las opciones seleccionadas.
Gracias
Hola: no comprendo lo de "en la celda activa que llama al listbox"... pero si creo interpretar que necesitas que todos los items del listbox queden seleccionados por defecto, lo cual se logra con este código:
ResponderEliminarSub CargarList()
Dim X
'antes limpio, por las dudas:
Hoja1.list1.Clear
'uso al bucle para recorrer la colección de Hojas, agregando
'el nombre de ellas al ListBox:
X = 0
For Each hoja In ActiveWorkbook.Sheets
Hoja1.list1.AddItem hoja.Name
Hoja1.list1.Selected(X) = True
X = X + 1
Next hoja
Set hoja = Nothing
End Sub
cualquier cosa avisame. Gracias x tu mensaje
esta muy bueno... pero si por ejemplo en ves dese la hoja el listbox que actua como un filtro esta desde un userform como seria para imprimir?
ResponderEliminarLa instrucción para imprimir una hoja es PrintOut.
ResponderEliminarPor ejemplo: Sheets("Hoja1").PrintOut
Para reemplazar el nombre de la hoja x el que figura en el control, seria:
Sheets(combobox1.text).PrintOut
¿Eso es lo que necesitas saber?
Quedo al aguardo de tus noticias.