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

#6 Francesca Brasso
13/08/2009 - 22:21 | Informe spam
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
#7 Héctor Miguel
13/08/2009 - 23:21 | Informe spam
hola, Francesca !

Bien, voy a tratar de explicar de mejor forma lo que necesito
despues de uno o dos dias veo que fui poco clara en mi exposicion.
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.



no se si habre captado "fielmente" eso de "las columnas indicadas" o lo de "las columnas nombradas" (???)
el siguiente ejemplo, lo copias/pegas (o escribes) en el modulo de codigo de "esa" hoja
y es solo para (tratar de) proteger las columnas A, D y E (que no se pueda arrastrar ni cortar-pegar desde/hasta ellas (?)

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) ???

si cualuier duda (o informacion adicional)... comentas ?
saludos,
hector.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Application
If Intersect(Target, Range("a:a,d:e")) Is Nothing Then GoTo Arrastra
If .CutCopyMode = xlCut Then .CutCopyMode = False
Do While .CutCopyMode = xlCopy
DoEvents
Loop
.CellDragAndDrop = False
Arrastra:
.CellDragAndDrop = Intersect(Target, Range("a:a,d:e")) Is Nothing
End With
End Sub
Respuesta Responder a este mensaje
#8 Francesca Brasso
14/08/2009 - 00:04 | Informe spam
Hola Héctor,

Las "columnas indicadas" o "las columnas nombradas" o las columnas A, D y E
es todo lo msmo, lamento no haberlo dicho muy claro.
Tu macro es 'casi' lo que necesito, sólo que aún permite mover hasta las
columnas A, D y E.

Saludos
Francesca

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

Bien, voy a tratar de explicar de mejor forma lo que necesito
despues de uno o dos dias veo que fui poco clara en mi exposicion.
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.



no se si habre captado "fielmente" eso de "las columnas indicadas" o lo de
"las columnas nombradas" (???)
el siguiente ejemplo, lo copias/pegas (o escribes) en el modulo de codigo
de "esa" hoja
y es solo para (tratar de) proteger las columnas A, D y E (que no se pueda
arrastrar ni cortar-pegar desde/hasta ellas (?)

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) ???

si cualuier duda (o informacion adicional)... comentas ?
saludos,
hector.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Application
If Intersect(Target, Range("a:a,d:e")) Is Nothing Then GoTo Arrastra
If .CutCopyMode = xlCut Then .CutCopyMode = False
Do While .CutCopyMode = xlCopy
DoEvents
Loop
.CellDragAndDrop = False
Arrastra:
.CellDragAndDrop = Intersect(Target, Range("a:a,d:e")) Is Nothing
End With
End Sub

Respuesta Responder a este mensaje
#9 Héctor Miguel
14/08/2009 - 03:18 | Informe spam
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
#10 Francesca Brasso
15/08/2009 - 03:21 | Informe spam
Hola, en la ayuda de Excel (Office 2007) encontré lo siguiente, que es
justamente parte de lo que necesito:

"...Para impedir que los usuarios copien datos y rellenen celdas mediante la
operación de arrastrar y colocar, desactive la casilla Permitir arrastrar y
colocar el controlador de relleno y las celdas (cuadro de diálogo Opciones
de Excel, opciones Avanzadas) y, a continuación, proteja la hoja de
cálculo..."

Pero no me funciona. Luego de proteger la hoja, igual se puede activar la
casilla y arrastrar. ¿Qué estaré haciendo mal?
Fran



"Francesca Brasso" escribió en el mensaje de
noticias news:
Hola necesito un código para anular la posibilidad de mover celdas.
Agradecida de quien me la pueda proporcionar.
Francesca

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