BannerAnuncios

Mostrando entradas con la etiqueta customUI. Mostrar todas las entradas
Mostrando entradas con la etiqueta customUI. Mostrar todas las entradas

martes, 4 de noviembre de 2014

Como usar nuestras Imágenes en los Botones de la Ribbon de Excel con XML y el Custom UI Editor.



Cuando personalizamos la Ribbon de Excel, queremos dejar todo a nuestro gusto y una de las cosas que más llaman la atención, es que los botones que creamos tengan imágenes nuestras, imágenes personalizadas. Pueden ser imágenes con el logo de nuestra empresa, imágenes creadas por nosotros... Cualquier imagen que no sean las que vienen con los programas de Office. En este vídeo os voy a explicar cómo hacerlo utilizando el lenguaje XML y el Custom UI Editor.

Utilizando la propiedad "image" aprenderemos a cambiar las imágenes de los botones utilizando imágenes que estén guardadas dentro del proyecto de Excel, dentro del documento. Con el Custom UI Editor podemos insertar imágenes en los documentos de Excel para luego ser usadas desde el código XML. Si por ejemplo quisiéramos utilizar imágenes que están almacenadas en una carpeta de nuestro equipo, este método no nos serviría, eso lo explicaremos en otro vídeo.

A parte del proceso para configurar las imágenes, también os mostraré las diferencias que hay entre usar imágenes en formato JPG e imágenes PNG.

Para realizar los pasos que veréis en el vídeo os podéis descargar el siguiente documento de Excel y el archivo que contiene las imágenes que voy a utilizar en el vídeo.:



Todos mis vídeos son Gratis, pero si te gusta mi trabajo, puedes realizar una donación para que pueda continuar con este proyecto. Cualquier cantidad desde 1€/1$ es bienvenida. Gracias!!!!!!!!!!!!!!

 

Como siempre aquí tenéis el enlace para ver el vídeo, espero que os guste:

  • Nombre: Como usar nuestras Imágenes en los Botones de la Ribbon de Excel con XML y el Custom UI Editor.
  • Versión de Excel: ES/Español.
  • Audio: Español.
  • Subtítulos: Español.
  • Duración Vídeo: 16m 44s.



Nada más por hoy. Esta semana intentaré publicar algún artículo más y prepararé más vídeos para la próxima semana. Gracias y seguid compartiendo mi trabajo!!!!!!!!!!!!

*Siguiente Sesión*:

jueves, 30 de octubre de 2014

Artículo: Activar y Desactivar Botones en Tiempo de Ejecución de la Cinta de Opciones de Excel. 2ª Parte.

Al situarnos en la plantilla se desactiva el botón.
Al situarnos en la plantilla se desactiva el botón.
Seguimos con la segunda parte del artículo dedicado a explicar como activar y desactivar botones en la Cinta de Opciones de Excel. En el artículo anterior explique el uso de la propiedad enabled y empecé a explicaros el uso de la función "getEnabled" para activar y desactivar los botones en tiempo de ejecución. Con "getEnabled" conseguimos que al abrir el documento el botón se activará o desactivará dependiendo de en que hoja estábamos situados en el momento de abrirlo. En este artículo vamos a seguir con "getEnabled" y continuaremos donde lo dejamos hasta conseguir que el botón para eliminar facturas se active o se desactive dependiendo de en que hoja nos situemos. Así ya tendremos controlado ese botón en toda las situaciones posibles que se pueden dar: Al abrir el documento y mientras estamos trabajando con él.

Parte del trabajo ya lo tenemos hecho del artículo anterior, pero nos faltan algunos "detalles". Si alguien empieza por esta parte en lugar de por el artículo anterior, le recomiendo que lo deje y que primero realice los pasos anteriores. No voy a repetir todo lo que ya hemos visto y quizás os sintáis un poco perdidos. Para seguir este artículo podéis utilizar el documento finalizado del artículo anterior o bien descargarlo en el siguiente enlace.


Entonces, nuestro objetivo es hacer algo para que cuando se cambie de una hoja a otra del documento, el botón se active o se desactive según le toque. Antes de ponernos con el trabajo os voy a intentar explicar a grandes rasgos que vamos a tener que hacer para conseguir lo que quiero, así no vais tan a ciegas con lo que os voy explicando. Como ya os comenté el control de la Ribbon desde VBA es un poco complicado y lo que vamos a ver hoy lo confirma mucho más. Ya os dije que no hay una orden tipo "botonEliminar.Enabled = False", de nuevo vamos a tener que usar la función "getEnabled" y algún que otro "truco" más. Abrimos el documento en el Custom UI Editor y os sigo comentado.

Código XML artículo anterior.
Código XML artículo anterior.

<button id="botonEliminarFactura" label="Eliminar" 
getEnabled="ModuloRibbon.ActivarDesactivarBotonEliminar" 
onAction="ModuloFacturas.EliminarFactura"/>

En el código del artículo anterior, en "getEnabled", indicamos que Excel debía llamar a un procedimiento de VBA para decidir que estado debía tener el botón, activado o desactivado. El procedimiento estaba situado en un módulo llamado "ModuloRibbon" y se llamaba "ActivarDesactivarBotonEliminar". Este procedimiento es llamado cuando se crea el botón en la Ribbon, al cargar la personalización que estamos creando, Excel se da cuenta que para mostrar este botón debe llamar a ese procedimiento y así se decidirá si está activado o no. En el artículo anterior nos aprovechamos de esto para que al abrir el documento en Excel el botón de eliminar facturas esté en el estado correcto. Como al abrir el documento se carga la personalización, Excel llama a ese procedimiento para ver como tiene que quedar el botón.

Procedimiento VBA para activar y desactivar el botón.
Procedimiento VBA para activar y desactivar el botón.

¿Que es lo que vamos hacer ahora? Bueno pues básicamente, vamos a obligar a cargar de nuevo el botón cuando cambiemos de una hoja a otra y al hacer esto, se volverá a llamar a ese procedimiento para decidir que estado debe tener el botón. Recordad que en el procedimiento "ActivarDesactivarBotonEliminar" se controlaba en que hoja del documento estábamos y en función de eso se decidía si se activaba o no el botón. Bueno pues al volver a cargar de nuevo el botón en la Ribbon, esa comprobación se volverá a realizar y se activará o desactivará el botón según la hoja en la que estemos en ese momento. Vamos a conseguir que el botón se cree de nuevo en la Ribbon.

En realidad es mucho más retorcido lo que vamos hacer, porque seguro que más de uno estará pensando... ¿Y como le vamos a decir que cargue de nuevo el botón? Bueno pues es que en realidad no le vamos a decir que cargue el botón, le vamos a decir que lo invalidamos... Y al hacerlo, Excel lo vuelve a cargar porque ya no es válido. Es decir yo no puedo cargar de nuevo un control, pero si puedo indicar que ya no es válido para que Excel se encargue de cargarlo de nuevo y así provocaremos que se llame otra vez al procedimiento que hemos indicado en "getEnabled". Este es el proceso que hemos seguido hasta ahora y el que vamos a seguir:

  • Abrimos el documento en Excel y se carga la Ribbon personalizada.
  • Al cargar la Ribbon personalizada debe crear el botón para eliminar facturas y ahí se da cuenta que para establecer el estado del botón, se llama desde "getEnabled" a una macro que hemos creado con VBA.
  • Se ejecuta esa macro y se activa o se desactiva el botón dependiendo de la hoja en la que aparecemos situados al abrir el documento.
  • A partir de aquí empieza lo nuevo. Cuando cambiemos de una hoja a otra mientras trabajamos en el documento, usaremos el evento SheetActivate para invalidar el botón de eliminar facturas. Ese evento salta cuando se activa una hoja, al cambiar de una hoja a otra se activa en la que nos situamos.
  • Al invalidar el botón, Excel lo intentará crear otra vez y de nuevo llegará a la misma conclusión. Para establecer el estado del botón hay que llamar a la macro que apunta "getEnabled" y así en función de la hoja en la que estamos en ese momento se activará o se desactivará el botón.

Esta es la idea, ya os había dicho que no es fácil y que el acceso a la Ribbon no es directo, hay que dar unas "pocas vueltas". Bueno, vamos a empezar con el trabajo de codificación. En este paso vais a tener que hacer un pequeño acto de fe, ya que el código que vamos a escribir no va tener una representación visual en la Ribbon. Tenemos que hacer una modificación a la primera línea, la línea en la que indicábamos el espacio de nombres que queríamos usar en este documento. Al final de la línea debemos añadir lo siguiente:

<customUI
xmlns="http://schemas.microsoft.com/office/2009/07/customui" 
onLoad="ModuloRibbon.AlCargarRibbon">

La parte nueva en la línea anterior es en la que usamos la función "onLoad". La idea de esta función es muy similar a lo que os he explicado sobre "getEnabled".  En ella he indicado un procedimiento de VBA, una macro, que será ejecutada cuando la personalización que estamos creando se cargue. Es decir, ahí le he indicado que cuando se cargue la personalización que está definida en el customUI que estamos creando, debe ejecutar una macro llamada “AlCargarRibbon”, que está guardada en un módulo llamado “ModuloRibbon”.
¿Por qué hacemos esto? Bueno pues porque en el interior de ese procedimiento o macro, que se ejecuta justo en el momento en el que se cargue la personalización, vamos a tener acceso a la Ribbon, a la Cinta de Opciones…  Y eso nos va permitir hacer algo que después nos facilitará el acceso continuo a la Ribbon, para poder hacer con ella lo que necesitemos en cualquier momento. En este caso concreto activar o desactivar el botón a nuestro gusto. Ya se que suena muy raro pero tenéis que hacer unos pocos actos de fe en este artículo.

Ya está, esto es todo lo que teníamos que hacer en el Custom UI Editor, como muy bien os imaginaréis, ahora el siguiente paso es ir a Excel y desarrollar la macro que acabamos de indicar en “onLoad”.

lunes, 20 de octubre de 2014

Vídeo: Depurar y Encontrar los Errores en el Código XML que personaliza la Interface de Usuario de Excel.



En los primeros vídeos dedicados a la personalización de la Interface de Usuario de Excel, hemos ido creando unas personalizaciones básicas de la Ribbon de Excel. Aunque han sido personalizaciones muy simples, es muy fácil confundirse a la hora de escribir código XML y la verdad es que luego no es tan fácil encontrar donde están los errores. Si no conocéis las dos posibilidades para encontrar errores que os voy a explicar en este vídeo, os acabaréis volviendo locos.

Para depurar y encontrar los errores tenemos estas dos opciones. Primero podemos utilizar la validación del código XML que se puede realizar en el Custom UI Editor. Esta validación puede ser interesante usarla mientras vamos desarrollando el código, para ir corrigiendo errores rápidamente. Antes de abrir el documento en Excel y encontrarnos con problemas la podemos usar para ver si todo está bien. Con el tiempo os daréis cuenta que esta validación tiene algunas limitaciones y puede que se le pasen errores en el código XML.

Para identificar los errores que se le pasen al Custom UI Editor podemos usar la depuración de código XML que ofrece Excel. Activando una opción de Excel, el programa nos avisará de los errores que encuentra al cargar las personalizaciones... Y a esta posibilidad sí que no se le pasará ningún error. En el vídeo vamos a utilizar las dos provocando diferentes errores y viendo cómo funcionan ambas posibilidades ante los mismos errores. Acabaréis viendo como la opción de Excel es mucho más completa en cuanto a identificar errores y dar información sobre ellos.

Para realizar los pasos que veréis en el vídeo os podéis descargar el siguiente archivo de Excel:



Todos mis vídeos son Gratis, pero si te gusta mi trabajo, puedes realizar una donación para que pueda continuar con este proyecto. Cualquier cantidad desde 1€/1$ es bienvenida. Gracias!!!!!!!!!!!!!!

 

Como siempre aquí tenéis el enlace para ver el vídeo, espero que os guste:

  • Nombre: Depurar y Encontrar los Errores en el Código XML que personaliza la Interface de Usuario de Excel.
  • Versión de Excel: ES/Español.
  • Audio: Español.
  • Subtítulos: Español.
  • Duración Vídeo: 19m 15s.



Nada más por hoy. Para mañana intentaré tener lista la segunda parte del artículo dedicado a desactivar y activar botones de la Cinta de Opciones en tiempo de ejecución ;)

*Siguiente sesión*:

martes, 14 de octubre de 2014

Artículo: Cómo Activar y Desactivar Botones en la Cinta de Opciones de Excel con enabled y getEnabled. 1ª Parte.

Botón desactivado en la Cinta de Opciones.
Botón desactivado en la Cinta de Opciones.
Seguimos profundizando en la personalización de la "Cinta de Opciones" de "Excel" y en este artículo os voy a explicar cómo activar y desactivar los botones que creemos en ella. Os voy a explicar cómo hacerlo tanto en tiempo de diseño como en tiempo de ejecución. Empezaremos el artículo hablando de la propiedad "enabled" que nos permite indicar si un control aparece activado o desactivado. Esta opción es interesante si por ejemplo queremos que los controles aparezcan siempre de inicio desactivados. Esta sería la opción que tenemos para controlar el estado de los botones en tiempo de diseño, cuando estamos creando el código XML que define el botón. Pero no es la opción más interesante y potente que tenemos para activar o desactivar controles. La otra posibilidad que tenemos es la de activar o desactivar los botones mientras se usan los documentos de Excel. Es decir dependiendo de condiciones que nosotros necesitemos controlar, decidiremos si los controles se activan o se desactivan. Para esto usaremos la función "getEnabled" y código VBA. El uso de esta función os lo voy a explicar en dos artículos, si lo haría todo en este quedaría un artículo muy largo y creo que así se entenderá mejor ya que su uso es un poco "extraño". Cuando empecemos con esta función os daré más detalles.

Para seguir los pasos de este artículo necesitáis descargaros el siguiente documento de Excel que he preparado. Es una modificación de los que he usado en artículos anteriores y en los vídeos que estoy publicando del mismo tema. Cuando lo tengáis lo abrís en el "Custom UI Editor".


