Anular la opción mover

12/08/2009 - 04:34 por Francesca Brasso | Informe spam
Hola necesito un código para anular la posibilidad de mover celdas.
Agradecida de quien me la pueda proporcionar.
Francesca

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
12/08/2009 - 05:27 | Informe spam
hola, Francesca !

... necesito un codigo para anular la posibilidad de mover celdas...



(hasta donde se...) existen varias formas de "mover" celdas (p.e. "arrastrar", cortar/pegar, etc.)
y algunas de las configuraciones de este tipo de acciones son OPCIONES DEL USUARIO, o sea...
si las vas a "administrar", NO te olvides de "dejarlas como estaban" (son las preferencias del usuario)

tambien hay varias alternativas para evitar (hasta un cierto grado) el uso de Copiar_Cortar_Pegar
ademas de los botones, estan los atajos {Ctr}+C, {Ctrl}+X, {Ctrl}+V, {Mayusc}+{Insert} (etc.)
... inclusive, se podrian crear al vuelo mas botones (si ya los tenias bloqueados) :((

te paso un adelanto en seguida y... si cualquier duda (o informacion adicional)... comentas?
OJO: no estan contempladas para ser usadas (transparentemente) con la version 2007
saludos,
hector.

(en los modulos de eventos de hojas y libro p.e.)
en el evento _selectionchange (de la/s hoja/s)
en los eventos _activate y _deactivate (de la/s hoja/s y del libro)

-> la mas sencilla seria utilizar -> Application.CutCopyMode = False <-
-> otra seria el uso de los mismos eventos con apoyo de codigo +/- como el siguiente:
-> en un modulo de codigo normal (nota: el CXV es solo por las letras de los atajos)

' macro para cancelar el uso de cualquier boton y atajos de copiado/pegado
Sub CXV_No()
CXV_Si_No 19, False: CXV_Si_No 21, False
CXV_Si_No 22, False: CXV_Si_No 755, False
With Application
.OnKey "^x", "": .OnKey "^c", "": .OnKey "^v", "": .OnKey "+{Del}", "": .OnKey "+{Insert}", ""
.EditDirectlyInCell = False: .CellDragAndDrop = False
End With: CommandBars("ToolBar List").Enabled = False
End Sub

' macro para liberar el uso de los botones y atajos de copiado/pegado
Sub CXV_Si()
CXV_Si_No 19, True: CXV_Si_No 21, True
CXV_Si_No 22, True: CXV_Si_No 755, True
With Application
.OnKey "^x": .OnKey "^c": .OnKey "^v": .OnKey "+{Del}": .OnKey "+{Insert}"
.EditDirectlyInCell = True: .CellDragAndDrop = True
End With: CommandBars("ToolBar List").Enabled = True
End Sub

' funcion auxiliar para cancelar/liberar el uso de los comandos
Private Function CXV_Si_No(Num As Integer, Si_No As Boolean)
Dim Barra As CommandBar, Boton As CommandBarControl
On Error Resume Next
For Each Barra In Application.CommandBars
Set Boton = Barra.FindControl(Id:=Num, Recursive:=True)
If Not Boton Is Nothing Then Boton.Enabled = Si_No
Next: Set Boton = Nothing
End Function

nota: las dos opciones anteriores podrian presentar la siguiente falla:
que pasa si el usuario abre el libro SIN permiso de usar macros?
Respuesta Responder a este mensaje
#2 Francesca Brasso
12/08/2009 - 17:44 | Informe spam
Ufff, veo que es bastante complicado. Lo pregunto de otra forma: ¿se puede
anular la posibilidad de mover celdas al proteger la hoja?
Algo así como las opciones de permitir/impedir insertar
filas/columnas/hipervínculos que aparecen al proteger la hoja.


"Héctor Miguel" escribió en el mensaje de
noticias news:
hola, Francesca !

... necesito un codigo para anular la posibilidad de mover celdas...



(hasta donde se...) existen varias formas de "mover" celdas (p.e.
"arrastrar", cortar/pegar, etc.)
y algunas de las configuraciones de este tipo de acciones son OPCIONES DEL
USUARIO, o sea...
si las vas a "administrar", NO te olvides de "dejarlas como estaban" (son
las preferencias del usuario)

tambien hay varias alternativas para evitar (hasta un cierto grado) el uso
de Copiar_Cortar_Pegar
ademas de los botones, estan los atajos {Ctr}+C, {Ctrl}+X, {Ctrl}+V,
{Mayusc}+{Insert} (etc.)
... inclusive, se podrian crear al vuelo mas botones (si ya los tenias
bloqueados) :((

te paso un adelanto en seguida y... si cualquier duda (o informacion
adicional)... comentas?
OJO: no estan contempladas para ser usadas (transparentemente) con la
version 2007
saludos,
hector.

(en los modulos de eventos de hojas y libro p.e.)
en el evento _selectionchange (de la/s hoja/s)
en los eventos _activate y _deactivate (de la/s hoja/s y del libro)

-> la mas sencilla seria utilizar -> Application.CutCopyMode = False <-
-> otra seria el uso de los mismos eventos con apoyo de codigo +/- como el
siguiente:
-> en un modulo de codigo normal (nota: el CXV es solo por las letras de
los atajos)

' macro para cancelar el uso de cualquier boton y atajos de copiado/pegado
Sub CXV_No()
CXV_Si_No 19, False: CXV_Si_No 21, False
CXV_Si_No 22, False: CXV_Si_No 755, False
With Application
.OnKey "^x", "": .OnKey "^c", "": .OnKey "^v", "": .OnKey "+{Del}", "":
.OnKey "+{Insert}", ""
.EditDirectlyInCell = False: .CellDragAndDrop = False
End With: CommandBars("ToolBar List").Enabled = False
End Sub

' macro para liberar el uso de los botones y atajos de copiado/pegado
Sub CXV_Si()
CXV_Si_No 19, True: CXV_Si_No 21, True
CXV_Si_No 22, True: CXV_Si_No 755, True
With Application
.OnKey "^x": .OnKey "^c": .OnKey "^v": .OnKey "+{Del}": .OnKey
"+{Insert}"
.EditDirectlyInCell = True: .CellDragAndDrop = True
End With: CommandBars("ToolBar List").Enabled = True
End Sub

' funcion auxiliar para cancelar/liberar el uso de los comandos
Private Function CXV_Si_No(Num As Integer, Si_No As Boolean)
Dim Barra As CommandBar, Boton As CommandBarControl
On Error Resume Next
For Each Barra In Application.CommandBars
Set Boton = Barra.FindControl(Id:=Num, Recursive:=True)
If Not Boton Is Nothing Then Boton.Enabled = Si_No
Next: Set Boton = Nothing
End Function

nota: las dos opciones anteriores podrian presentar la siguiente falla:
que pasa si el usuario abre el libro SIN permiso de usar macros?

Respuesta Responder a este mensaje
#3 Héctor Miguel
12/08/2009 - 18:34 | Informe spam
hola, Francesca !

__ 1 __
Ufff, veo que es bastante complicado.



1) solo hasta el grado de seguridad que quisieras dar a ese archivo
y/o al nivel de conocimientos, habilidades y recursos de los usuarios a quienes lo dirijes (?)

__ 2 __
Lo pregunto de otra forma: se puede anular la posibilidad de mover celdas al proteger la hoja?
Algo asi como las opciones de permitir/impedir insertar filas/columnas/hipervinculos que aparecen al proteger la hoja.



2) de otra forma ?...
si TODAS las celdas de tu hoja estan "bloquedas", al proteger la hoja no tienes de que preocuparte
para las celdas desbloqueadas, no puedes impedir que sobre ellas "arrastren/muevan/corten y peguen/..." (lo que sea)
(a menos que hagas uso de las sugerencias anotadas en el mensaje anterior ?)

saludos,
hector.

__ previos __
... necesito un codigo para anular la posibilidad de mover celdas...



(hasta donde se...) existen varias formas de "mover" celdas (p.e. "arrastrar", cortar/pegar, etc.)
y algunas de las configuraciones de este tipo de acciones son OPCIONES DEL USUARIO, o sea...
si las vas a "administrar", NO te olvides de "dejarlas como estaban" (son las preferencias del usuario)

tambien hay varias alternativas para evitar (hasta un cierto grado) el uso de Copiar_Cortar_Pegar
ademas de los botones, estan los atajos {Ctr}+C, {Ctrl}+X, {Ctrl}+V, {Mayusc}+{Insert} (etc.)
... inclusive, se podrian crear al vuelo mas botones (si ya los tenias bloqueados) :((

te paso un adelanto en seguida y... si cualquier duda (o informacion adicional)... comentas?
OJO: no estan contempladas para ser usadas (transparentemente) con la version 2007
saludos,
hector.

(en los modulos de eventos de hojas y libro p.e.)
en el evento _selectionchange (de la/s hoja/s)
en los eventos _activate y _deactivate (de la/s hoja/s y del libro)

-> la mas sencilla seria utilizar -> Application.CutCopyMode = False <-
-> otra seria el uso de los mismos eventos con apoyo de codigo +/- como el siguiente:
-> en un modulo de codigo normal (nota: el CXV es solo por las letras de los atajos)

' macro para cancelar el uso de cualquier boton y atajos de copiado/pegado
Sub CXV_No()
CXV_Si_No 19, False: CXV_Si_No 21, False
CXV_Si_No 22, False: CXV_Si_No 755, False
With Application
.OnKey "^x", "": .OnKey "^c", "": .OnKey "^v", "": .OnKey "+{Del}", "": .OnKey "+{Insert}", ""
.EditDirectlyInCell = False: .CellDragAndDrop = False
End With: CommandBars("ToolBar List").Enabled = False
End Sub

' macro para liberar el uso de los botones y atajos de copiado/pegado
Sub CXV_Si()
CXV_Si_No 19, True: CXV_Si_No 21, True
CXV_Si_No 22, True: CXV_Si_No 755, True
With Application
.OnKey "^x": .OnKey "^c": .OnKey "^v": .OnKey "+{Del}": .OnKey "+{Insert}"
.EditDirectlyInCell = True: .CellDragAndDrop = True
End With: CommandBars("ToolBar List").Enabled = True
End Sub

' funcion auxiliar para cancelar/liberar el uso de los comandos
Private Function CXV_Si_No(Num As Integer, Si_No As Boolean)
Dim Barra As CommandBar, Boton As CommandBarControl
On Error Resume Next
For Each Barra In Application.CommandBars
Set Boton = Barra.FindControl(Id:=Num, Recursive:=True)
If Not Boton Is Nothing Then Boton.Enabled = Si_No
Next: Set Boton = Nothing
End Function

nota: las dos opciones anteriores podrian presentar la siguiente falla:
que pasa si el usuario abre el libro SIN permiso de usar macros?
Respuesta Responder a este mensaje
#4 Francesca Brasso
13/08/2009 - 18:10 | Informe spam
Héctor gracias por tus respuestas. Probé las macros que posteaste y
funcionan bien pero no impiden 'arrastrar' una celda. ¿Es posible también
anular la opción de 'arrastrar' celdas?. La opción de copiado-pegado no
quiero anularla, solamente cortar-pegar, o sea mover.
Algo que olvidé mencionar en mi post anterior es que quiero impedir que el
usuario mueva celdas SOLAMENTE en las columnas A, D y E. El resto me da lo
mismo.

Otra alternativa sería, (no sé si es más facil) no anular ninguna opción
pero cuando el usuario mueva de cualquier forma una celda (arrastre/use
Ctrl+X/botón Editar Cortar/botón derecho del mouse Cortar, etc) aparezca un
mensaje advirtiendo que no se permite mover celdas y que haga Ctrl+Z para
dejar la celda como estaba.

Gracias
Francesca

"Héctor Miguel" escribió en el mensaje de
noticias news:
hola, Francesca !

__ 1 __
Ufff, veo que es bastante complicado.



1) solo hasta el grado de seguridad que quisieras dar a ese archivo
y/o al nivel de conocimientos, habilidades y recursos de los usuarios a
quienes lo dirijes (?)

__ 2 __
Lo pregunto de otra forma: se puede anular la posibilidad de mover celdas
al proteger la hoja?
Algo asi como las opciones de permitir/impedir insertar
filas/columnas/hipervinculos que aparecen al proteger la hoja.



2) de otra forma ?...
si TODAS las celdas de tu hoja estan "bloquedas", al proteger la hoja
no tienes de que preocuparte
para las celdas desbloqueadas, no puedes impedir que sobre ellas
"arrastren/muevan/corten y peguen/..." (lo que sea)
(a menos que hagas uso de las sugerencias anotadas en el mensaje
anterior ?)

saludos,
hector.

__ previos __
... necesito un codigo para anular la posibilidad de mover celdas...



(hasta donde se...) existen varias formas de "mover" celdas (p.e.
"arrastrar", cortar/pegar, etc.)
y algunas de las configuraciones de este tipo de acciones son OPCIONES
DEL USUARIO, o sea...
si las vas a "administrar", NO te olvides de "dejarlas como estaban"
(son las preferencias del usuario)

tambien hay varias alternativas para evitar (hasta un cierto grado) el
uso de Copiar_Cortar_Pegar
ademas de los botones, estan los atajos {Ctr}+C, {Ctrl}+X, {Ctrl}+V,
{Mayusc}+{Insert} (etc.)
... inclusive, se podrian crear al vuelo mas botones (si ya los tenias
bloqueados) :((

te paso un adelanto en seguida y... si cualquier duda (o informacion
adicional)... comentas?
OJO: no estan contempladas para ser usadas (transparentemente) con la
version 2007
saludos,
hector.

(en los modulos de eventos de hojas y libro p.e.)
en el evento _selectionchange (de la/s hoja/s)
en los eventos _activate y _deactivate (de la/s hoja/s y del libro)

-> la mas sencilla seria utilizar -> Application.CutCopyMode = False <-
-> otra seria el uso de los mismos eventos con apoyo de codigo +/- como
el siguiente:
-> en un modulo de codigo normal (nota: el CXV es solo por las letras de
los atajos)

' macro para cancelar el uso de cualquier boton y atajos de
copiado/pegado
Sub CXV_No()
CXV_Si_No 19, False: CXV_Si_No 21, False
CXV_Si_No 22, False: CXV_Si_No 755, False
With Application
.OnKey "^x", "": .OnKey "^c", "": .OnKey "^v", "": .OnKey "+{Del}",
"": .OnKey "+{Insert}", ""
.EditDirectlyInCell = False: .CellDragAndDrop = False
End With: CommandBars("ToolBar List").Enabled = False
End Sub

' macro para liberar el uso de los botones y atajos de copiado/pegado
Sub CXV_Si()
CXV_Si_No 19, True: CXV_Si_No 21, True
CXV_Si_No 22, True: CXV_Si_No 755, True
With Application
.OnKey "^x": .OnKey "^c": .OnKey "^v": .OnKey "+{Del}": .OnKey
"+{Insert}"
.EditDirectlyInCell = True: .CellDragAndDrop = True
End With: CommandBars("ToolBar List").Enabled = True
End Sub

' funcion auxiliar para cancelar/liberar el uso de los comandos
Private Function CXV_Si_No(Num As Integer, Si_No As Boolean)
Dim Barra As CommandBar, Boton As CommandBarControl
On Error Resume Next
For Each Barra In Application.CommandBars
Set Boton = Barra.FindControl(Id:=Num, Recursive:=True)
If Not Boton Is Nothing Then Boton.Enabled = Si_No
Next: Set Boton = Nothing
End Function

nota: las dos opciones anteriores podrian presentar la siguiente falla:
que pasa si el usuario abre el libro SIN permiso de usar macros?






Respuesta Responder a este mensaje
#5 Héctor Miguel
13/08/2009 - 19:49 | Informe spam
hola, Francesca !

__ 1 __
Probe las macros que posteaste... pero no impiden 'arrastrar' una celda.
Es posible tambien anular la opcion de 'arrastrar' celdas?.



1) la instruccion que (des/re)habilita la caracteristica de "arrastrar" celdas es:
application.celldraganddrop = false (para deshabilitar, o true para re/habilitar)
y generalmente se usaria en el evento _selectionchange en el modulo de codigo de "la hoja"

(podrias comentar exactamente que, como y donde probaste ?)

__ 2 __
La opcion de copiado-pegado no quiero anularla, solamente cortar-pegar, o sea mover.



2) considerando que para poder "pegar" lo que venga de un "cortar" necesita seleccionar el rango a "pegar donde"...
copia/pega (o escribe) las siguientes instrucciones en el modulo de codigo de "esa" hoja:

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

__ 3 __
... olvide mencionar... que quiero impedir que el usuario mueva celdas SOLAMENTE en las columnas A, D y E...



3) que significa "MOVER EN... las columnas A, D y E solamente" (???)
- que las celdas de las columnas A, D y E NO pueden "ser llevadas" a otro rango ???
- que NADA se puede "depositar" SOBRE las celdas de las columnas A, D y E ???

__ 4 __
Otra alternativa seria... no anular ninguna opcion pero cuando el usuario mueva de cualquier forma una celda
(arrastre/use Ctrl+X/boton Editar Cortar/boton derecho del mouse Cortar, etc) aparezca un mensaje
advirtiendo que no se permite mover celdas y que haga Ctrl+Z para dejar la celda como estaba.



4) (creo que) te sirve mas la propuesta en el punto 2 (???)

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida