jueves, 14 de agosto de 2014

Opciones y Pasos Previos a la Grabación de una Macro en Excel 2013.


Ficha Desarrollador en Excel 2013
Ficha Desarrollador en Excel 2013
Antes de realizar algunas macros de ejemplo, en este artículo os voy a explicar los pasos previos que hay que seguir para empezar a grabar una macro. Entre otras cosas os voy a explicar cómo mostrar todas las herramientas relacionadas con las "Macros". Y también veremos qué información y opciones iniciales hay que indicar antes de empezar la grabación de una macro.

Lo primero que hay que hacer es mostrar la ficha "Desarrollador" en la "Cinta de Opciones" de Excel 2013, que por defecto está siempre oculta. En ella tenemos disponibles todas las herramientas que nos van a permitir crear Macros y código VBA. Se pueden crear macros sin tener visible esta ficha, se puede utilizar el botón situado en la "Barra de estado" para iniciar la grabación de macros, en la siguiente imagen lo podéis ver. Cuando empecéis a grabar una macro con él, se convertirá en el botón para detener la grabación de la macro. Pero como os digo, es mejor que os acostumbréis a tener visible la ficha "Desarrollador".

Botón para iniciar la grabación de una macro desde la barra de estado
Botón para iniciar la grabación de una macro desde la barra de estado.

Para mostrar la ficha "Desarrollador" debemos acceder a la personalización de la "Cinta de Opciones". Podemos hacer clic con el botón secundario del ratón sobre la cinta y seleccionar la opción "Personalizar la cinta de opciones".

Accedemos a las opciones de la Cinta de Opciones
Accedemos a las opciones de la Cinta de Opciones.

Una vez seleccionada esa opción, aparecerá una ventana donde podemos activar la casilla de verificación que nos permitirá mostrar la ficha. Está en la lista de la derecha y por defecto siempre está desactivada. La activamos y a continuación aceptamos para que aparezca la ficha, en la "Cinta de Opciones".

Activar la ficha Desarrollador
Activar la ficha Desarrollador.

Cuando la tengamos visible, accedemos a ella y para empezar a grabar una macro nos debemos fijar en el botón "Grabar macro" del grupo "Código". En ese grupo de botones tenemos las opciones más importantes para crear macros y código VBA.

Botón para iniciar la grabación de una macro
Botón para iniciar la grabación de la macro.

Al hacer clic en el botón "Grabar macro", aparecerá una ventana en la que debemos indicar algo de información inicial sobre la macro que vamos a crear. En este punto todavía no hemos empezado a grabar la macro, sólo cuando pulsemos el botón "Aceptar", empezará la grabación.

Opciones iniciales de una Macro
Opciones iniciales de una Macro.

Lo primeo que debemos indicar es el nombre de la macro. El nombre es muy importante ya que es lo que identificará a la macro que queremos ejecutar entre todas las que tengamos disponibles. Para ser válidos los nombres deben cumplir unos criterios que si no se cumplen, no permitirán iniciar la grabación de la macro:


  • El Nombre siempre debe empezar con una letra, el primer carácter del nombre debe ser una letra.
  • A partir del segundo carácter se pueden utilizar letras, números y el guion de subrayado. Todo lo demás está prohibido. 
  • Una vez comentado lo anterior, obviamente los espacios están prohibidos. Todo lo que se os pueda ocurrir fuera de letras, números y guiones de subrayado... prohibido.
  • Debéis evitar nombrar a las macros con nombres que tengan otros objetos del documento en el que estáis trabajando. Por ejemplo no podéis utilizar nombres de celdas que hayáis creado en las hojas. Imaginaros que habéis llamado a una celda Iva, bueno pues no deberíais llamar a una macro de la misma manera.

Mensaje de error al usar un nombre de macro que no es correcto
Mensaje de error al usar un nombre de macro que no es correcto.

martes, 12 de agosto de 2014

Ejecutar una Macro o Código VBA desde un Botón de la Cinta de Opciones.

Resultado final del artículo
Resultado final del artículo.
En el artículo anterior creamos varios botones en una ficha personalizada y os hablé de algunas de las propiedades de los botones que se crean con la etiqueta "button". Pero no os hablé de la propiedad más importante, la que permite indicar que tiene que suceder cuando se pulsa el botón, la propiedad "onAction". En ella podemos indicar que macro o código VBA queremos que se ejecute al ser pulsado el botón. En este artículo la vamos a usar y veremos cómo enlazar los botones de la Cinta de Opciones con nuestras Macros o código VBA.

Para la explicación voy a seguir con el documento que creamos en el artículo anterior, pero en mi caso le he quitado el grupo "Albaranes" de la ficha "Facturación" y la ficha "Productos". He quitado casi todo lo que por el momento no vamos a utilizar. Si no lo tenéis, lo podéis descargar del siguiente enlace.


En la primera imagen del artículo, podemos ver cuál será el resultado visual final. Como podéis ver aparecen los dos botones que añadimos en el artículo anterior y uno tercer botón nuevo. Entre el segundo y el tercero he metido un separador que consiste en una línea vertical de separación. Primero vamos a realizar estos cambios, añadiremos el tercer botón y el separador.


Podemos utilizar el control separador para separar controles en los grupos de controles
Separador para separar controles en los grupos de controles.

Abrimos el documento en el Custom UI Editor y vamos con las modificaciones en el aspecto visual del grupo de controles "Facturas". En algunas ocasiones puede que queramos separar controles dentro de un mismo grupo, por ejemplo en este caso he querido separar de los otros dos el botón que permitiría eliminar facturas. Como es un poco peligros he decidido separarlo un poco. Para esto tenemos un control que podemos definir en el código XML y que se utiliza como separador, escribimos la siguiente líneas después de los dos botones que tenemos definidos del artículo anterior.

<separator id="separador01" />
<button id="botonEliminarFactura" label="Eliminar" size="large" imageMso="ReviewDeleteComment" />

Añadimos un separador con la etiqueta separator y un botón con button
Añadimos un separador con la etiqueta separator y un botón con button.

La primera línea que hemos añadido es completamente nueva, en ella usamos la etiqueta "separator" para añadir un separador entre los dos botones que ya existen y el que creamos en la siguiente línea. Como ya os he comentado como separador se crea una línea vertical, en la siguiente imagen lo podéis ver. Es una etiqueta muy sencilla lo único que hemos utilizado en su interior es la propiedad "id" para darle un identificador. Como podéis observar, al igual que la etiqueta "buton" no tiene etiqueta de cierre, se define en una sola etiqueta. Como en su interior no hay otros elementos no hace falta, todo en una sola etiqueta.

Después del separador hemos añadido otro botón que usaremos para eliminar facturas. Sobre los botones ya os hablé en el artículo anterior y de momento no hay nada nuevo que contaros en este. Para definirlo he utilizado las propiedades de las que ya os hablé.

Aspecto definitivo de la ficha Facturación
Aspecto definitivo de la ficha Facturación.

Una vez que tenemos el aspecto visual creado, vamos con el lógico, con el funcionamiento. Como os he dicho antes, de los botones no hemos utilizado la propiedad más importante que tienen, la que nos permite indicar que pasará cuando se pulsen. ¿De qué nos sirve un botón si no pasa nada al pulsarlo? De los tres botones que tenemos, dos los vamos a modificar para que hagan algo al ser pulsados. Va ser muy sencillo, ya os he dicho que en estos artículos sobre todo me quiero centrar en conocer todo lo relacionado con el XML. Ya tendremos tiempo de crear código más complejo para ser ejecutado desde la Cinta de Opciones. De momento lo único que pasará es que cuando pulsemos el botón "Nueva" se añadirá una nueva hoja al documento y al pulsar el botón "Eliminar" se eliminará la hoja en la que estamos en ese momento. Evidentemente ninguna de las dos tareas se corresponde con crear nuevas facturas y eliminarlas, pero ya os digo que eso no es lo que estamos aprendiendo en estos artículos. Vamos con el primero, modificamos el código del primer botón para añadir una nueva propiedad, la propiedad "onAction":

<button id="botonNuevaFactura" label="Nueva" size="large" imageMso="FileNew" onAction="Facturas.CrearFactura"/>

La propiedad "onAction" es la responsable de controlar que se hace cuando se pulsa un control, en este caso un botón. En ella tenemos que indicar el nombre de la macro o procedimiento VBA que queremos que se ejecute al ser pulsado el botón. Aquí le he dicho que se ejecutará un procedimiento llamado "CrearFactura" que está situado dentro de un módulo llamado "Facturas". Ahora diréis, ¿Y dónde está esto? Bueno pues cuando acabemos en el Custom UI Editor debemos ir a Excel para crear ambas cosas, el módulo y el procedimiento. Es cuanto llegará el momento de programar. En cuanto al XML ya no hay nada más que hacer, esto es todo para este botón. Nos falta hacer lo mismo con el tercer botón, el que eliminará las facturas.

<button id="botonEliminarFactura" label="Eliminar" size="large" imageMso="ReviewDeleteComment" onAction="Facturas.EliminarFactura"/>

Nada nuevo, en este caso le indicamos que cuando se pulse el botón se ejecutará el procedimiento "EliminarFactura" situado en el módulo "Facturas". El código XML de todo el documento quedará como veis en la siguiente imagen, el siguiente paso es pasar a Excel para escribir el código VBA.

Código XML con las llamadas a los Procedimientos de VBA.

lunes, 11 de agosto de 2014

Cómo crear Botones en la Cinta de Opciones o Ribbon de Excel con XML.

Crear Botones en ficha personalizada
Resultado Final de este Artículo.
En el artículo anterior, llegamos a crear dos fichas personalizadas en la Cinta de Opciones de Excel, en la Ribbon. Pero estaban vacías, no había controles en su interior. En este artículo vamos a empezar a añadirlos, en concreto vamos a ver como insertar botones en las fichas personalizadas de la Ribbon. A partir de aquí, nos vamos a encontrar con multitud de controles y propiedades que poco a poco iremos explicando en los diferentes artículos. En la imagen de al lado podéis ver el resultado final que obtendremos  al finalizar el artículo. El documento que voy a usar, lo podéis descargar pulsando en el siguiente enlace.


Si habéis seguido los pasos del artículo anterior podéis usar el vuestro. Por lo tanto abrimos el documento  en el Custom UI Editor y así veremos el código XML de ese artículo

Código XML para definir dos fichas personalizadas
Código XML para definir dos fichas personalizadas.

Lo primero que debemos tener en cuenta para añadir controles en las fichas de la Ribbon, es que deben estar dentro de otro contenedor que todavía no hemos usado. En el anterior artículo llegamos hasta la etiqueta "tab", que era la que realmente creaba la ficha. Pero todavía necesitamos otro para poder crear botones u otros controles. Escribimos las siguientes líneas entre las etiquetas que definían la ficha "FACTURACIÓN". 

<group id="grupoFacturas" label="Facturas">
</group>
Creamos un grupo de controles con la etiqueta group
Creamos un grupo de controles con la etiqueta group.

Con la etiqueta "group" que hemos añadido dentro de "tab", creamos un grupo de controles. Si os fijáis en cualquiera de las fichas que tiene Excel de serie, veréis que los controles están distribuidos en grupos de controles. Por ejemplo en la ficha "Inicio" tenemos los grupos "Fuente", "Alineación", "Número", etc...

Grupos de controles en la ficha "Inicio" de Excel 2013
Grupos de controles en la ficha "Inicio" de Excel 2013.

Bueno, pues con la etiqueta "group" creamos un grupo de controles en el que posteriormente iremos añadiendo botones. Se pueden insertar más tipos de controles, pero en este artículo sólo usaremos botones. Esta etiqueta es muy sencilla e igual que todas las etiquetas que pueden contener otros elementos, tiene etiqueta de inicio y de fin. En cuanto a las propiedades, solo hemos usado la propiedad "id" para identificar el grupo y la propiedad "label" para indicar el texto que se verá como nombre del grupo. En este caso como texto hemos puesto "Facturas".

Ficha con el grupo de controles creado pero vacío
Ficha con el grupo de controles creado pero vacío.

En la imagen anterior podéis ver el grupo de controles y en la parte inferior tiene el nombre que hemos indicado en la propiedad "label". Como no hemos metido todavía controles en su interior, está vacío. Como podéis comprobar en las fichas de Excel, puede haber más de un grupo en una ficha. Lo único que habría que hacer es añadir tantas etiquetas "group" como grupos tenga. Por ejemplo puedo añadir otro grupo dentro de la primera ficha, en este caso un grupo dedicado a los albaranes, a las notas de entrega.

<group id="grupoAlbaranes" label="Albaranes">
</group>
Código XML para definir un grupo de controles
Código XML para definir un grupo de controles.

Igual que con las fichas, el orden en el que aparecerán los grupos depende del orden en el que los escribáis en el código XML. Este sería el resultado que obtenemos:

Dos grupos vacíos en la ficha personalizada
Dos grupos vacíos en la ficha personalizada.