Este documento tiene una ficha personalizada llamada "FACTURACIÓN" en la que hay tres botones, pero de entada ya os digo que sólo funciona uno, el botón para eliminar facturas. La idea es que con esos botones podemos crear, guardar y eliminar facturas pero los dos primeros botones tienen mucho trabajo y voy a dejar la explicación para los vídeos. Aquí me voy a centrar sólo en la parte importante, en cómo podemos activar o desactivar botones de la Ribbon. Para la primera parte de este artículo usaré el botón de crear nuevas facturas y para la segunda utilizaré el de eliminar facturas.

Botones personalizados de la Ribbon con los que vamos a trabajar.
Botones personalizados de la Ribbon con los que vamos a trabajar.

Vamos con la parte del artículo en la que os hablo de la propiedad o atributo "enabled". Esta propiedad también la tienen otros controles pero de momento en el curso estamos centrados en los botones que son los controles más sencillos de usar. La propiedad "enabled" establece si el control, en este caso el botón, está activado o no. Se le pueden asignar dos valores a esta propiedad, "true" o "false", verdadero o falso. Con true se activa el botón y con false de desactiva. Por ejemplo vamos a desactivar el primer botón que tenemos definido en nuestra ficha personalizada, el de crear nuevas facturas. Añadimos a la definición de ese botón esa propiedad.

<button id="botonNuevaFactura" label="Nueva" size="large" image="Nueva" enabled="false"/>

Igual que con el resto de propiedades escribimos el nombre de la propiedad y entre comillas dobles le asignamos su valor, en este caso "false" para desactivar el botón. Vamos a probar que hemos conseguido con esto, cerramos guardando los cambios y abrimos el documento en Excel. Al abrirlo, como lo habéis descargado de Internet seguramente os pedirá que habilitéis la edición y que habilitéis las macros, lo hacéis. Y como podemos ver en la siguiente imagen el botón aparecerá desactivado. Esta difuminado y si intentamos pulsar encima de él no podemos.

El primer botón de la ficha personalizada está desactivado con el atributo enabled.
El primer botón de la ficha personalizada está desactivado con el atributo enabled.

Bueno pues esta es la idea, con esa propiedad podemos establecer si un control está activado o no. Esto que os acabo de explicar está muy bien, lo que pasa que es muy limitado. Esto nos puede servir si queremos que algún control esté siempre desactivado al abrir un documento, pero si necesitamos que el botón este activado o desactivado dependiendo de algo, no lo podemos hacer con "enabled". Eso lo tendríamos que hacer con la función "getEnabled", vamos con ella.

lunes, 6 de octubre de 2014

Artículo: Cómo usar nuestras imágenes en los Botones de la Ribbon de Excel usando el Custom UI Editor.

Botones en la Ribbon con nuestras propias imágenes.
Resultado final del artículo.
En los artículos anteriores, os he hablado de algunas de las propiedades que tiene "button" para crear botones en las fichas de la "Cinta de Opciones". Por ejemplo he hablado de las propiedades "size", "label", "imageMso"... De esas propiedades que ya hemos visto os puedo decir que son básicas para poder definir botones, pero también os puedo decir que hay muchas más que nos permitirán ajustar los botones a lo que realmente necesitamos. En este artículo voy a empezar a trabajar con la propiedad o atributo "image", con ella podremos utilizar en los botones de la Ribbon, nuestras imágenes. En los artículos anteriores os enseñé como utilizar imágenes de otros comandos de los programas de Office, en este os voy a enseñar una de las maneras que tenemos para utilizar las nuestras. Para este artículo voy a utilizar el último documento que he utilizado en la serie de artículos dedicados a este tema. Si no lo tenéis lo podéis descargar en el siguiente enlace.


También vais a necesitar las imágenes que voy a usar para los botones, las podéis descargar a continuación.


Antes de empezar con el trabajo, me gustaría aclarar un detalle. En este artículo vamos a usar para los botones, imágenes que forman parte del documento de Excel con el que estamos trabajando. Es decir, las imágenes estarán dentro del archivo que contiene el documento para el que estamos creando la ficha personalizada. Con el "Custom UI Editor" podemos añadir imágenes dentro de los documentos de Excel y así podemos usarlas en el código XML para definir las imágenes de los botones que creemos. Esta es la posibilidad más sencilla que tenemos para usar imágenes nuestras en los botones de la Ribbon. Si queremos usar imágenes que están fuera del documento, imágenes que por ejemplo están guardadas en una carpeta de nuestro disco duro... Tendremos que hacer más pasos de los que vamos a ver aquí, será un poco más difícil. En este artículo nos vamos a centrar en la primera posibilidad, las imágenes que están almacenadas fuera del documento las dejaremos para artículos posteriores.

Imágenes insertadas dentro de un proyecto o documento de Excel.
Imágenes insertadas dentro de un proyecto o documento de Excel.

Vamos con el tema de este artículo. Para empezar a utilizar nuestras imágenes en los botones, lo primero es tenerlas preparadas. No os voy a dar una "lección maestra" sobre qué características deben tener las imágenes que uséis, pero sí que os voy a dar algunos consejos que deberíais tener en cuenta. Para empezar el formato de la imagen, hay muchos formatos gráficos, por ejemplo "JPG", "GIF", "BMP", "PNG"... Cada uno de ellos tiene algunas características que lo diferencian del resto, pero en mi opinión la mejor opción para ser usada en los botones de la "Ribbon", son las imágenes en formato "PNG". La razón principal para recomendaros este formato es que es el que mejor trabaja con las transparencias y este es un detalle muy importante para que no pasen cosas como las que os voy a contar enseguida. El único problema que tienen las imágenes en formato "PNG" es que si las imágenes se encuentran fuera del documento, guardadas en carpetas de nuestro equipo, su uso será mucho más complicado que los otros formatos que os he comentado líneas atrás. Se puede hacer, pero habrá que escribir algo de código VBA. Esa es la única limitación que tienen, pero para lo que vamos a ver en este artículo, ese detalle no nos afecta.

Otro detalle importante, las dimensiones de las imágenes que usaremos. Los "expertos" en temas gráficos recomiendan un tamaño de 32x32 píxeles para las imágenes que usemos en botones grandes y de 16x16 píxeles en botones pequeños. Si usáis imágenes con dimensiones superiores, Excel las reescalará y se pueden producir deformaciones y efectos que afeen el resultado final. Lo mejor es trabajar con esas dimensiones al crear las imágenes que irán en los botones. Para crear las imágenes podéis usar vuestro programa de diseño o de retoque favorito, desde el simple "Paint" al más completo "Photoshop".

Detalles de una imagen preparada para los botones de la Ribbon.
Detalles de una imagen preparada para los botones de la Ribbon.

Empezamos, abrimos el documento de este artículo en el "Custom UI Editor" y comenzaremos añadiendo las imágenes que usaremos en los botones. Si os habéis descargado mis imágenes, tendréis cuatro, dos en formato "JPG" y otras dos en formato "PNG". Vamos a empezar con las imágenes en formato "JPG", así comprobaremos que pueden pasar "cosas raras" si no usáis el formato "PNG". Para añadir las imágenes debemos pulsar el siguiente botón o utilizar la opción "Icons..." del menú "Insert".

Opciones para Insertar imágenes en un documento de Excel.

Opciones para Insertar imágenes en un documento de Excel.
Opciones para Insertar imágenes en un documento de Excel.

Al hacerlo aparecerá la típica ventana de Windows en la que podemos seleccionar archivos para abrirlos. Seleccionamos los dos en formato "JPG" y pulsamos en el botón "Abrir".

Seleccionamos las imágenes que vamos a insertar en el documento de Excel.
Seleccionamos las imágenes que vamos a insertar en el documento de Excel.

Al hacerlo veremos algo nuevo en el "Custom UI Editor", en la parte izquierda tendremos las dos imágenes que ya forman parte del proyecto, del documento. Forman parte del "customUI14.xml" que contiene este documento, a partir de ahora ya las podemos usar desde el código XML. Si no las veis deberéis desplegar el contenido del "customUI14.xml" pulsando en el más que tiene a su izquierda.

Se pulsa en el + para mostrar el contenido del "customUI".
Se pulsa en el + para mostrar el contenido del "customUI".

Las imágenes ya forman parte del proyecto.
Las imágenes ya forman parte del proyecto.

miércoles, 17 de septiembre de 2014

Vídeo: Crear Botones en la Cinta de Opciones o Ribbon de Excel con XML y el Office Custom UI Editor.



En la sesión anterior, aprendimos a crear fichas personalizadas en la Ribbon de Excel usando código XML. En esta, vamos a dar contenido a las fichas, aprenderemos a crear "Grupos de Controles" y "Botones", también usando código XML y el Office Custom UI Editor.

En las fichas de la cinta de opciones puede haber multitud de tipos de controles: Botones, Listas, Cuadros combinados, galerías, etc... En este vídeo vamos a empezar por los más fáciles de crear y manejar, los botones. Antes de empezar a crearlos, debemos conocer otro tipo de objetos, los grupos de controles. Cualquier tipo de control que queramos añadir a una ficha debe estar dentro de un grupo de controles, en las fichas que tiene Excel de serie se pueden ver ejemplos. Por ejemplo en la ficha "Inicio" de Excel tenemos los grupos "Portapapeles", "Fuente", "Alineación", "Número", etc...

Grupos de Controles en la Ficha Inicio.

Los grupos se crean usando la etiqueta "group" y en su interior iremos añadiendo todas las etiquetas que definan los controles que irán dentro de cada grupo. En este caso irán todas las etiquetas "button" que definirán los botones que vamos a crear. Esto es principalmente lo que vamos a ver en esta sesión, las etiquetas "group" y "button" que nos permitirán crear "Grupos de Controles" y "Botones". Igual que en el vídeo anterior os iré explicando algunas de las propiedades que vamos a utilizar para definir ambos objetos.

Entre otras propiedades hablaremos de la propiedad "size" e "imageMso". Con la primera controlaremos el tamaño de los botones que creamos y con la segunda la imagen que se muestra en los botones. La propiedad "imageMso" es una de las posibilidades que tenemos para configurar la imagen de un botón, más adelante hablaremos del resto. Para configurar esta propiedad puede ser interesante que os descarguéis este archivo de la página Web de Microsoft. Es un documento que os ayudará a elegir la imagen que queréis para vuestro botón, en el vídeo os doy más detalles sobre su uso.


Para realizar los pasos que veréis en el vídeo os podéis descargar el siguiente archivo de Excel, sino tenéis el de las sesión anterior o no lo queréis modificar.


También os dejo aquí el enlace para descargar el programa "Custom UI Editor" que uso en los vídeos. Seguramente ya lo tendréis todos, pero lo pongo para los rezagados. Recordad que es de uso libre y aquí os dejo el enlace oficial en el que lo podéis descargar.

lunes, 15 de septiembre de 2014

Artículo: Cómo encontrar y depurar los errores en el código XML que personaliza la Interface de Excel.

Podemos depurar código XML en Excel
Podemos depurar código XML en Excel.
Seguro que más de uno, en los artículos anteriores, se ha vuelto loco buscando donde se había confundido y pensando en porque no se muestran los cambios que os he explicado en esos artículos. Como ya os he comentado es  muy fácil confundirse al escribir el código XML y la verdad es que si no conocemos las opciones que os voy a explicar hoy, es muy difícil encontrar el error. Como poco a poco los ejemplos se van a ir complicando, creo que ya es el momento de explicaros dos opciones que tenemos para encontrar errores en el código XML. Una está en el "Custom UI Editor" y la otra está dentro de Excel. Vamos con ellas. Para este artículo voy a utilizar el documento acabado en el artículo anterior. Si no lo tenéis lo podéis descargar del siguiente enlace:


Una vez tengamos todos el documento vamos a empezar con el trabajo en el "Custom UI Editor". Abrimos el documento y vamos a provocar varios errores en el código XML, para así ver que opciones tenemos en el programa para encontrarlos. Por ejemplo, vamos a empezar cometiendo uno de los errores más típicos, el de las mayúsculas. Vamos a cambiar las dos etiquetas "ribbon", pondremos la primera letra en mayúsculas.

<Ribbon>
</Ribbon>
Escribimos la etiqueta ribbon con mayúsculas
Escribimos la etiqueta ribbon con mayúsculas.

Ahora vamos con la opción que nos ayudará a encontrar este error, el botón para validar. Este botón está situado en la pequeña barra de herramientas que tiene el "Custom UI Editor", es el botón con una "V" roja de validación.

Botón para validar el código XML
Botón para validar el código XML.

Cuando pulséis este botón el "Custom UI Editor" hará una validación del código y si encuentra algún error os mostrará información sobre el error que ha encontrado. Pulsamos y obtendremos el siguiente mensaje.

Mensaje de error al validar el código XML
Mensaje de error al validar el código XML.

Os resumo lo que dice, básicamente nos está diciendo que dentro de un "customUI", no puede haber algo llamado "Ribbon". Eso es lo que nos dice en la primera parte del mensaje, nos dice que en el espacio de nombres que hemos indicado en la primera línea del código XML, no hay elementos que se llamen "Ribbon", dentro de un "customUI". Esta es la primera línea de código XML que tenemos escrita.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">

Cuando escribimos esta línea en otro artículo, os conté un poco por encima para que servía, pero ahora os puedo dar más detalles. Un espacio de nombres es una manera de organizar elementos, objetos, es una organización virtual. Es una manera de organizar objetos de diferentes tipos que pueden tener los mismos nombres, organizándolos en espacios de nombres diferentes, podemos evitar esos conflictos. En concreto, en nuestro ejemplo, le indicábamos que queríamos utilizar el espacio de nombres en el que están incluidos todos los elementos y objetos que se pueden utilizar para crear una personalización de la Interface de Usuario en Excel 2010. Bueno pues al pulsar el botón para validar, el "Custom UI Editor" comprueba si los elementos que utilizamos en las etiquetas, existen en ese espacio de nombres. Como en XML se diferencia entre mayúsculas y minúsculas, no ha encontrado el que nosotros hemos indicado.

Fijaros, que el mensaje es mucho más interesante de lo que parece a primera vista. Habla de que dentro de un "customUI", es decir dentro del primer nivel que hemos creado en el código XML, no existe algo llamado "Ribbon". Es decir, que no solo mira si existe lo que hemos escrito, también mira si lo que hemos escrito tiene sentido en el nivel que está escrito. De hecho fijaros, justo después de decirnos eso, nos da las posibilidades que tenemos para utilizar dentro de un "cutomUI". Nos dice que podemos usar "commands", "ribbon", "backstage" y "contextMenus". Aquí sólo hemos usado "ribbon", del resto ya hablaremos. Por lo tanto ya veis, que si nos fijamos bien en el mensaje y nos lo tomamos con tranquilidad, tenemos mucha información para encontrar el problema.

lunes, 25 de agosto de 2014

Vídeo: Personalizar la Interface de Usuario y la Ribbon de Excel con XML y VBA, Conceptos Básicos.



Al crear Macros o código VBA en Excel siempre buscamos la manera más cómoda y rápida de ejecutar el código que hemos desarrollado. Habitualmente se suelen utilizar controles ActiveX integrados en las hojas para conseguirlo, pero en mi opinión tenemos otra opción mucho mejor. Personalizando la Interface de Usuario de Excel, podemos conseguir que los documentos que creamos se adapten mejor a nuestras necesidades y que las herramientas que desarrollamos con VBA queden perfectamente integradas hasta el punto de parecer herramientas propias de Excel. En concreto personalizando la Cinta de Opciones o Ribbon, podemos conseguir un resultado mucho más satisfactorio a la hora de ejecutar las macros que desarrollemos, que con los típicos controles ActiveX que os acabo de comentar. Con controles ActiveX me refiero a los típicos botones, cuadros combinados, etc... Que se suelen insertar en las hojas.

En esta serie de vídeos que comienzo hoy os voy a explicar cómo personalizar la Interface de Excel, sobre todo la Ribbon para conseguir crear documentos mucho más usables y adaptados a lo que necesitamos. Veremos cómo crear nuevas fichas, grupos de botones, botones, cuadros combinados, cuadros combinados con imágenes, cómo activar o desactivar controles en la Ribbon según nuestras necesidades... En definitiva sobre todo vamos a intentar tener un control total sobre la Cinta de Opciones y otros elementos que componen la Interface de Usuario de Excel.

Personalización de una Cinta de Opciones
Personalización de una Cinta de Opciones.

Para conseguirlo vamos a crear personalizaciones utilizando el lenguaje XML y el código VBA de Excel, todo el trabajo que vamos a desarrollar lo vamos a realizar desde el punto de vista de la programación. Para crear el código XML necesario para las personalizaciones vamos a utilizar un programa libre, completamente gratis, llamado "Custom UI Editor", en el siguiente enlace lo podéis descargar.


No os cuento nada más, si os gustan los temas avanzados de Excel os aconsejo que no os perdáis esta serie de vídeos porque abren todo un mundo de posibilidades para integrar mucho mejor nuestros desarrollos en los documentos de Excel. En este vídeo se tocan los mismos temas que en el artículo que publiqué hace unos días, "Conceptos previos para personalizar la Cinta de Opciones o Ribbon de Excel con XML y VBA", pero como sabéis yo soy más partidarios de los vídeos y aquí tenéis el correspondiente a ese artículo.

martes, 12 de agosto de 2014

Artículo: 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

Artículo: 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.

viernes, 8 de agosto de 2014

Artículo: Cómo crear fichas en la Cinta de Opciones con XML y el Custom UI Editor.


Ficha Personalizada que vamos a crear
Ficha Personalizada que vamos a crear.
Después de la pequeña introducción del artículo anterior, vamos a crear unas fichas personalizadas en la Ribbon, usando el Custom UI Editor. En este ejemplo vamos a crear algo muy sencillo, como es el primer ejemplo nos vamos a centrar más en conocer detalles del Custom UI Editor y del lenguaje XML. En este artículo sólo vamos a escribir el código XML necesario para mostrar dos fichas nuevas en la Cinta de Opciones de Excel. En el siguiente artículo les añadiremos controles, pero en este sólo las vamos a crear. En concreto vamos a crear dos fichas llamadas "Facturación" y "Productos". Vamos a suponer que vamos a crear un documento que nos permita llevar la gestión de un pequeño negocio. Pero fijaros que estoy hablando de suponer, no vamos a desarrollar el documento por completo, sólo lo vamos a utilizar para las explicaciones relacionadas con la Ribbon. Recordad que yo utilizo la versión 2013 de Excel, pero todo lo que expliqué en este artículo funcionará igual en Excel 2010.

Para empezar, tenéis que crear un documento nuevo en Excel y lo debéis guardar, yo por ejemplo le voy a llamar "GestionNegocio". Cuidado, porque en el tipo de archivo tenéis que elegir Libro de Excel habilitado para macros (*.xlsm). Los controles que vamos a crear en los artículos van a interactuar con macros, con código VBA y por lo tanto el archivo tiene que tener este formato para poder contener ese código.

Guardar el documento como Libro habilitado para Macros
Guardar el documento como Libro habilitado para Macros.

Una vez guardado el documento, cerráis Excel o el documento, lo que más rápido os parezca... Y así, de momento, ya hemos acabado con el trabajo en Excel, ahora toca el trabajo en el "Custom UI Editor". En el artículo anterior os comenté donde conseguir este programa libre, podéis acceder a él para descargarlo si todavía no lo tenéis. Lo buscamos en Windows y lo ejecutamos... En cuando se cargue, abrimos el documento que acabamos de crear en Excel.

Custom UI Editor con el documento abierto
Custom UI Editor con el documento abierto.

Al hacerlo, la pantalla se dividirá en dos. En la parte izquierda del programa nos muestra el nombre del documento que tenemos abierto. Si el archivo tendría hecha una personalización, veríamos algo más, en esa parte izquierda, pero como no es así solo vemos el nombre del documento. Enseguida os contaré que es lo que veríamos. La parte derecha la veréis completamente vacía por la misma razón, todavía no hemos personalizado el documento. Ahí deberíamos ver el código XML que define la personalización que hemos realizado. Para empezar con el trabajo debemos añadir a nuestro documento el archivo XML que os comenté en el artículo anterior, el que tenía que contener la definición de la cinta personalizada o las modificaciones que hagamos en la Interface de Usuario de Excel. Para hacerlo debemos acceder al menú "Insert" y ahí tenemos dos opciones.

Añadir archivo XML al archivo de Excel
Añadir archivo XML al archivo de Excel.

Como podéis ver en la imagen, se puede elegir entre crear una personalización para Office 2010 o 2007. Ya os comenté en el artículo anterior que hay pequeñas diferencias entre ambas versiones y por eso se da la opción de crear una personalización específica para cada versión. En el caso de Excel 2013 también se usa la de la versión 2010, aunque no lo ofrezca como opción, funcionará sin problemas. Este programa es muy antiguo y no se ha actualizado para la versión 2013 porque no hace falta, con la personalización de la versión 2010 funciona perfectamente.

Archivo XML de personalización insertado en el documento de Excel
Archivo XML de personalización insertado en el documento de Excel.

En mi caso he seleccionado la opción 2010 y ya podéis ver el resultado. Como os comenté en el artículo anterior para personalizar la interface de Excel, en este caso la cinta de opciones, en la versión 2010/2013 de Excel hay que insertar un archivo XML llamado "customUI14.xml"... Y eso es lo que acaba de hacer el programa. Si usáis la versión 2007 deberíais seleccionar su opción para insertar el archivo XML correcto, que en ese caso se llamaría "customUI.xml".

Archivo XML insertado par ala versión 2007
Archivo XML insertado para la versión 2007.

En el artículo anterior os comenté que si queréis podéis añadir los dos archivos de configuración a un documento. Si pensáis que puede ser interesante que cada versión, 2007 por un lado y 2010/2013 por otro, tengan personalizaciones diferentes, lo podéis hacer. Lo único que tenéis que hacer es volver al menú "Insert" y seleccionar la versión que todavía no habéis metido. Así acabaréis con dos archivos de configuración en el documento de Excel que se adaptarán a la versión que usemos.

Dos archivos XML insertados para cada una de las versiones
Dos archivos XML insertados para cada una de las versiones.

Yo sigo adelante con el archivo de la versión 2010/2013 y vamos a empezar a escribir código XML. Usando algunas de las plantillas que hay en el menú "Insert" podríamos ahorrarnos algo de escritura de código, pero no las voy a usar. Como añaden más líneas de las que necesitamos y habría que borrar algunas, prefiero empezar escribiendo todo manual y explicando cada una de las líneas que añadimos. Las dos primeras líneas que tenemos que añadir son las siguientes.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
</customUI>
Líneas que definen una personalización de la Interface de Usuario de Excel
Líneas que definen una personalización de la Interface de Usuario de Excel.

Con estas dos primeras líneas estamos definiendo una personalización de la Interface de Usuario de Excel. Cuando se abra el documento, Excel mirará este archivo y al encontrar estas dos líneas, ya sabe que hemos personalizado algo y que tiene que prestar atención a lo que estará entre estas dos líneas. La primera línea es la de apertura y la última es la de cierre. Todo lo que forme parte de la personalización deberá estar entre estas dos líneas. Esta es la estructura del lenguaje XML, se basa en elementos que se definen con etiquetas. En este caso hay una etiqueta de apertura, la que empieza por "<customUI" y la de cierre "</customUI>". Cuando hay etiqueta de apertura y de cierre, la de cierre siempre es el elemento que se crea con una barra por delante, en este caso el elemento era un customUI, una personalización de la interface de usuario.