interrupcion de macro, desproteje hoja

06/10/2006 - 01:31 por isaac | Informe spam
Hola amigos.

existe alguna forma de que al interrumpir la ajecución del código de
una macro, con la tecla control + pausa, la hoja no quede desprotejida.

Cuando inicia la macro desproteje la hoja (primera linea) y al final de
la macro la vuelve a protejer. pero cuando la interrumpo queda
desprotejida.


ActiveSheet.Unprotect Password = Y6dhet5
Application.ScreenUpdating = False

.


ActiveSheet.Protect Password = Y6dhet5, DrawingObjects:=True,
Contents:=True, Scenarios:=True
Application.ScreenUpdating = True ' linea de proteccion


Lo que se me ocurre es si existe algun codigo que al interrumpirse la
macro ejecute la linea de proteccion.

Saludos Isaac
 

Leer las respuestas

#1 Héctor Miguel
06/10/2006 - 07:24 | Informe spam
hola, isaac !

existe alguna forma de que al interrumpir la ajecucion del codigo de una macro
con la tecla control + pausa, la hoja no quede desprotejida.
Cuando inicia la macro desproteje la hoja (primera linea) y al final de la macro la vuelve a protejer
pero cuando la interrumpo queda desprotejida...
Lo que se me ocurre es si existe algun codigo que al interrumpirse la macro ejecute la linea de proteccion.



1) si necesitas que la proteccion NO 'afecte' a tus macros ->SIN tener que [des/re]proteger la hoja<-
y puesto que la hoja ya tiene su clave asignada... puedes usar la instruccion de 'solo interfase de usuario'

2) si interrumpes la ejecucion del codigo 'haciendo pruebas' [o el usuario cancela durante su ejecucion]...
necesitaras utilizar/manipular/administrar/... un 'manejo' de errores [te paso un ejemplo al final] :)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

1) ejemplos protegiendo la hoja al abrirse el libro sin que les afecte modificarlas por codigo...

a) en excel 97 y 2000 NO necesitas 'repetir' el password <= es 'suficiente' con poner:
en el modulo de codigo del libro ==Private Sub Workbook_Open()
Worksheets("Hoja1").Protect UserInterfaceOnly:=True
End Sub

b) a partir de excel 2002 [xp] SI es requisito 'repetir' el password :-( < en el modulo de codigo del libro ==Private Sub Workbook_Open()
Worksheets("Hoja1").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub

c) si se trata de varias hojas [supoiendo una misma clave para todas]...
en el modulo de codigo del objeto ThisWorkbook de tu libro [prueba data.xls] ==Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets(Array("hoja1", "hoja4", "hoja6"))
Hoja.Protect PassWord:="123", UserInterfaceOnly:=True
Hoja.EnableAutoFilter:=True
Next
End Sub

[practicamente] TODO lo que 'hagas por codigo'... pasara 'sin problemas'

2) para el manejo de errores...

si el usuario presiona {ctrl}+{pausa} o... {escape} estando una macro 'en ejecucion'...
se produce un error 18 en tiempo de ejecucion =>operacion cancelada por el usuario<y para que sea 'detectado' por esa propiedad, se debe incluir un 'manejo de errores' en el codigo
prueba con la propiedad EnableCancelKey [es del objeto Application]
=>revisa en la ayuda [vba] los comentarios acerca de 'cuidados especiales' en su uso<si [solamente] quieres 'desaparecer' el dialogo de la 'pregunta-confirmacion'... [p.e.]
' ... otras lineas de tu codigo ...
On Error GoTo Ver_Error
Application.EnableCancelKey = xlErrorHandler
' ... otras lineas de tu codigo ...
Ver_Error:
If Err <> 18 Then Resume ' si el usuario 'intento' detener el codigo... el codigo... NO 'le hace caso' :))

otra variante pudier ser...

' ... otras lineas de tu codigo ...
If Err = 18 Then Goto Proteger_hoja ' si el usuario 'intento' detener el codigo... el codigo... 'salta' a la etiqueta que re-protege :))

Preguntas similares