Macro para proteger hoja al decir no al imprimir

Que tal estimado:
Espero me puedas ayudar a resolver mi problema, pasa que tengo una hoja protegida para que la secretaria no cometa errores al digitar, pero necesito un contador automático en dicha hoja protegida (que servirá como un correlativo de control), he copiado una macro que da el numero correlativo al imprimir, pero al estar protegida la hoja (no quiero que se modifique dicho numero correlativo) me daba error, lo solucione con ActiveSheet.Unprotect, pero solo si la condición de imprimir dice si, vuelve a proteger la hoja, en el caso de decir no... La hoja queda desprotegida... ¿me podrías ayudar a solucionar este problema?, te mando la macro que tengo hasta el momento:
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
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
End Sub
Agradecido de antemano por tu atención.

1 Respuesta

Respuesta
1
El código debe quedar de esta forma:
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
[E28] = Total
[F12] = [F12] + 1
Cancel = True
Exit Sub
End If
[E28] = Total
[F12] = [F12] + 1
ActiveSheet.Protect "clave"
End Sub
Con esto ya te lleva el conteo aunque se cancele la impresión.
[email protected]
Estimado, gracias por tu tiempo... he probado la macro que me enviaste, pero no me supe explicar y lo que yo deseo es que la macro al decir no!, no cambie el numero correlativo y ademas que proteja la hoja; mi idea es que la impresión solamente haga cambiar el numero correlativo, pero que en ambas circunstancias (diga si o diga no a la impresión) la hoja quede protegida, espero no sea mucho pedir, gracias por tu ayuda de antemano.
p.d.: Tengo otra pregunta, como puedo aplicar esta macro solo a una hoja en específico, pasa que tengo tres hojas más en el mismo libro de donde extraigo la información para el formulario y pasa que me di cuenta que al imprimir en las otras hojas la macro igual se dispara; yo solo quiero aplicarla a la hoja del formulario para impresión no para todas las demás hojas, si pudieras decirme te lo agradecería mucho... espero tu respuesta, atentamente. Christian.
Prueba de esta forma:
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
[E28] = Total
[F12] = [F12] + 1
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
Si quieres que no se dispare la macro desde cualquier hoja tendrías que insertar la rutina en algún Botón y quitarla de donde la tienes. Otra forma sería crear algo como:
If Worksheet.Name = "OtraHoja" then exit sub
[email protected]
Estimado amigo, espero no aburrirte con mi insistencia, pero pasa que la macro que me enviaste deja protegida la hoja aun en la cancelación de la impresión, más yo deseo que la proteja y que no cambie el numero correlativo... entonces al cancelar, que no cambie el numero correlativo y que deje igualmente protegida la hoja, espero me puedas ayudar y no te este tomando mucho tiempo mis consultas, gracias de antemano por tu buena disposición, atentamente. Christian
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
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas