Macro para imprimir

03/12/2007 - 02:25 por Ivan S | Informe spam
hola a todos,

Si tengo una hoja de excel que esta configurada para que se imprima en 6
hojas de papel. Cómo puedo crear un botón para que se impriman solo algunas
de esas hojas?
El criterio para seleccionar las hojas que se van a imprimir es que la
primer celda de esa selección no sea una celda en blanco. Esta celda tiene
una fórmula que arroja una celda en blanco o un texto de acuerdo a la
condición de otras hojas.
No tengo mucho conocimiento de VB, por lo que les pido su ayuda para
realizar esta macro, o en caso que conozcan una forma más sencilla por favor
díganmela.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
03/12/2007 - 03:16 | Informe spam
hola, Ivan S !

Si tengo una hoja de excel que esta configurada para que se imprima en 6 hojas de papel.
Como puedo crear un boton para que se impriman solo algunas de esas hojas?
El criterio para seleccionar las hojas que se van a imprimir es que la primer celda de esa seleccion no sea una celda en blanco.
Esta celda tiene una formula que arroja una celda en blanco o un texto de acuerdo a la condicion de otras hojas.
No tengo mucho conocimiento de VB, por lo que les pido su ayuda para realizar esta macro
o en caso que conozcan una forma mas sencilla por favor diganmela...



el siguiente ejemplo "asume/supone/..." que cada hoja impresa equivale a 10 filas y 4 columnas
-> revisa el bucle "For Fila = 1 To 61 Step 10" y la instruccion con el ".Resize(10, 4)" <= OJO
por lo que "revisa" si la primer celda de cada hoja (impresa) contiene una cadena de texto de longitud cero
o va "construyendo" lo que sera el rango de impresion (cuando dicha celda no este "vacia")
macro que puedes asigar a algun objeto/boton/figura/... incrustado en esa hoja
y una vez a/probado puedes cambiar la instruccion .PrintPreview por un simple .PrintOut

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Imprimir_condicionado()
Dim Fila As Integer, Rango As String
For Fila = 1 To 61 Step 10
If Range("a" & Fila) <> "" Then _
Rango = Rango & Range("a" & Fila).Resize(10, 4).Address & ","
Next
If Rango = "" Then Exit Sub
ActiveSheet.PageSetup.PrintArea = Left(Rango, Len(Rango) - 1)
ActiveSheet.PrintPreview
End Sub
Respuesta Responder a este mensaje
#2 Ivan S
04/12/2007 - 22:24 | Informe spam
Gracias Héctor, ya voy entendiendo como funciona esta macro, pero mi hoja de
excel está organizada para imprimir hojas de manera "horizontal" es decir,
cada 36 columnas y quisiera aplicarla para que se configuren hojas de 36 col
por 78 filas.

Ya sustituí estos valores en la macro que mandaste, pero solo funciona
cuando lo hago de manera "vertical", es decir cada 78 filas. También necesito
que la referencia para imprimir sea la 3er columna de cada hoja (que tenga
una cadena de texto mayor a 0). Podrías por favor sugerirme alguna manera de
solucionarlo.

Gracias

"Héctor Miguel" escribió:

hola, Ivan S !

> Si tengo una hoja de excel que esta configurada para que se imprima en 6 hojas de papel.
> Como puedo crear un boton para que se impriman solo algunas de esas hojas?
> El criterio para seleccionar las hojas que se van a imprimir es que la primer celda de esa seleccion no sea una celda en blanco.
> Esta celda tiene una formula que arroja una celda en blanco o un texto de acuerdo a la condicion de otras hojas.
> No tengo mucho conocimiento de VB, por lo que les pido su ayuda para realizar esta macro
> o en caso que conozcan una forma mas sencilla por favor diganmela...

el siguiente ejemplo "asume/supone/..." que cada hoja impresa equivale a 10 filas y 4 columnas
-> revisa el bucle "For Fila = 1 To 61 Step 10" y la instruccion con el ".Resize(10, 4)" <= OJO
por lo que "revisa" si la primer celda de cada hoja (impresa) contiene una cadena de texto de longitud cero
o va "construyendo" lo que sera el rango de impresion (cuando dicha celda no este "vacia")
macro que puedes asigar a algun objeto/boton/figura/... incrustado en esa hoja
y una vez a/probado puedes cambiar la instruccion .PrintPreview por un simple .PrintOut

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Imprimir_condicionado()
Dim Fila As Integer, Rango As String
For Fila = 1 To 61 Step 10
If Range("a" & Fila) <> "" Then _
Rango = Rango & Range("a" & Fila).Resize(10, 4).Address & ","
Next
If Rango = "" Then Exit Sub
ActiveSheet.PageSetup.PrintArea = Left(Rango, Len(Rango) - 1)
ActiveSheet.PrintPreview
End Sub



Respuesta Responder a este mensaje
#3 Héctor Miguel
05/12/2007 - 00:36 | Informe spam
hola, Ivan S !

... ya voy entendiendo como funciona esta macro, pero mi hoja... esta organizada para imprimir hojas de manera "horizontal"
es decir, cada 36 columnas y quisiera aplicarla para que se configuren hojas de 36 col por 78 filas.
Ya sustitui estos valores en la macro que mandaste, pero solo funciona cuando lo hago de manera "vertical", es decir cada 78 filas.
Tambien necesito que la referencia para imprimir sea la 3er columna de cada hoja (que tenga una cadena de texto mayor a 0).
Podrias por favor sugerirme alguna manera de solucionarlo...



manteniendo una estructura de codigo +/- igual a la propuesta anterior (y con los datos de esta)...
(aprovechando que ya la entendiste)... suponiendo que cada 36 columnas se verifica la fila 1 -???-

Sub Imprimir_condicionado()
Dim Col As Integer, Rango As String
For Col = 1 To 181 Step 36
If Cells(1, Col + 2) <> "" Then _
Rango = Rango & Cells(1, Col).Resize(78, 36).Address & ","
Next
If Rango = "" Then Exit Sub
ActiveSheet.PageSetup.PrintArea = Left(Rango, Len(Rango) - 1)
ActiveSheet.PrintPreview
End Sub

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta anterior __
> Si tengo una hoja de excel que esta configurada para que se imprima en 6 hojas de papel.
> Como puedo crear un boton para que se impriman solo algunas de esas hojas?
> El criterio para seleccionar las hojas que se van a imprimir es que la primer celda de esa seleccion no sea una celda en blanco.
> Esta celda tiene una formula que arroja una celda en blanco o un texto de acuerdo a la condicion de otras hojas.
> No tengo mucho conocimiento de VB, por lo que les pido su ayuda para realizar esta macro
> o en caso que conozcan una forma mas sencilla por favor diganmela...

el siguiente ejemplo "asume/supone/..." que cada hoja impresa equivale a 10 filas y 4 columnas
-> revisa el bucle "For Fila = 1 To 61 Step 10" y la instruccion con el ".Resize(10, 4)" <= OJO
por lo que "revisa" si la primer celda de cada hoja (impresa) contiene una cadena de texto de longitud cero
o va "construyendo" lo que sera el rango de impresion (cuando dicha celda no este "vacia")
macro que puedes asigar a algun objeto/boton/figura/... incrustado en esa hoja
y una vez a/probado puedes cambiar la instruccion .PrintPreview por un simple .PrintOut

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

Sub Imprimir_condicionado()
Dim Fila As Integer, Rango As String
For Fila = 1 To 61 Step 10
If Range("a" & Fila) <> "" Then _
Rango = Rango & Range("a" & Fila).Resize(10, 4).Address & ","
Next
If Rango = "" Then Exit Sub
ActiveSheet.PageSetup.PrintArea = Left(Rango, Len(Rango) - 1)
ActiveSheet.PrintPreview
End Sub
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida