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

#11 Francesca Brasso
15/08/2009 - 03:37 | Informe spam
No Héctor, no me funciona. Se sigue pudiendo arrastrar.

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

Tu macro es 'casi' lo que necesito, solo que aun permite mover hasta las
columnas A, D y E...



sip... cuando se usa "arrastrar" desde otros rangos (no cuando se usa
cortar/pegar, creo eehhh ?) :-(
(generalmente) hay "detalles" que no se alcanzan a adivinar/desprender/...
en directo de las consultas (?)

segun parece, lo mas conveniente es inhabilitar la caracteristica de
"arrastrar" para esa hoja (total y exclusivamente)
y probablemente debieras administrar (des/re/habilitando) este arrastre
tanto en los eventos del libro como de "la hoja" (?)

analiza y prueba con las siguientes correcciones:
OJO: utiliza el nombre real de la hoja que necesitas controlar en el
primer procedimiento
(el ejemplo asume que se trata de "hoja1")

== en el modulo de codigo del libro (ThisWorkbook) => Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = LCase(ActiveSheet.Name) <> "hoja1"
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = True
End Sub

== en el modulo de codigo de "esa" hoja => Private Sub Worksheet_Activate()
Application.CellDragAndDrop = False
End Sub
Private Sub Worksheet_Deactivate()
Application.CellDragAndDrop = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("a:a,d:e")) Is Nothing Then Exit Sub
With Application
If .CutCopyMode = xlCut Then .CutCopyMode = False
Do While .CutCopyMode = xlCopy
DoEvents
Loop
End With
End Sub

saludos,
hector.

Respuesta Responder a este mensaje
#12 Francesca Brasso
16/08/2009 - 00:26 | Informe spam
Hola, he estado haciendo unas pruebas y en realidad puedo acotar un poco mi
problema: que no se pueda mover ninguna celda 'dentro de' las columnas A, D
y E ni tampoco llevar una celda de cualquier columna (incluynedo a las
columnas A, D y E) 'a' las columnas A, D y E. No me afecta que se puedan
mover celdas 'de' las columnas A, D y E a cualquier otra columna que no sea
ni la A ni la D ni la E.
Al decir 'mover' quiero decir, por supuesto, 'arrastrar/cortar-pegar, etc.'
Gracias
Francesca

"Francesca Brasso" escribió en el mensaje de
noticias news:%
Bien, voy a tratar de explicar de mejor forma lo que necesito, despues de
uno o dos días veo que fui poco clara en mi exposición.

En un rango determinado de una hoja, digamos de A1 a J3000 quiero que no
se pueda mover (arrastrar/cortar-pegar, etc.) ninguna celda a/de las
columnas A, D y E (ni de las columnas indicadas a otras columnas ni dentro
de la misma columna ni de otra columna a alguna de las nombradas).

No hay problema con copiar-pegar.

Gracias
Francesca


"Francesca Brasso" escribió en el mensaje de
noticias news:
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
#13 Héctor Miguel
17/08/2009 - 04:54 | Informe spam
hola, Francesca !

... he estado haciendo unas pruebas y en realidad puedo acotar un poco mi problema:
que no se pueda mover ninguna celda 'dentro de' las columnas A, D y E
ni tampoco llevar una celda de cualquier columna (incluynedo a las columnas A, D y E)
'a' las columnas A, D y E. No me afecta que se puedan mover celdas 'de' las columnas A, D y E
a cualquier otra columna que no sea ni la A ni la D ni la E.
Al decir 'mover' quiero decir, por supuesto, 'arrastrar/cortar-pegar, etc.' ...



en mi tercer mensaje en este hilo te hacia una pregunta que (hasta el momento) no has respondido...
(podrias comentar exactamente que, como y donde probaste ?)



(creo que) si ya has hecho varios intentos, vendria bien conocerlos... exactamente (?????)

saludos,
hector.
Respuesta Responder a este mensaje
#14 Francesca Brasso
17/08/2009 - 20:31 | Informe spam
Tienes razón Héctor fui muy descuidada al no responderte el detalle que me
pediste.
Lo que hice fue copiar tus códigos en el código de una hoja y ninguno de
ellos cumple las expectativas.
Seguro que copié mal, algo me debe haber faltado. Hice copiar-pegar. Pero no
los puse en ningun 'evento' en particular.
Saludos
Fran

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

... he estado haciendo unas pruebas y en realidad puedo acotar un poco mi
problema:
que no se pueda mover ninguna celda 'dentro de' las columnas A, D y E
ni tampoco llevar una celda de cualquier columna (incluynedo a las
columnas A, D y E)
'a' las columnas A, D y E. No me afecta que se puedan mover celdas 'de'
las columnas A, D y E
a cualquier otra columna que no sea ni la A ni la D ni la E.
Al decir 'mover' quiero decir, por supuesto, 'arrastrar/cortar-pegar,
etc.' ...



en mi tercer mensaje en este hilo te hacia una pregunta que (hasta el
momento) no has respondido...
(podrias comentar exactamente que, como y donde probaste ?)



(creo que) si ya has hecho varios intentos, vendria bien conocerlos...
exactamente (?????)

saludos,
hector.

Respuesta Responder a este mensaje
#15 Héctor Miguel
17/08/2009 - 21:20 | Informe spam
hola, Francesca !

Lo que hice fue copiar tus codigos en el codigo de una hoja y ninguno de ellos cumple las expectativas.
Seguro que copie mal, algo me debe haber faltado. Hice copiar-pegar. Pero no los puse en ningun 'evento' en particular...



1) en el cuarto mensaje hay un comentario que sigue siendo aplicable a esta propuesta:
==OJO: si se "cortan" dos o mas columnas y el rango de "pegado" inicia en una columna NO protegida (B:C)...
no se si tambien quisieras prevenir/evitar/corregir/... este tipo de eventualidades (y muy probablemente otras similares) ???
==
2) en el quinto mensaje hay una propuesta que (segun mis pruebas) hace +/- exactamente lo que solicitas:
==analiza y prueba con las siguientes correcciones:
OJO: utiliza el nombre real de la hoja que necesitas controlar en el primer procedimiento
(el ejemplo asume que se trata de "hoja1")

== en el modulo de codigo del libro (ThisWorkbook) =Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = LCase(ActiveSheet.Name) <> "hoja1"
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = True
End Sub

== en el modulo de codigo de "esa" hoja =Private Sub Worksheet_Activate()
Application.CellDragAndDrop = False
End Sub
Private Sub Worksheet_Deactivate()
Application.CellDragAndDrop = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("a:a,d:e")) Is Nothing Then Exit Sub
With Application
If .CutCopyMode = xlCut Then .CutCopyMode = False
Do While .CutCopyMode = xlCopy
DoEvents
Loop
End With
End Sub
==
comentas donde y como copias/pegas (y pruebas) con estos codigos ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida