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

#16 Francesca Brasso
17/08/2009 - 22:41 | Informe spam
Hola Héctor,
Copié y pegué el primer código que recien me enviaste en el módulo de código
de un libro recién abierto llamado Libro2 que tiene 3 hojas, Hoja1, Hoja2 y
Hoja3 y el segundo código que me enviaste lo pegué en el módulo de código de
la Hoja1 y lo que consigo es que no se puede hacer cortar-pegar 'a', 'desde'
y 'dentro de' las columnas A, D y E pero también se puede arrastrar 'en',
'a' y 'desde' todas las columnas. Efectivamente (no sé por qué no te
contesté, ¿podrás perdonarme?) pero sería bueno como tú bien dices, proteger
cortar un rango que comienza en una columna como B y C.
¿Bastaría para eso con cambiar Range("a:a,d:e") por Range("a:e")?
Gracias por tu ayuda y por tu paciencia
Francesca

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

Copie y pegue el primer codigo que recien me enviaste en el modulo de codigo de un libro recien abierto
llamado Libro2 que tiene 3 hojas, Hoja1, Hoja2 y Hoja3
y el segundo codigo que me enviaste lo pegue en el modulo de codigo de la Hoja1
y lo que consigo es que no se puede hacer cortar-pegar 'a', 'desde' y 'dentro de' las columnas A, D y E
pero tambien se puede arrastrar 'en', 'a' y 'desde' todas las columnas.
... pero seria bueno como tu bien dices, proteger cortar un rango que comienza en una columna como B y C.
Bastaria para eso con cambiar Range("a:a,d:e") por Range("a:e")?



considera "como operan" (o como se disparan) los eventos utilizados para esta propuesta...

1)
== 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





cuando "navegas" (o te cambias) entre dos o mas libros abiertos...
a) para "otros" libros (Workbook_WindowDeactivate), la caracteristica de "arrastrar" siempre quedara habilitada
b) cuando "regreses" al ThisWorkbook (Workbook_WindowActivate) el "arrastrar" sera desabilitado SI la hoja activa ES "hoja1"
(OJO: aqui no entiendo "como" es que SI puedes "arrastrar" cuando estas en "hoja1" -salvo que aun no hagas cambio de hoja- ?)

2)
== 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





a) cuando te cambias a otra hoja (distinta de "hoja1") la caracteristica de "arrastrar" siempre quedara habilitada
b) cuando "regresas" a la hoja1 (Worksheet_Activate) el "arrastrar" sera desabilitado SIEMPRE
c) dentro de la "hoja1", si estas haciendo un "cortar", sera deshabilitado/vaciado/cancelado/... al seleccionar A, D:E para "pegar"
(es la instruccion que "dice": => If .CutCopyMode = xlCut Then .CutCopyMode = False)

a reserva de conocer eventualidades (como "usos y costumbres"), habria que verificar si se deben incluir otros eventos (?)

comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#18 Francesca Brasso
18/08/2009 - 04:23 | Informe spam
Héctor, recién entiendo por qué no me funcionaba y a ti si. Mi libro sólo
tiene una hoja. Cuando hice las pruebas con un libro nuevo 'nunca' me cambié
de hoja. ¿podemos obviar lo del cambio de libro o de hoja para que el código
cumpla el objetivo?
Gracias nuevamente
Francesca

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

Copie y pegue el primer codigo que recien me enviaste en el modulo de
codigo de un libro recien abierto
llamado Libro2 que tiene 3 hojas, Hoja1, Hoja2 y Hoja3
y el segundo codigo que me enviaste lo pegue en el modulo de codigo de la
Hoja1
y lo que consigo es que no se puede hacer cortar-pegar 'a', 'desde' y
'dentro de' las columnas A, D y E
pero tambien se puede arrastrar 'en', 'a' y 'desde' todas las columnas.
... pero seria bueno como tu bien dices, proteger cortar un rango que
comienza en una columna como B y C.
Bastaria para eso con cambiar Range("a:a,d:e") por Range("a:e")?



considera "como operan" (o como se disparan) los eventos utilizados para
esta propuesta...

1)
== 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





cuando "navegas" (o te cambias) entre dos o mas libros abiertos...
a) para "otros" libros (Workbook_WindowDeactivate), la caracteristica de
"arrastrar" siempre quedara habilitada
b) cuando "regreses" al ThisWorkbook (Workbook_WindowActivate) el
"arrastrar" sera desabilitado SI la hoja activa ES "hoja1"
(OJO: aqui no entiendo "como" es que SI puedes "arrastrar" cuando estas
en "hoja1" -salvo que aun no hagas cambio de hoja- ?)

2)
== 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





a) cuando te cambias a otra hoja (distinta de "hoja1") la caracteristica
de "arrastrar" siempre quedara habilitada
b) cuando "regresas" a la hoja1 (Worksheet_Activate) el "arrastrar" sera
desabilitado SIEMPRE
c) dentro de la "hoja1", si estas haciendo un "cortar", sera
deshabilitado/vaciado/cancelado/... al seleccionar A, D:E para "pegar"
(es la instruccion que "dice": => If .CutCopyMode = xlCut Then
.CutCopyMode = False)

a reserva de conocer eventualidades (como "usos y costumbres"), habria que
verificar si se deben incluir otros eventos (?)

comentas ?
saludos,
hector.

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

... recien entiendo por que no me funcionaba y a ti si. Mi libro solo tiene una hoja.
Cuando hice las pruebas con un libro nuevo 'nunca' me cambie de hoja.
podemos obviar lo del cambio de libro o de hoja para que el codigo cumpla el objetivo? ...



1) "por salud" (de un usuario ajeno a tus necesidades) deja los eventos de libro +/- como en la propuesta:

== en el modulo de codigo del libro (ThisWorkbook) =Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = True
End Sub

2) para el modulo de codigo de la "unica" hoja en tu libro, aplica el siguiente ejemplo:

== en el modulo de codigo de "esa" hoja =Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("a: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
#20 Francesca Brasso
18/08/2009 - 20:15 | Informe spam
Estupendo Héctor. Eso es lo que necesitaba. Gracias.
Un sólo detalle ¿cómo evitamos que el usuario entre a las opciones avanzadas
y marque "Permitir arrastrar y colocar... etc."?, porque si lo hace podrá
arrastrar celdas.

Saludos
Fran

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

... recien entiendo por que no me funcionaba y a ti si. Mi libro solo
tiene una hoja.
Cuando hice las pruebas con un libro nuevo 'nunca' me cambie de hoja.
podemos obviar lo del cambio de libro o de hoja para que el codigo cumpla
el objetivo? ...



1) "por salud" (de un usuario ajeno a tus necesidades) deja los eventos de
libro +/- como en la propuesta:

== en el modulo de codigo del libro (ThisWorkbook) => Private Sub Workbook_WindowActivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Excel.Window)
Application.CellDragAndDrop = True
End Sub

2) para el modulo de codigo de la "unica" hoja en tu libro, aplica el
siguiente ejemplo:

== en el modulo de codigo de "esa" hoja => Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("a: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
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida