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

#1 Gabriel Raigosa
28/12/2005 - 17:08 | Informe spam
Voy a ensayar y te comento.

TKS...

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
#2 Gabriel Raigosa
29/12/2005 - 08:47 | Informe spam
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
#3 KL
29/12/2005 - 13:08 | Informe spam
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
#4 Gabriel Raigosa
29/12/2005 - 15:02 | Informe spam
Saludos:

Gracias por tu ayuda. Te cuento que he hecho lo siguiente:

he puesto dos eventos en el codigo de la hoja1 (base de datos) y la hoja2
(tabla dinamica).

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

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

Las dos hojas estan parcialmente protegidas, si seleciona alguna de ellas
desaparece la opcion borrar, lo que sucedio originalmente fue que un usuario
borro una base de datos al borrar varias hojas de un libro, nunca debio
borrar la base de datos hoja1.

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.

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.

De momento ya puede implementar esta macro, que puede proteger la base de
datos,

?existe algun evento que detecte la selecion de una hoja?

TKS. por tu ayuda pasada y futura.

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
#5 KL
29/12/2005 - 16:39 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida