Mejoras en la interfaz de usuario
Presentación
Las versiones de Microsoft Office 2021 u Office 365 permiten personalizar la cinta de opciones agregando, relocalizando o eliminando pestañas y comandos (ver el capítulo Presentación). Esta innovación no permite tener cintas específicas para un libro determinado.
Sin embargo, existen dos soluciones para tener una cinta personalizada propia de un determinado libro:
-
La utilidad Custom UI Editor, que permite crear una cinta personalizada por medio de código XML e interactuar con la cinta a través de procedimientos VBA.
-
La colección CommandBars, que permite crear barras de herramientas y menús en la pestaña Complementos.
Personalización de la cinta con la utilidad Custom UI Editor
1. Presentación de la utilidad Custom UI Editor
La utilidad Custom UI Editor permite personalizar íntegramente la cinta de opciones asociada a un libro, por medio de código XML. Esta utilidad se entrega con los ejemplos de este capítulo.
Para usar la utilidad Custom UI Editor, se debe disponer del paquete de redistribución .NET Framework 2. Si este no es el caso, un vínculo de descarga se lo propondrá al instalar la utilidad.
Una vez instalada la utilidad, podrá personalizar la cinta de opciones de un libro de la siguiente manera:
Cree un nuevo libro en Excel 2021 o Microsoft 365 y guárdelo en formato XLSM (libro habilitado para macros).
Cierre el libro: si está abierto, el código XML no podrá grabarse desde la utilidad de personalización.
Ejecute la herramienta Custom UI Editor.
Abra el libro con la opción Archivo y luego Abrir o con el botón de comando .
Escriba el código XML de personalización de la interfaz.
Haga clic en el botón Validate para verificar la sintaxis del código.
Haga clic en el botón Generate CallBacks para generar el código VBA de los procedimientos asociados a las funciones personalizadas onAction.
Copie el código en el Portapapeles: podrá luego pegarlo en un módulo asociado a su libro e incluir su propio código VBA en los distintos procedimientos.
Guarde el libro con la opción Save de la pestaña File o con el botón de comando .
Cierre la herramienta con la opción Exit de la pestaña File.
Abra su libro desde Excel: aparecerá la nueva cinta de opciones.
Usted deberá incluir los procedimientos onAction en un módulo VBA y personalizar el código asociado a los diferentes botones de comando.
2. Ejemplo de código XML de personalización
El siguiente código XML permite crear una pestaña personalizada con dos grupos que incluyen botones de comando de diferentes tamaños.
<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<!-- Creación...
Ejemplo de cinta personalizada con el Custom UI Editor
1. Presentación
El siguiente ejemplo permite pedir la información de una factura a partir de la cinta de opciones.
La interacción con la hoja de Excel que contiene la información de la factura se hace en ambos sentidos:
-
El ingreso de datos, a nivel de la cinta, afecta el contenido de las celdas de la hoja.
-
La modificación de las celdas, dentro de la hoja de Excel, modifica los datos de la cinta.
La cinta consta de una pestaña de cuatro grupos que contienen los siguientes controles:
-
Grupo "Tipo de factura": dos botones de alternar.
-
Grupo "IVA y flete": una lista desplegable, una casilla de verificación y un cuadro de entrada.
-
Grupo "Vendedor y transportista": un menú y un menú dinámico.
-
Grupo "Condiciones": dos galerías de controles.
2. Código XML de la cinta
<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="CargaCinta" >
<!-- Oculta la cinta de opciones de Office -->
<ribbon startFromScratch="true">
<tabs>
<!-- Creación de una pestaña personalizada -->
<tab id="PESTAÑA_PERSO" label="Facturación">
<!-- Grupo personalizado Tipo de factura -->
<group id="Grupo1" label="Tipo de factura">
<!-- Botones de alternar -->
<toggleButton id="btProd" label="Productos"
imageMso="FunctionsRecentlyUsedtInsertGallery"
size="large" onAction="TipoFactura"
getPressed="Activation" />
<toggleButton id="btServ" label="Servicios"
imageMso="MeetingsWorkspace"
size="large"...
Personalización de la cinta de opciones mediante la colección CommandBars
El acceso a esta colección permite realizar las siguientes operaciones con la ayuda del lenguaje VBA:
-
Crear barras de herramientas personalizadas: se ubican automáticamente en el grupo Barras de herramientas personalizadas de la pestaña Complementos (la última de la derecha) y tiene el aspecto de las barras de herramientas de las versiones anteriores de Excel.
-
Crear barras de menús personalizados: se pueden ubicar tanto en la pestaña Complementos como en una hoja Excel bajo la forma de menús contextuales (menús "popup").
-
Crear una barra de comandos personalizada con el formato de Office 2021 o Microsoft 365.
-
Personalizar los comandos en su acción sobre las macros.
Ejemplos de barras de comandos
1. Barras de herramientas personalizadas
Se muestran dos barras de comandos: una barra de herramientas con seis botones y una barra de menús con tres opciones.
2. Comandos de menús en formato Office 2021 o Microsoft 365
3. Agregar el grupo a la barra de herramientas de acceso rápido
Las barras de comandos así creadas se pueden hacer accesibles desde la barra de herramientas de acceso rápido de la siguiente manera:
Ubique el cursor bajo la barra de comandos y haga clic con el botón derecho del ratón.
Seleccione la opción Agregar a la barra de herramientas de acceso rápido.
Normalmente, las barras de comandos son accesibles a través de botones de comandos agregados a la barra de herramientas de acceso rápido:
Barras de herramientas personalizadas
Comandos de menú
Barras de comandos
1. Terminología
a. Barra de comandos
Representa las barras de herramientas de Excel, las barras de herramientas personalizadas y las barras de menú.
b. Control
Representa un comando (botón de comando, opción de menú, etc.) de una barra de comandos.
2. Crear una barra de comandos
CommandBars.Add(Name, Position, MenuBar, Temporary)
Este método devuelve un objeto CommandBar.
Name |
Nombre de la nueva barra de comandos. |
Position |
Posición de la nueva barra; puede adoptar una de las siguientes constantes: msoBarLeft: a la izquierda msoBarTop: arriba msoBarRight: a la derecha msoBarBottom: abajo msoBarFloating: no anclada msoBarPopup: menú contextual |
MenuBar |
Recibe el valor True si la nueva barra debe reemplazar la barra activa. |
Temporary |
Recibe el valor True en el caso de una barra temporal; las barras temporales se eliminan al cerrar la aplicación. |
Ejemplo
Creación de una barra de menú y de una barra de herramientas. Estas barras solamente serán visibles después de agregar los controles asociados.
Dim Barra1 As CommandBar
Dim Barra2 As CommandBar
Sub Crear_Barras()
' Crea una barra de menú llamada "Menu1"
Set Barra1 = CommandBars.Add(Name:="Menu1", _
Position:=msoBarTop)
' Muestra...
Controles (opciones o botones de comando) de las barras de comandos
La colección de objetos CommandBarControls representa todos los controles de una barra de comandos.
Para acceder a esta colección, use la propiedad Controls de los objetos CommandBar y CommandBarPopup.
1. Agregar un control
Expression.Controls.Add(Type, Id, Parameter, Before, Temporary)
Este método devuelve un objeto CommandBarButton, CommandBarComboBox o CommandBarPopUp, que son objetos de tipo CommandBarControls.
Expression |
Expresión que devuelve un objeto CommandBar; obligatorio. |
Type |
Tipo de control que hay que agregar; puede ser una de las siguientes constantes: msoControlButton: herramienta u opción de menú msoControlEdit: cuadro de entrada msoControlDropDown: cuadro de lista msoControlComboBox: cuadro de lista msoControlPopUp: menú contextual |
Id |
Entero que identifica un control integrado; si el valor del argumento es igual a 1 o si se omite, se agrega un control personalizado vacío del tipo indicado en la barra de comandos. |
Parameter |
En el caso de controles integrados, la aplicación contenedor lo usa para ejecutar el comando; en el caso de controles personalizados, este argumento puede servir para enviar información a los procedimientos Visual Basic o para almacenar la información en el control. |
Before |
Número que indica la posición del nuevo control en la barra de comandos; si no se especifica este argumento, el control se agrega al final de la barra de comandos. |
Temporary |
Recibe el valor True en el caso de un control temporal; los controles temporales se suprimen cuando se cierra la aplicación de Excel. |
2. Especificar el título de un control
Use la propiedad Caption del control.
En el caso de un menú...
Ejemplos de menús personalizados
1. Presentación
Este ejemplo crea las siguientes barras de comandos:
-
Un grupo de comandos llamado "Comandos de menú":
-
Una barra de menú con el título "Menú Gastos", dentro del grupo "Barra de herramientas personalizadas", que permite acceder a las siguientes opciones:
-
Una barra de herramientas con el título "Gastos", dentro del grupo "Barras de herramientas personalizadas":
-
Una barra de menú contextual que aparece cuando el usuario se sitúa en la celda llamada "Empleado" y hace clic con el botón secundario del ratón. Los empleados se extraen de la base de datos de Access Empleados.accdb (base de datos disponible con los ejemplos del libro).
2. Código de los ejemplos
Para crear los menús del siguiente ejemplo, se deben realizar las siguientes operaciones:
-
Crear el documento de Excel.
-
Definir un área de impresión.
-
Definir un rango de celdas con el nombre Empleado que incluya las celdas Apellido y Número de empleado.
-
Definir un rango de celdas con el nombre INFORME GASTOS que incluya las celdas que hay que imprimir.
-
Asignar los siguientes nombres a las celdas que contienen la información del empleado: Empleado, Función, Población.
-
Agregar un módulo estándar llamado ProcMenus; este módulo contendrá los procedimientos para crear las diferentes barras de comandos.
-
Agregar un módulo estándar llamado ProcAcciones; este módulo contendrá los procedimientos personalizados asociados a los botones de comando.
3. Código del módulo de clase ThisWorkbook
option Explicit
________________________________________________________________
Private Sub Workbook_Open()
' Muestra los menús personalizados
Personalizar_Excel
' Ajusta el zoom
Ajuste
End Sub
________________________________________________________________
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' Pide confirmación del cierre del libro
If MsgBox("¿Desea cerrar el libro?", _
vbQuestion & vbYesNo, ThisWorkbook.Name) = vbYes Then
' Muestra los menús de Excel
Restaurar_Excel
Else
Cancel = True
End If
End Sub
4. Código de la hoja "Nota de Gastos"
Option Explicit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, _
Cancel As Boolean)
' Si la primera celda activa pertenece al rango llamado
' "Empleado": mostrar el menú Empleados
If Union(Target.Range("A1"), Range("Empleado")).Address = _
Range("Empleado").Address Then ...