> 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 -?-
saludos,
hector.
Saludos
"MIEL" <MI...@discussions.microsoft.com> escribió en el mensaje de
noticias:986F5DC2-A7FD-4E45...@microsoft.com...
Ante todo perdona mi ignorancia en estos temas ya que mi experiencia con
excel se basa en el manejo diario como usuario. 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()
'
' Visualizar Macro
' Macro realizada por miguel
'
' Acceso directo: CTRL+m
'
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?
Espero tu amable respuesta.
Un saludo.
Miguel.
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 ;)
saludos,
hector.
__ la consulta original __
> 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?
__ las consultas anteriores __
> ... 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 __