Agregar elementos a un menú contextual (Microsoft Excel)
Cuando hace clic con el botón derecho en una celda, Excel le proporciona un menú contextual rico en funciones que le permite hacer cualquier cantidad de cosas. Es posible que desee agregar algunas funciones a ese menú contextual, especialmente si son funciones que utiliza con frecuencia.
Desafortunadamente, no puede editar los menús contextuales de la misma manera que puede editar otros menús, utilizando Personalizar en el menú Herramientas. En su lugar, debe manipular los menús contextuales a través de VBA.
Si desea agregar un elemento al menú contextual que aparece cuando hace clic derecho en una celda, puede usar el siguiente código:
Sub AddItemToContextMenu() Dim cmdNew As CommandBarButton Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True End With End Sub
Todo lo que necesita hacer es establecer la propiedad .Caption en cualquier texto de menú que desee utilizar y luego cambiar la propiedad .OnAction para que apunte a una macro o comando que desee utilizar. Cuando luego desee eliminar la opción de menú, puede utilizar la siguiente macro:
Sub RemoveContextMenuItem() On Error Resume Next CommandBars("cell").Controls("My Procedure").Delete End Sub
Para usar esto, cambie el texto «Mi procedimiento» por el texto que usó en la propiedad .Caption de la macro anterior. La instrucción On Error se usa en esta macro solo en caso de que el elemento de macro especificado no se haya agregado previamente.
Al modificar su macro solo un poco, puede especificar que la adición al menú contextual debe ocurrir solo al hacer clic con el botón derecho en celdas específicas. La siguiente macro verifica si está haciendo clic en una celda en el rango de C10: E25. Si es así, agrega una opción de menú para su procedimiento al final del menú contextual.
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _ Cancel As Boolean) Dim cmdNew As CommandBarButton For Each icbc In Application.CommandBars("cell").Controls If icbc.Tag = "brccm" Then icbc.Delete Next icbc If Not Application.Intersect(Target, Range("c10:e25")) _ Is Nothing Then Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Procedure" .OnAction = "MyProcedure" .BeginGroup = True .Tag = "brccm" End With End If End Sub
En el editor de VBA, esta macro debe agregarse a la hoja de trabajo específica con la que desea que se use. Todo lo que necesita hacer es hacer doble clic en esa hoja de trabajo, en el Explorador de proyectos (esquina superior izquierda del editor de VBA) y luego ingresarlo en la ventana de código para esa hoja de trabajo.
Al igual que con la macro anterior, todo lo que necesita hacer es modificar la configuración especificada para las propiedades .Caption y .OnAction. Además, es posible que desee cambiar el rango de celdas que se considera «válido» al agregar una opción de menú; simplemente cambie la especificación del rango «c: 10: e25» al rango deseado. Incluso puede usar un rango con nombre en lugar del rango de celdas, lo cual es excelente si su rango válido es realmente un conjunto de celdas no contiguas.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (2064) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.