Autodestruccion hoja excel

04/03/2008 - 14:21 por MIEL | Informe spam
Hola Amigos:
ante todo un cordial saludo y un millon de gracias por adelantado por
vuestra magnifica disposicion y ayuda.
Mi problema es el siguiente:
tengo un libro en excel que ejecuta varias macros y hace un determinado
trabajo para que unos compañeros puedan beneficiarse de el, aunque no deben
tener acceso ni a las formulas ni a las macros, asi nos funcionara a todos
igual.Lo tengo todo bloqueado, oculto y protegido por contraseña de tal
manera que los usuarios solo pueden introducir los datos, hasta ahi todo
bien.Pero de vez en cuando aparece algun usuario mas espabilado y a fuerza de
intentos "viola" la contraseña, desprotege el libro y modifica formulas
etc... resultando que algunos de los libros "de repente" empiezan a funcionar
mal.
Quisiera (pero no se como) introducir en este libro una macro que cuado
algun usuario intente desproteger el libro para hacer modificaciones, se
autodestruya y tenga que pedir que se lo reponga, asi sbre quien es el que
modifica la hoja excel.
podria ser con kill?.
Esperando vuestras amables respuestas me despido.
Un saludo.

Preguntas similare

Leer las respuestas

#6 Héctor Miguel
07/03/2008 - 04:14 | Informe spam
hola, Miguel !

... esa macro solo la tengo para utilizar en la hoja1 llamada Listado.
La verdad es que tambien me suele venir bien que se pueda utilizar en todas las demas (7 mas)...



1) lo mas "usual" para trabajar con macros sobre hojas protegidas es re/proteger en el evento '_open' del libro
estableciendo la proteccion a solo la interfase con el usuario
segun las versiones a las que tengas pensado dar "soporte" para el uso de tu archivo +/- como sigue:
=a) en excel 97 y 2000 NO necesitas repetir el password (es suficiente con poner):
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect UserInterfaceOnly:=True
End Sub
=b) a partir de excel 2002/xp SI es requisito repetir el password:
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 (suponiendo una misma clave para todas)...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets(Array("hoja1", "hoja4", "hoja6"))
Hoja.Protect PassWord:="123", UserInterfaceOnly:=True
Next
End Sub
=(practicamente) TODO lo que hagas por codigo... pasara sin problemas
(excepto ciertas cosillas relacionadas con ordenaciones, insertar filas/columnas y objetos incrustados)

2) (aparentemente) lo unico que hace la macro que expones es convertir a valores el rango seleccionado
y quitar propiedades de oculta y protegida a dichas celdas -?- (por lo cual)...
si tus macros ya tienen permiso de trabajar sobre hojas protegidas, prueba adelgazando el codigo +/- a lo siguiente:
=Sub Visualizar()
With Selection
.Value = .Value
.Locked = False
.FormulaHidden = False
End With
End Sub

3) una vez que tus macros tienen permiso de modificar las hojas protegidas SIN la necesidad de des/re/protegerlas...
podrias aprovechar p.e. el evento '_selectionchange' o el evento '_change' de cada hoja (cada una en su modulo)...
y/o en el modulo de codigo del libro (ThisWorkbook) usando los eventos aplicables a (todas) las hojas (depende de tu necesidad)
=-> ejemplo para destruir el libro si el evento '_selectionchange' llega a detectar que la hoja NO tiene su proteccion activa...
OJO: corre pruebas sobre copias, porque (probablemente) no volveras a ver el archivo que se auto-elimine :D
=Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Me.ProtectContents Then Exit Sub
Application.DisplayAlerts = False
ThisWorkbook.ChangeFileAccess xlReadOnly
Kill ThisWorkbook.FullName
ThisWorkbook.Close False
End Sub
=esta instrucciones deberias transcribirlas a los modulos de codigo de cada una de las hojas protegidas...
(o administratrlas en los eventos del libro, si le especificas los nombres de todas las hojas "aplicables") ;)

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

__ consultas anteriores __
en principio, si seria un "detalle a considerar" el hecho de que usas macros que des/re/protegen hojas/libro :-((
aparentemente, la macro que expones la puedes utilizar para ser aplicada a cualquier hoja -???-
es conveniente que comentes en cuantas y cuales hojas tienes esta "necesidad" (o cualquier otra similar)
esto con el objetivo de buscar alguna mejor entre las alternetivas posibles ;)

__ consulta previa __
En su dia cuando hice este libro protegi las hojas una por una a traves de la interface windows.
Si bien es cierto que una de las macros hace lo siguiente:
Sub Visualizar()
ActiveSheet.Unprotect ("***")
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.Locked = False
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="***"
End Sub
lo cual creo que representa un problema porque cuando la usara eliminaria el libro, no es asi?



__ consultas original __
tengo un libro... varias macros... todo bloqueado, oculto y protegido por contrasena ...
... de vez en cuando aparece algun usuario mas espabilado y... "viola" la contrasena ...
... resultando que algunos de los libros "de repente" empiezan a funcionar mal.
Quisiera... una macro que cuado algun usuario intente desproteger el libro para hacer modificaciones
se autodestruya y tenga que pedir que se lo reponga, asi sbre quien es el que modifica la hoja excel.
podria ser con kill?.



asumiendo que tambien el proyecto de macros lo tienes protegido contra visualizacion...
antes de usar el "kill", es necesario conocer si las macros hacen alguna des/re/proteccion (hojas/libro)...
o estas protegiendo en el evento '_open' del libro con la opcion de solo la interfase con el usuario -?-
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida