Cómo desactivar la opción cortar del menú contextual del botón derecho del mouse en excel?

Estimad@s,

Su ayuda por favor con lo siguiente:

Al abrir un libro de excel necesito que se desactive la opción "Cortar" del menú contextual que aparece cuando das click en el botón derecho del ratón, así como cuando utilizas esa opción desde el teclado.

Me imagino que es por medio de una macro con VBA.

Agradecido por vuestra pronta respuesta.

2 respuestas

Respuesta
1

Una sola opción del menu contextual no puede ser bloqueada así que se de a fuerza bloquear todo el menu, esta es la macro que bloquea del botón derecho del mouse, es muy simple como ves, te dejo macros para una hoja o para todo el libro.

' Macro para bloquear una sola hoja,
'poner en el modulo de la hoja que se quiera bloquear
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    MsgBox ("Sorry el boton derecho del mouse esta desactivado en esta hoja"), _
    vbInformation, "AVISO Excel"
End Sub
'
'Bloquea el menu contextual en todas las hojas del libro,
'esta macro la colocas en el modulo Thisworkbooks
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    MsgBox ("Sorry el boton derecho del mouse esta desactivado en todo el libro"), _
    vbInformation, "AVISO EXCEL"
End Sub
'
'esta macro antes de salir reactiva las teclas copiar y pegar
Private Sub Workbook_BeforeClose(Cancel As Boolean)
reactivar_teclas
End Sub
'esta macro al abrir el archivo desactiva las teclas copiar y pegar
Private Sub Workbook_Open()
desactivar_copiar
End Sub
'
'y estas son las macros de bloqueo y desbloqueo de teclas,
'colocalas en un modulo std
Sub desactivar_copiar()
With Application
    .OnKey "^{c}", " "
    .OnKey "^{x}", " "
    MsgBox ("esta hoja tiene deshabilitada la opcion cortar y pegar"), vbInformation, "AVISO"
  End With
End Sub
'
Sub reactivar_teclas()
    With Application
        .OnKey "^{c}"
        .OnKey "^{x}"
        MsgBox ("esta hoja tiene deshabilitada la opcion cortar y pegar"), vbInformation, "AVISO"
  End With
' 
'y por ultimo esta macro restringe el movimiento del raton,
'a un determinado rango de celdas, fuera de ese rango no puedes hacer nada
'en este ejemplo se restringio el movimiento a la celda a1, fuera de ese
'rango todo esta desactivado, si usas esta opcion ponla en el evento open y 
'beforeclose respectivamente
Sub bloquear_celdas()
Hoja1.ScrollArea = "a1"
End Sub
'
Sub desbloquear_celdas()
Hoja1.ScrollArea = ""
End Sub

Gracias y entendido, 

y tal vez sabes si se puede crear un menú contextual personalizado que sólo tenga las opciones copiar y pegar?

Así si bloqueo el menú contextual  que viene por defecto podría permitir sólo copiar y pegar con este nuevo menú... adicionalmente en esta opción el pegar debe tener la restricción que lo haga siempre coincidiendo con el formato de destino.

Ojalá me puedas ayudar.

JM

Pues la pones fácil prueba esta macro, no es mía solo le hice una pequeña modificación, solo te aparecerán las opciones copiar y pegar, esta parte no la entiendo "adicionalmente en esta opción el pegar debe tener la restricción que lo haga siempre coincidiendo con el formato de destino.", ¿puedes explicarla con más detalle y de ser posible con un ejemplo o pantalla?, las líneas que parecen con una comilla son instrucciones desactivadas para añadir nuevas opciones al menu o para activar las opciones por defecto (commandbars("cells"). Reset), si quieres activarlas solo quita las comillas.

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim NuevoComando As CommandBarButton
    'LIMPIAMOS TODOS LOS COMANDOS
    For Each antiguocomando In CommandBars("cell").Controls
    x = antiguocomando.Caption
    If x = "&Copiar" Or x = "&Pegar" Then GoTo otro
        antiguocomando.Delete
otro:
    Next
    'CommandBars("Cell").Reset 'Hace que aparezcan también los comandos propios del botón derecho de Excel
    'AÑADIMOS NUESTRO PRIMER COMANDO
    'If Not Intersect(Target, Range("A1")) Is Nothing Then
    '    Set NuevoComando = CommandBars("cell").Controls.Add
    '    With NuevoComando
    '        .Caption = "EJECUTAR MACRO 1"
    '        .OnAction = "MiMacro1"
    '        .BeginGroup = True
    '    End With
    '
    'End If
    'AÑADIMOS NUESTRO SEGUNDO COMANDO
    'If Not Intersect(Target, Range("C1")) Is Nothing Then
    '    Set NuevoComando = CommandBars("cell").Controls.Add
    '    With NuevoComando
    '        .Caption = "EJECUTAR MACRO 2"
    '        .OnAction = "MiMacro2"
    '        .BeginGroup = True
    '    End With
    'End If
End Sub

Dale, la voy a probar!

Lo de "adicionalmente en esta opción el pegar debe tener la restricción que lo haga siempre coincidiendo con el formato de destino.", se refiere a que sólo pegue valores o fórmulas pero no el formato de lo que copiaste, es decir que no se afecte el formato de la celda de destino.

Hola, No hace nada...

antiguocomando hay que definirlo?

Es porque no esta colocado el código donde debe mira lo que debe aparecer,

El código como ya mencione lo debes colocar en la hoja donde quieras establecer el menu contextual por ejemplo en el modulo hoja 1, y si lo quieres en toda la hoja lo debes poner en thisworkbook

¡Gracias! 

lo haré de esa manera.

De todas maneras encontré esta otra macro que si bien no deshabilita la opción cortar te envía un mensaje si elegiste de cualquier menú o teclado la opción cortar.

con esto y tu  ayuda doy por cerrada la pregunta.

saludos y muchas gracias nuevamente.

Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
ByVal Target As Excel.Range)
Select Case Application.CutCopyMode
Case Is = False
'do nothing
Case Is = xlCopy
'do nothing
Case Is = xlCut
MsgBox "Please DO NOT Cut and Paste. Use Copy and Paste; then delete the source."
Application.CutCopyMode = False 'clear clipboard and cancel cut
End Select
End Sub
Respuesta
1

[Hola

Deshabilitar, propiamente dicho, te será más complicado de lo que crees ya que hay varias formas de hacerlo:

- Usando la Cinta de Opciones

- Usando atajo del teclado (CTRL + X)

- Usando el Menú Contextual de las celdas

- A través de macro

- Alguna que se me esté olvidando

Creo que lo más practico es que en el módulo de la hoja coloques esto:

Private Sub Worksheet_Deactivate()
Application.CutCopyMode = False
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.CutCopyMode = False
End Sub

Creo que te ayudará.

Abraham Valencia

PD: No has dado más detalles como para saber si eso es lo que buscas realmente

Gracias Abraham,

Esta es una planilla con varias hojas que tiene un formato establecido con fórmulas establecidas que no se debiera cambiar, entonces al cortar se afectan las fórmulas de cálculo, por eso es que es necesario deshabilitar la opción de cortar pero no así la opción copiar y pegar.

Hasta ahora el código que ocupo deshabilita la parte de cortar, pero no del menú contextual del ratón o del teclado, por lo que la opción sería deshabilitar el menú contextual y crear otro personalizado que  sólo de las opciones de copiar y pegar (pegar sin formato).

Adjunto el código que estoy utilizando:

Private Sub Workbook_Activate()
Application.CutCopyMode = False
Application.OnKey "^x", ""
Application.CellDragAndDrop = False
End Sub

Saludos y gracias por cualquier idea.

JM

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas