Botón imprimir con macro

Necesito que esta macro:
ActiveSheet. Unprotect "clave"
Dim Mensaje, Resp
Dim Total As Double
Total = WorksheetFunction.Sum(Range("E14:E25"))
Mensaje = "El total es " & Total
Mensaje = Mensaje & " ¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = 7 Then
Cancel = True
ActiveSheet.Protect Password:="clave", DrawingObjects:=True, Contents:=True, Scenarios:=True
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
Quede en un botón que al hacer click de la instrucción de imprimir, y que quede conectada a una sola impresora; de momento la tengo así:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.Unprotect "clave"
Dim Mensaje, Resp
Dim Total As Double
Total = WorksheetFunction.Sum(Range("E14:E25"))
Mensaje = "El total es " & Total
Mensaje = Mensaje & " ¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = 7 Then
Cancel = True
ActiveSheet.Protect Password:="clave", DrawingObjects:=True, Contents:=True, Scenarios:=True
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
End Sub
Pero me afecta a todas las hojas, yo solo la quiero en un botón que diga imprimir en la hoja que necesito que se corra la macro, de antemano gracias por la ayuda. Atentamente. Christian

1 Respuesta

Respuesta
2
Insertá un módulo y allí escribí algo así:
Sub ImprimoHoja()
End Sub
Ahora copiá entre estas 2 líneas lo que se encuentra entre : Private Sub Work.... y  End Sub.
Eliminá la rutina del Private Sub Workbook.....
Ahora dibujá un botón en tu hoja con la barra formulario, y con clic derecho sobre él optá por Asignar macro. Seleccioná esta nueva rutina y aceptá.
Estiamda, he tratado de hacer lo que me dijiste y obtuve este resultado:
Sub ImprimoHoja()
ActiveSheet.Unprotect "clave"
Dim Mensaje, Resp
Dim Total As Double
Total = WorksheetFunction.Sum(Range("E14:E25"))
Mensaje = "El total es " & Total
Mensaje = Mensaje & " ¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = 7 Then
Cancel = True
ActiveSheet.Protect Password:="clave", DrawingObjects:=True, Contents:=True, Scenarios:=True
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
End Sub
Y lo coloque en un Modulo en el vba, pero no se como insértalo al botón que realice (imprimir) dentro de la hoja; al ver el código del botón y tratar de copiar la rutina me aparece
Private Sub CommandButton1_Click() al principio y si pego lo siguiente:
Private Sub CommandButton1_Click()
Sub ImprimoHoja()
ActiveSheet.Unprotect "clave"
Dim Mensaje, Resp
Dim Total As Double
Total = WorksheetFunction.Sum(Range("E14:E25"))
Mensaje = "El total es " & Total
Mensaje = Mensaje & " ¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = 7 Then
Cancel = True
ActiveSheet.Protect Password:="clave", DrawingObjects:=True, Contents:=True, Scenarios:=True
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
End Sub
Me arroja error en la compilación. Si pudieras explicarme un poco más como hacerlo, soy novato en esto y no tengo mucha idea, gracias de antemano por tu buena disposición. Atentamente. Christian
Parece que no utilizaste la barra Formularios sino la de Controles, si te aparecen esas líneas de CommandButton1
Seguí por favor las indicaciones dadas en respuesta anterior y no tendrás problemas. Reitero:
Ahora dibujá un botón en tu hoja con la barra formulario, y con clic derecho sobre él optá por Asignar macro. Seleccioná esta nueva rutina y aceptá.
Si luego la ejecución presenta algún error, presioná el botón DEPURAR y tomá nota de la línea que se te mostrará de amarillo.
Estimada, gracias por tu paciencia... he seguido ahora todo lo que me has dicho y funciona el botón, pero no la impresión, no ha ido a las impresoras disponibles para seleccionar la que deseo que imprima, le doy si y hasta ahí llega... ¿es posible asignar una impresora en particular para que imprima cada vez que doy click al botón?, espero tu respues, y gracias de antemano, atentamente. Christian
Ahhhhhh por algo insisto tanto en que cuenten con un buen manual si van a trabajar con macros...
¿Dónde está la línea en tu rutina que le dice que imprima?
Antes del End Sub agregá:
Activesheet. PrintOut
Se imprimirá con la configuración que tenga la impresora en ese momento.
Si querés establecer condiciones personalizadas, será mejor que configures la impresión con la grabadora de macros encendida (Menú Herramientas, macros, grabar, en este libro).
Al finalizar y detenerla, encontrarás en un módulo las líneas necesarias para agregar antes de la que acabo de colocar en negrita (solo las instrucciones, no el Encabezado Sub ni el fin End Sub)
Si te presenta alguna dificultad escribime la rutina resultante y te marcaré las que deben agregarse
Estimada, he hecho lo que me dijiste, y ha resultado super bien, así me ha quedado la macro
Sub ImprimoHoja()
ActiveSheet.Unprotect "clave"
Dim Mensaje, Resp
Dim Total As Double
Total = WorksheetFunction.Sum(Range("E14:E25"))
Mensaje = "El total es " & Total
Mensaje = Mensaje & " ¿Desea Imprimir?"
Resp = MsgBox(Mensaje, vbQuestion + vbYesNo)
If Resp = 7 Then
Cancel = True
ActiveSheet.Protect Password:="clave", DrawingObjects:=True, Contents:=True, Scenarios:=True
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
Application.ActivePrinter = "Bullzip PDF Printer en Ne02:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub
pero me he encontrado que el valor "total" lo mantiene hasta la proxima emision y no totaliza mientras se escribe, es posible que en vez de darle la instruccion de sumar un rango en la macro, tome el valor de una celda en específico que lleve la formula de autosuma, que en mi caso es E28?
Cuando presionás el botón de tu rutina pasan estas cosas:
1-Se desprotege la hoja
2-Se calcula la suma de E14:E28 guardándose en una variable
3-Aparece un mensaje de si querés imprimir o no.
Por no, se protege nuevamente la hoja y el proceso finaliza
Por si, se coloca el total obtenido en celda E28, F12 se incrementa en 1, se protege la hoja y se imprime.
La próxima vez que presiones el botón hará exactamente lo mismo, volverá a calcular la suma colocando nuevamente el total en E28 y todo lo demás.
Es decir que el proceso se vé perfectamente normal.
No estás colocando la función SUMA si es a eso que te referís.
Para que en E28 te quede la fórmula y no el resultado de la variable TOTAL,. deberás cambiar la instrucción   [E28] = Total  x esta otra:
[E28].Formula = "=+SUM(E14:E25)"
Espero esto resuelva tu consulta, sino lo seguiremos tratando
Gracias Elsa por tu gran ayuda... todo ha resultado super bien, pero un último detalle, ¿cómo es posible de colocar separador de miles en el mensaje de impresión? Por ejemplo dice: El total es 1234567 ¿Desea Imprimir? ; Me gustaría que dijera: El total es 1.234.567 ¿Desea Imprimir? ; Si no fuese mucha la molestia, y nuevamente gracias de antemano por tu buena disposición, atentamente. Christian
Mensaje = "El total es " & Format(Total, "#,##0.00")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas