Como Evitar borrar hoja

28/12/2005 - 07:40 por Gabriel Raigosa | Informe spam
Saludos:

Normalmente al proteger un libro se protege la estructura, de esta manera no
se pueden insertar hojas y tampoco eliminar.

Pero si necesito insertar hojas, y lo que quiero es proteger una hoja en
particular contra eliminación ¿como se podria hacer?, la hoja no se puede
ocultar por que es una base de de datos en la cual se agregan datos, y
ocasionalmente se agregan otras hojas y se eliminan (aquellas que aparecen
al dar doble click en un campo de tabla dinamica y luego de imprimir un
reporte se eliminan)

TKS...
Gabriel Raigosa
Medellín - Colombia
GabrielRaigosa@hot.mail.com

Preguntas similare

Leer las respuestas

#6 Gabriel Raigosa
29/12/2005 - 17:51 | Informe spam
Gracias por tus comentarios,

Visitare las direcciones recomendas y estudiare mas sobre el tema.

Con respecto a tus anotaciones, son validas (en este caso) a usuario
despistado y no malicioso, ya que es un archivo de mucho interes para ella,
yo le he ayudado a construir la hoja de calculo y se lo importante que es en
su trabajo.

TKS... QAP...

Gabriel Raigosa
Medellin - Colombia

"KL" escribio en el mensaje
news:
Hola Gabriel,

he puesto dos eventos en el codigo de la hoja1 (base de datos) y la hoja2
(tabla dinamica).
Las dos hojas estan parcialmente protegidas, si seleciona alguna de ellas
desaparece la opcion borrar...>



Veamos. Antes de pasar a la parte siguiente examinemos los agujeros que
quedan al usar el procedimiento que te habia enviado:
1) El usuario puede habrir el fichero sin habilitar macros tanto
voluntaria como involuntariamente (por despiste o simplemente por que el
nivel de seguridad estaba en 'Alto)
2) Al ususario despistado o malicioso todavia le queda la opcion de ir al
menu Edicion>Eliminar hoja...
3) Al ususario despistado o malicioso todavia le queda la opcion de mover
la hoja arrastrandola con el cursor hacia otro libro.
4) El usuario malicioso podria invertir o borrar tu codigo.
5) El procedimiento que te envie funciona a nivel de la aplicacion y por
tanto afecta todos las hojas de todos los libros (no si usas los eventos
Actvate/Deactivate de una hoja concreta, eso si)

El problema ahora es que cuando el usuario selecciona varias hojas para
ser borradas por ejemplo hoja5, hoja4, hoja1 (y lo hace con la tecla
control presionada), estando activa la hoja5, la macro no detecta la
hoja1 como hoja activa ya que se seleciono desde otra hoja activa y luego
con click derecho elimino las hojas inecesarias incluida la hoja1 (pero
estando en la hoja5) y la hoja1 que es la que contiene la base de datos
se perdio y luego salvo, (no todo es tan grave, habia un respaldo de 15
dias atras, ya que esa hoja se respalda con alguna frecuencia), luego se
recontruyo la informacion buscando los documentos apropiados.



Sigamos. Dado el uso que le das al procedimiento tu, a los problemas de
arriba tambien se les suma lo siguiente:
6) El ususario despistado o malicioso puede seleccionar varias hojas sin
activar la "protegida" y borrarlas sin problema (lo que mencionas tu).
7) El usuario malicioso podria usar el procedimiento
Application.EnableEvents=False

He buscado en la ayuda del VBA un evento que se pudiera poner en
"ThisWorkbook" que detectara la selecion de la hoja1, de tal forma que
lanzara una macro impidiendo el borrado de la hoja1, pero no encuentro
algo parecido.
?existe algun evento que detecte la selecion de una hoja?



No creo que exista tal evento.

En todo caso, vista la cantidad de problemas que habria que superar
[aunque se podria neutralizar casi todos, menos lo del evento de
seleccionar hojas multiples, uno a uno usando soluciones +/- complejas],
la siguiente solucion se me presenta como la mas solida y barata:

1) Proteger la estructura del libro
2) Crear un codigo personalizado que le permita al usuario seleccionar las
hojas a eliminar y las elimine, p.ej usando la solucion descrita por
J.Walkenbach en el siguiente enlace (previamente excluidas de la lista las
hojas protegidas): http://j-walk.com/ss/excel/tips/tip48.htm
3) Crear un boton que ejecute el codigo de arriba en:
a. un CommandBar personalizado o estandar
(http://j-walk.com/ss/excel/tips/commandbars.htm)
b. una hoja del libro
c. cada una de las hojas.

En todo caso, para mas trucos de Proteccion revisa este enlace:
http://www.sistemaslym.net/vba/excel/exarc1.html

Saludos,
KL

Respuesta Responder a este mensaje
#7 Gabriel Raigosa
30/12/2005 - 16:40 | Informe spam
Saludos;

Solo para comentarte que al ejecutar la macro queda habilitada para todo el
excel, es decir que despues de cerrar el excel y abrirlo nuevamente queda
sin la opcion de eliminar.

Es una opcion Global, modifica la configuracion general del Excel.

Gabriel Raigosa
Medellin - Colombia

"KL" escribio en el mensaje
news:
Hola Gabriel,

Prueba este:

Sub test()
On Error Resume Next
Application.CommandBars("Ply") _
.FindControl(ID:„7, Recursive:=True) _
.Enabled = False
End Sub

Para los IDs de menus usa este vinculo:
http://support.microsoft.com/defaul...3552/en-us

Saludos,
KL


"Gabriel Raigosa" wrote in message
news:
Saludos:

Creo haber visto alguna vez una macro que lo que hacia era modificar el
menu click derecho sobre una hoja de calculo en particular, y
especificamente el click derecho en la pestaña, cambiando lo que tiene
que hacer ese comando en particular, he estado buscando "eventos" y
encontre este

Private Sub worksheet_beforerightclick(ByVal Target As Excel.Range, _
Cancel As Boolean)
Cancel = True
MsgBox "Shortcut menus are disabled in this worksheet!"
End Sub

Este evento anula el uso del click derecho en la hoja, luo qe busco es un
evento que anule el comando Eliminar del click derecho en la pestaña.

QAP

Gabriel Raigosa
Medellín - Colombia

"Héctor Miguel" escribió en el mensaje
news:%23SYA4%
hola, Gabriel !

Normalmente al proteger un libro se protege la estructura, de esta
manera no se pueden insertar hojas y tampoco eliminar.
Pero si necesito insertar hojas, y lo que quiero es proteger una hoja
en particular contra eliminacion, como se podria hacer?
la hoja no se puede ocultar por que es una base de de datos en la cual
se agregan datos
y ocasionalmente se agregan otras hojas y se eliminan
(aquellas que aparecen al dar doble click en un campo de tabla dinamica
y luego de imprimir un reporte se eliminan)



[primero]: no hay ningun 'impedimento' para que puedas seguir agregando
datos a cualquier hoja -> aun 'oculta' ;)
-> Worksheets("Mi Hoja Oculta").Range("a65536").End(xlUp).Offset(1) =
"Nuevo dato"
[supongo que con lo anterior, pudiera ya no ser necesario lo
siguiente]...

[segundo]: si las hojas las eliminas por codigo... puedes
des/re/proteger el libro y 'en el inter', eliminas 'la hoja' ;)
Sub Eliminar_Hoja_En_Libro_Protegido()
ThisWorkbook.Unprotect "password"
Application.DisplayAlerts = False
Worksheets("Hoja2").Delete
Application.DisplayAlerts = True
ThisWorkbook.Protect "password", True, True
End Sub

solo 'asegurate' que la hoja que eliminas... sea 'la correcta' :))

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








Respuesta Responder a este mensaje
#8 Héctor Miguel
31/12/2005 - 05:49 | Informe spam
hola, chicos !

Gabriel Raigosa escribio en el mensaje ...
... estudiare mas sobre el tema... (en este caso) al usuario despistado y no malicioso
... es un archivo de mucho interes para ella... y se lo importante que es en su trabajo.



1) la unica 'alternativa' [que veo] para detectar una seleccion multiple de hojas...
es 'buscar' si se cumple alguna de las siguientes 'condiciones'...
a) la barra de titulos de la aplicacion mostraria al final -> [Grupo] o... [Group] si excel es en ingles
y 'bastaria' con 'verificar' los ultimos 7 caracteres a la derecha de Application.Caption ;)
[obviamente, en tanto NO se 'personalice' el caption de la aplicacion mediante macros] :))
b) el primer control de la barra de comandos 'Ply' estaria visible [es el 'popup' para -> desagrupar hojas]
y bastaria con 'verificar' si 'devuelve' Verdadero... -> Application.CommandBars("Ply").Controls(1).Visible

2) el unico 'inconveniente' [que veo] para des/re/habilitar los comandos para 'eliminar/mover o copiar' -> hoja/s...
es que seria necesario utilizar el metodo 'OnTime' de manera programada/recursiva...
y 'afectar' TODAS las instancias de los controles con Id= 847 y 848 [de cualquier barra donde se encuentren] :(

3) valdria la pena EVALUAR el 'inconveniente', tomando en cuenta que a partir de excel-xp NO hay 'advertencia previa'...
-> CUANDO SE ELIMINA alguna hoja del libro [sea agrupada o no] :-((

si cualquier duda... comentarios ?
saludos,
hector.
Respuesta Responder a este mensaje
#9 KL
31/12/2005 - 11:38 | Informe spam
Hola Gabriel,

Esto es lo que te dije en el mensaje que consideraba los posibles inconvinientes ;-)

Saludos,
KL


"Gabriel Raigosa" wrote in message news:
Saludos;

Solo para comentarte que al ejecutar la macro queda habilitada para todo el excel, es decir que despues de cerrar el excel y
abrirlo nuevamente queda sin la opcion de eliminar.

Es una opcion Global, modifica la configuracion general del Excel.

Gabriel Raigosa
Medellin - Colombia

"KL" escribio en el mensaje news:
Hola Gabriel,

Prueba este:

Sub test()
On Error Resume Next
Application.CommandBars("Ply") _
.FindControl(ID:„7, Recursive:=True) _
.Enabled = False
End Sub

Para los IDs de menus usa este vinculo: http://support.microsoft.com/defaul...3552/en-us

Saludos,
KL


"Gabriel Raigosa" wrote in message news:
Saludos:

Creo haber visto alguna vez una macro que lo que hacia era modificar el menu click derecho sobre una hoja de calculo en
particular, y especificamente el click derecho en la pestaña, cambiando lo que tiene que hacer ese comando en particular, he
estado buscando "eventos" y encontre este

Private Sub worksheet_beforerightclick(ByVal Target As Excel.Range, _
Cancel As Boolean)
Cancel = True
MsgBox "Shortcut menus are disabled in this worksheet!"
End Sub

Este evento anula el uso del click derecho en la hoja, luo qe busco es un evento que anule el comando Eliminar del click derecho
en la pestaña.

QAP

Gabriel Raigosa
Medellín - Colombia

"Héctor Miguel" escribió en el mensaje news:%23SYA4%
hola, Gabriel !

Normalmente al proteger un libro se protege la estructura, de esta manera no se pueden insertar hojas y tampoco eliminar.
Pero si necesito insertar hojas, y lo que quiero es proteger una hoja en particular contra eliminacion, como se podria hacer?
la hoja no se puede ocultar por que es una base de de datos en la cual se agregan datos
y ocasionalmente se agregan otras hojas y se eliminan
(aquellas que aparecen al dar doble click en un campo de tabla dinamica y luego de imprimir un reporte se eliminan)



[primero]: no hay ningun 'impedimento' para que puedas seguir agregando datos a cualquier hoja -> aun 'oculta' ;)
-> Worksheets("Mi Hoja Oculta").Range("a65536").End(xlUp).Offset(1) = "Nuevo dato"
[supongo que con lo anterior, pudiera ya no ser necesario lo siguiente]...

[segundo]: si las hojas las eliminas por codigo... puedes des/re/proteger el libro y 'en el inter', eliminas 'la hoja' ;)
Sub Eliminar_Hoja_En_Libro_Protegido()
ThisWorkbook.Unprotect "password"
Application.DisplayAlerts = False
Worksheets("Hoja2").Delete
Application.DisplayAlerts = True
ThisWorkbook.Protect "password", True, True
End Sub

solo 'asegurate' que la hoja que eliminas... sea 'la correcta' :))

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












Respuesta Responder a este mensaje
#10 KL
31/12/2005 - 11:50 | Informe spam
Hola chicos,

"Héctor Miguel" wrote in message
1) la unica 'alternativa' [que veo] para detectar una seleccion multiple de hojas...
es 'buscar' si se cumple alguna de las siguientes 'condiciones'...
a) la barra de titulos de la aplicacion mostraria al final -> [Grupo] o... [Group] si excel es en ingles
y 'bastaria' con 'verificar' los ultimos 7 caracteres a la derecha de Application.Caption ;)
[obviamente, en tanto NO se 'personalice' el caption de la aplicacion mediante macros] :))
b) el primer control de la barra de comandos 'Ply' estaria visible [es el 'popup' para -> desagrupar hojas]
y bastaria con 'verificar' si 'devuelve' Verdadero... -> Application.CommandBars("Ply").Controls(1).Visible



Para esta parte existe una forma como mas natural que es:

If ActiveWindow.SelectedSheets.Count>1 Then
ActiveSheet.Select
End If

o

For Each hoja in ActiveWindow.SelectedSheets
Select Case hoja.Name
Case "Hoja1", "Hoja5", "Hoja22"
Case Else
ActiveSheet.Select
End Select
Next hoja

El problema creo que aparte de un procedimiento programado para ejecutarse cada x-momento de tiempo no hay forma humana de
interceptar el proceso de seleccion de multiples hojas ni el clic derecho sobre la pestana, digo yo.

Saludos,
KL
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida