Evitar Cortar-Pegar en hoja protegida

07/05/2005 - 03:40 por Esteban Dido | Informe spam
Hola,
En una hoja protegida, ¿Es posible impedir que se pueda hacer Cortar-Pegar?

Saludos

Preguntas similare

Leer las respuestas

#1 Esteban Dido
10/05/2005 - 01:58 | Informe spam
Hola, KL y H,
Después de darle varias vueltas a lo que "conversamos", se me ocurrió que lo
más práctico - y es lo que hice - era olvidar el userform y dejar la
planilla como está, pero "obligando" al usuario a abrir habilitando las
macros. Para ello, oculté dos de las tres hojas del libro, de modo que si
abre sin macros no podrá trabajar. TIENE que abrir con macros para ver las
hojas donde debe ingresar datos. En el código de ambas hojas puse el código
que me enviaste, H con lo que no podrá arrastrar ni cortar pero sí copiar.
Gracias por ese código. Y en un módulo normal puse el siguiente código:

Sub Auto_Open()
Worksheets(1).Visible = True
Worksheets(3).Visible = True
Worksheets(3).Select
End Sub

Sub Auto_Close()
Worksheets(1).Visible = False
Worksheets(3).Visible = False
End Sub

Sólo me queda una pregunta, que sé que ustedes podrán responder: Si el
usuario elige Cerrar, las dos hojas se ocultan. Pero si luego pisa Cancelar,
quiero que se vuelvan a mostrar las hojas. No he podido dar con el código.
Un saludo
E.D.

Saludos
"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> ... un burro hablar frances... mas facil que... este usuario...


aprenda/use/se acostumbre a usar Access. Olvidalo.
==> :DDD

> ... si no doy con la forma de hacer ese formulario, prefiero arreglar


las formulas que dañe
> ... hasta hacerlo entender que... tiene que usar [copiar-pegar] para


trasladar datos de una celda aotra. (¿entenderá?).

ya 'entrados' en el tema, y [entendiendo que] si no 'te queda' otra que


'obligarlo' a usar las macros [por el userform]...
haz una prueba con los siguientes 'trucos' [obviamente usando las


macros]...
en el modulo de codigo de la hoja protegida ==> Private Sub Worksheet_Activate()
Application.CellDragAndDrop = False ' NO se pueden 'arrastrar' las


celdas :-(
End Sub
Private Sub Worksheet_Deactivate()
Application.CellDragAndDrop = True' YA se pueden 'arrastrar las celdas


:))
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = xlCut Then Application.CutCopyMode = False


' SOLO se 'permite' el copy NO el cut :))
End Sub

si cualquier duda... comentas?
saludos,
hector.


Respuesta Responder a este mensaje
#2 KL
10/05/2005 - 02:25 | Informe spam
Hola Esteban,

Ya puestos a restringir los derechos de usuario, que tal si al cerrar el
archivo forzamos el Save (sin pedir permiso) y eliminamos la opcion de
Cancelar. Algo asi:

Sub Auto_Close()
Worksheets(1).Visible = False
Worksheets(3).Visible = False
ThisWorkbook.Save
End Sub

Saludos,
KL
Respuesta Responder a este mensaje
#3 Esteban Dido
10/05/2005 - 03:12 | Informe spam
No KL,
Ya lo había pensado, pero no me gusta. Si sólo pudieramos eliminmar la
opcion de Cancelar podría ser, pero no quiero eliminar la opcion de cerrar
sin guardar.

Saludos
"KL" escribió en el mensaje
news:
Hola Esteban,

Ya puestos a restringir los derechos de usuario, que tal si al cerrar el
archivo forzamos el Save (sin pedir permiso) y eliminamos la opcion de
Cancelar. Algo asi:

Sub Auto_Close()
Worksheets(1).Visible = False
Worksheets(3).Visible = False
ThisWorkbook.Save
End Sub

Saludos,
KL


Respuesta Responder a este mensaje
#4 Héctor Miguel
10/05/2005 - 10:07 | Informe spam
hola, Esteban !

... lo habia pensado, pero no me gusta. Si... pudieramos eliinmar la opcion de Cancelar podria ser
... pero no quiero eliminar la opcion de cerrar sin guardar.



-> ya que estas 'forzando' al usuario para que habilite las macros :DD
[todavia] existen algunos 'riesgos' para que 'eche por la borda' la proteccion de las hojas 'ocultas' [p.e.]
-> si NO da 'su permiso' para que se haga uso de las macros [o sea que de todos modos 'lo abre']...
a) podria mostrar las hojas ocultas desde [menu] formato / hoja / mostrar...
=> estabece a las hojas la propiedad .Visible = xlSheetVeryHidden [en lugar de la 'simple' False]
b) estas usando la propiedad 'indice' ->Worksheets(1)<- [pero 'igual' pudiera ser si usas el nombre]...
[y no estoy seguro de que se trate de -solamente- las tres hojas que pones en el ejemplo, pero...]
-> si les cambia el nombre o la 'posicion'... YA NO 'van a ser'... las que tu 'suponias' :-( <= OJO
=> [te sugiero] CAMBIALES y usa la propiedad 'CodeName' [la que esta entre parentesis en las propiedades]
c) suponiendo que habilita las macros... si graba el archivo cuando estan visibles las hojas 'ocultables'...
y sin hacer mas modificaciones... CIERRA el archivo... 'la proxima vez' [que lo abra]... van a seguir visibles :-(
[ya sabes... le diceque no al 'famoso cuadrito' de... desea guardar los cambios...]
d) aunque puedes 'monitorear' la advertencia [esa la del cuadrito] a traves del evento '_beforeclose' de thisworkbook...
lo realmente 'importante' [creo yo] y que es necesario 'proteger'... es el evento ->_beforesave<-
[para que siempre que se grabe el archivo, las hojas 'ocultables' permanezcan ocultas] ;)

te paso un ejemplo usando 3 hojas, los eventos, las propiedades y los codenames mencionados
[adapta segun tus necesidades] estoy usando los siguientes codenames:
pantalla = es el codename de la hoja que se mostrara cuando el libro se abre SIN permiso de usar macros
presentar = es el codename de la hoja que se muestra al habilitar las macros [la que no queda como 'activa']
procesos = es el codename de la hoja que queda como 'activa' al abrirse 'con permiso' de usar macros

si cualquier duda... comentas?
saludos,
hector.
en el modulo de codigo del libro [ThisWorkbook] ==Dim Cerrando As Boolean, Activa As String
Private Sub Workbook_Open()
MostrarHojas
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' http://j-walk.com/ss/excel/tips/tip78.htm
If Not Me.Saved Then
Select Case MsgBox( _
"¿Desea guardar los cambios efectuados en '" & _
Me.Name & "'?", vbYesNoCancel + vbQuestion)
Case vbYes: OcultarHojas: Cerrando = True: Me.Save
Case vbNo: Me.Saved = True
Case vbCancel: Cancel = True: Exit Sub
End Select
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Cerrando Then Exit Sub
Application.ScreenUpdating = False
Activa = ActiveSheet.Name
OcultarHojas
Me.Save
MostrarHojas
Sheets(Activa).Activate
Cancel = True
End Sub
Private Sub MostrarHojas()
Procesos.Visible = xlSheetVisible
Pantalla.Visible = xlSheetVeryHidden
Presentar.Visible = xlSheetVisible
Me.Saved = True
End Sub
Private Sub OcultarHojas()
Pantalla.Visible = xlSheetVisible
Presentar.Visible = xlSheetVeryHidden
Procesos.Visible = xlSheetVeryHidden
End Sub
Respuesta Responder a este mensaje
#5 Esteban Dido
13/05/2005 - 04:48 | Informe spam
Hola Héctor,
No había tenido tiempo de seguir con este tema, pero te cuento que sí sé que
se pueden hacer aparecer las hojas mediante formato-hoja-mostrar, y tambien
grabar y luego guardar sin cambios, pero dudo que este usuario lo sepa, por
lo que no me preocupa mucho. Yo creo que entenderá que estoy evitando que
haga cosas que a él le van a provocar problemas, por lo que sé que será
consciente y no lo seguirá haciendo. No es un tarado ni mucho menos.
Simplemente trato de evitar que haga cosas por olvido, no por porfiado. De
todos modos voy a estudiar el código que me diste y voy a usarlo. "La
seguridad siempre es bienvenida"
Un saludo y gracias por seguir aportando.

Saludos
"Héctor Miguel" escribió en el mensaje
news:
hola, Esteban !

> ... lo habia pensado, pero no me gusta. Si... pudieramos eliinmar la


opcion de Cancelar podria ser
> ... pero no quiero eliminar la opcion de cerrar sin guardar.

-> ya que estas 'forzando' al usuario para que habilite las macros :DD
[todavia] existen algunos 'riesgos' para que 'eche por la borda' la


proteccion de las hojas 'ocultas' [p.e.]
-> si NO da 'su permiso' para que se haga uso de las macros [o sea que de


todos modos 'lo abre']...
a) podria mostrar las hojas ocultas desde [menu] formato / hoja /


mostrar...
=> estabece a las hojas la propiedad .Visible = xlSheetVeryHidden


[en lugar de la 'simple' False]
b) estas usando la propiedad 'indice' ->Worksheets(1)<- [pero 'igual'


pudiera ser si usas el nombre]...
[y no estoy seguro de que se trate de -solamente- las tres hojas


que pones en el ejemplo, pero...]
-> si les cambia el nombre o la 'posicion'... YA NO 'van a ser'...


las que tu 'suponias' :-( <= OJO
=> [te sugiero] CAMBIALES y usa la propiedad 'CodeName' [la que


esta entre parentesis en las propiedades]
c) suponiendo que habilita las macros... si graba el archivo cuando


estan visibles las hojas 'ocultables'...
y sin hacer mas modificaciones... CIERRA el archivo... 'la proxima


vez' [que lo abra]... van a seguir visibles :-(
[ya sabes... le diceque no al 'famoso cuadrito' de... desea


guardar los cambios...]
d) aunque puedes 'monitorear' la advertencia [esa la del cuadrito] a


traves del evento '_beforeclose' de thisworkbook...
lo realmente 'importante' [creo yo] y que es necesario


'proteger'... es el evento ->_beforesave<-
[para que siempre que se grabe el archivo, las hojas 'ocultables'


permanezcan ocultas] ;)

te paso un ejemplo usando 3 hojas, los eventos, las propiedades y los


codenames mencionados
[adapta segun tus necesidades] estoy usando los siguientes codenames:
pantalla = es el codename de la hoja que se mostrara cuando el libro se


abre SIN permiso de usar macros
presentar = es el codename de la hoja que se muestra al habilitar las


macros [la que no queda como 'activa']
procesos = es el codename de la hoja que queda como 'activa' al abrirse


'con permiso' de usar macros

si cualquier duda... comentas?
saludos,
hector.
en el modulo de codigo del libro [ThisWorkbook] ==> Dim Cerrando As Boolean, Activa As String
Private Sub Workbook_Open()
MostrarHojas
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' http://j-walk.com/ss/excel/tips/tip78.htm
If Not Me.Saved Then
Select Case MsgBox( _
"¿Desea guardar los cambios efectuados en '" & _
Me.Name & "'?", vbYesNoCancel + vbQuestion)
Case vbYes: OcultarHojas: Cerrando = True: Me.Save
Case vbNo: Me.Saved = True
Case vbCancel: Cancel = True: Exit Sub
End Select
End If
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As


Boolean)
If Cerrando Then Exit Sub
Application.ScreenUpdating = False
Activa = ActiveSheet.Name
OcultarHojas
Me.Save
MostrarHojas
Sheets(Activa).Activate
Cancel = True
End Sub
Private Sub MostrarHojas()
Procesos.Visible = xlSheetVisible
Pantalla.Visible = xlSheetVeryHidden
Presentar.Visible = xlSheetVisible
Me.Saved = True
End Sub
Private Sub OcultarHojas()
Pantalla.Visible = xlSheetVisible
Presentar.Visible = xlSheetVeryHidden
Procesos.Visible = xlSheetVeryHidden
End Sub


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida