Hola, el problema es el siguiente: Dispongo de un libro Excel-2007 con cuatro hojas, la primera la llamo "Datos", la segunda es "Certificación" la siguiente la llamo, "Horas" y la última la llamo "graf_cer". Desde "Datos" he configurado una serie de botones desde los cuales intento imprimir las diversas hojas que la preceden, pero con el código que he implementado solo consigo imprimir la "Hoja Activa" es decir donde están los botones que es "Datos", y lo que pretendo es imprimir en función del botón la hoja que más me convenga. Podrías decirme cual sería el código ideal, para poder hacerlo. Te adjunto el código que dispongo, tengo que reconocer que a excepción del problema antes comentado, me imprime la hoja activa, muy bien centrada en la hoja y me gustaria que el nuevo código mantuviera esta premisa.Gracias.
Sub Imprimir_certificaciones()
'preparar la hoja para la impresión
With ActiveSheet.PageSetup
.PrintArea = ""
.Orientation = xlLandscape ' xlPortrait
.PaperSize = xlPaperA4 'formato A4
.BlackAndWhite = False 'incluir colores o no
.FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho)
.FitToPagesTall = 1 'reduce el tamaño de la hoja (alto)
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
End With
'imprimir las celdas seleccionadas (1 copia)
ActiveWindow.SelectedSheets.PrintOut copies:=1, collate:=True
End Sub
Hola Sergio:
fíjate que en tu macro realizas una serie de acciones con la configuración de página de la hoja activa dentro de ese With ActiveSheet.PageSetup
En vez de ActiveSheet deberías referirte a la hoja que quieras modificar, simplemente cambiando ese With
por ejemplo para trabajar con la hoja Certificación:
With Sheets("Certificación").PageSetup
...' esto igual que lo tienes
End with
Ahora vamos con la impresión
Al imprimir estás imprimiendo las hojas seleccionadas (seleccionadas en la ventana activa) con ActiveWindow.SelectedSheets.PrintOut
Pero si quieres imprimir otra hoja, utiliza el método printout de dicha hoja
por ejemplo, para imprimir la Hoja Certificación
Sheets("Certificación").PrintOut
------
Ya sé Excel, pero necesito más.
Una vez colocados los nuevos códigos me sigue dando error, en la primera línea del código
Sub Imprimir_certificaciones()
'preparar la hoja para la impresión
With Sheets("Certificación").PageSetup
.PrintArea = ""
.Orientation = xlLandscape ' xlPortrait
.PaperSize = xlPaperA4 'formato A4
.BlackAndWhite = False 'incluir colores o no
.FitToPagesWide = 1 'reduce el tamaño de la hoja (ancho)
.FitToPagesTall = 1 'reduce el tamaño de la hoja (alto)
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
End With
'imprimir las celdas seleccionadas (1 copia)
Sheets("Certificación").PrintOut copies:=1, collate:=True
End Sub
Que podemos hacer???
Disculpa falsa alarma, ahora si me imprime la hoja, el error estaba en que la hoja "Certificación", en realidad es "Certif" una vez arreglado me imprime la hoja, pero ahora el problema está en que, así como antes me cubría toda la hoja de papel, ahora solo se imprime en una parte del papel, con lo que me queda muy pequeño,los códigos de que obligan a imprimir en toda la hoja no me resultan ahora. Me puedes aconsejar. Gracias.
Haz una prueba a mano, a ver qué es lo que imprime y cómo.
Comprueba el área de impresión. Tu macro borra el área de impresión, así que imprimirá todo lo que tenga información en la hoja, mira a ver qu no tengas un espacio en la celda M1000
------
Ya sé Excel, pero necesito más.
El problema lo he resuelto amedias, verás he colocado el código siguiente y me imprime perfectamente, bien centrado tanto horiz como vertical, pero me saca una segunda hoja en blanco, el código es:
Sub Imprimir_horas()
'preparar la hoja para la impresión
With Sheets("Horas").PageSetup
.PrintArea = ""
.Orientation = xlLandscape ' xlPortrait
.PaperSize = xlPaperA4 'formato A4
.BlackAndWhite = False 'incluir colores o no
Zoom = False
.FitToPagesTall = 2 ' (Fit) Encaja Páginas alto ' si este parametro le pongo 1 me saca la impresión en pequeño
.FitToPagesWide = 1 ' (Fit) Encaja Pagina Ancho
.CenterHorizontally = False 'centrar horizontalmente
.CenterVertically = False 'centrar verticalmente
End With
'imprimir las celdas seleccionadas (1 copia)
Sheets("Horas").PrintOut Copies:=1, collate:=True
End Sub
Pero ahora tengo otro problema que te comento a continuación, al tratarse de un diagrama de barras o de Gannt, lo que pretendo es lo siguiente y siempre con códigos VBA,
Tengo una línea de una hoja Excel-2007, con una serie de números, y quisiera que con una macro de VBA pudiera en otra hoja del mismo libro que se me sombrearan. Me explico
Hoja1 y en la celda A1=10; B1=15;C1=20;D1=50; et etc
Hoja2 y en la celda, por ejemplo: D6=sombra;D7=sombra;D8=sombra;D9=sombra; etc,etc.
Me puedes ayudar a resolver este enigma. Gracias
Sobre la impresión: MIra qué es lo que tienes al final de la impresión. Excel está detectando algo más abajo de tus datos (pueden ser fórmulas que den como resultado "", pero Excel las considera como celdas con contenido, por eso imprime una segunda página aparentemente en blanco.
Otra opción es decirle que sólo imprima la primera página, modifica la línea donde imprimes
Sheets("Horas").PrintOut From:=1, To:=1, Copies:=1, collate:=True
Sobre el sombreado de celdas: mi consejo es que no inventes la rueda, utiliza formatos condicionales.
------
Ya sé Excel, pero necesito más.
Perfecto el código me ha funcionado a las mil maravillas. Gracias
Respecto al tema del sombreado de celdas, me gustaría poder llegar a conseguirlo, me puedes ayudar. Gracias
he creado un furmulario en VBA excel quiero agregarle un boton de imprimir, quiero que me imprima la segunda hoja por que la primera hoja esta mi boton para aceder al formulario en VBA.
mi correo sotomayor.carlos01@gmail.com
Private Sub CommandButton6_Click()
Dim pagina As String
pagina = InputBox("Ingrese número de pagina a imprimir", "IMPRIMIR")
If pagina = "1" Then
" aca es el problema , no se que estoy haciendo mal? me segunda hoja se llama facility DB.
Sheets("Facility DB").Select 'se situa en la hoja2
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Else
MsgBox "Ese número de página no existe", vbExclamation, "PAGINA INCORRECTA"
End If
End Sub