Regresar a la Pagina de Inicio

25 nov. 2011

imprimir hojas con un listbox

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

12 comentarios:

Johan dijo...

hola damian excelente solucion exactamente lo que requeria... gracias como siempre tu valiosa ayuda...

Una 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

Damian Omar Silva dijo...

Dentro del bucle podrías colocar un condicional:
If hoja.visible = true then
'codigo para imprimir la hoja.
End If
Un abrazo

edwin arley delgado dijo...

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.

Damian Omar Silva dijo...

Edwin: ¿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.
Un abrazo.

Johan dijo...

Hola damian hice la recomendacion que me diste y el codigo quedo de esta manera..

Sub 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

Damian Omar Silva dijo...

si, parece todo correcto (quitando los comentarios que le hiciste al If)

Sub 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?

Johan dijo...

Si efectivamente me funciono como queria... muchas gracias de nuevo...

una 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

Damian Omar Silva dijo...

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.
este 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.

Anónimo dijo...

Hola Damian,

Gracias por tus aportes, tengo un problema, quiero que en la celda activa que "llama" al listbox se muestren todas las opciones seleccionadas.

Gracias

Damian Omar Silva dijo...

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:
Sub 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

fofo dijo...

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?

Damian Omar Silva dijo...

La instrucción para imprimir una hoja es PrintOut.
Por 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.

Publicar un comentario

Regresar a la Pagina de Inicio

ENTRADAS MAS RECIENTES (ULTIMAS 10)


las + vistas

10 ULTIMOS COMENTARIOS DE MIS LECTORES

Free counters!
blog de periodismo




GRAFICA RIO BRAVO
Serigrafia-Offset
Rosario - Santa Fe - Argentina
TE: 0341 4664028