¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. VBA Excel (versiones 2021 y Microsoft 365)
  3. Mejoras en la interfaz de usuario
Extrait - VBA Excel (versiones 2021 y Microsoft 365) Programar en Excel: Macros y lenguaje VBA
Extractos del libro
VBA Excel (versiones 2021 y Microsoft 365) Programar en Excel: Macros y lenguaje VBA Volver a la página de compra del libro

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 images/07RI1015.PNG.

 Escriba el código XML de personalización de la interfaz.

images/19CAP08MG01.PNG

 Haga clic en el botón Validateimages/07RI1016.PNG para verificar la sintaxis del código.

 Haga clic en el botón Generate CallBacksimages/07RI1017.PNG para generar el código VBA de los procedimientos asociados a las funciones personalizadas onAction.

images/19CAP08MG02.PNG

 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 images/07RI1019.PNG.

 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.

images/CAP08IMG01N.PNG
<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.

images/CAP08IMG04N.PNG

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

images/CAP07IMG04.png
images/CAP08IMG05N.PNG

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

images/CAP07IMG05.png

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

images/CAP08IMG06N.PNG

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

images/CAP08IMG07N.PNG

Comandos de menú

images/CAP08IMG08N.PNG

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

images/08RITEXCV01.png

Este ejemplo crea las siguientes barras de comandos:

  • Un grupo de comandos llamado "Comandos de menú":

images/CAP07IMG05.png
  • Una barra de menú con el título "Menú Gastos", dentro del grupo "Barra de herramientas personalizadas", que permite acceder a las siguientes opciones:

images/CAP08IMG10N.PNG
  • Una barra de herramientas con el título "Gastos", dentro del grupo "Barras de herramientas personalizadas":

images/CAP07IMG11.png
  • 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).

images/08RITEXCV02.png

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 ...