VBA for SAP EPM Add-in: No te olvides de los “pequeños detalles” (#VBAforEPMAddin)

Cuando revisamos un código VBA por optimizar, podemos ver detalles aparentemente “insignificantes” o poco relevantes pero cuando se ejecutan de manera conjunta con datos reales, podrían repercutir en los tiempos de procesamiento. Cuando utilizamos VBA en nuestros formularios EPM Add-in (cliente para SAP BPC – SAP Business Planning and Consolidation) restamos importancia a pequeños detalles como los siguientes:


Cuando revisamos un código VBA por optimizar, podemos ver detalles aparentemente “insignificantes” o poco relevantes pero cuando se ejecutan de manera conjunta con datos reales, podrían repercutir en los tiempos de procesamiento. Cuando utilizamos VBA en nuestros formularios EPM Add-in (cliente para SAP BPCSAP Business Planning and Consolidation) restamos importancia a pequeños detalles como los siguientes:

  • Declara todas las variables
  • Señalar siempre el alcance de las funciones (públicas o privadas)
  • No dejes funciones de evento vacías, si no las usas, elimínalas (olvídate de “quizás la use más adelante”)
  • Las referencias a objetos siempre entre With y End With
  • Si utilizarás un objeto de MS Excel en más de una sentencia, será mejor que utilices una variable objeto que referencia alobjeto.
  • Las funciones de tratamiento de cadenas son más eficientes las de MS Excel que las de VBA.
  • Salvo para e tratamiento de errores, olvídate del “Go To”, terminarás perdiendo el control.

VBA for SAP EPM Add-in: No todas las “instrucciones clave” agilizan siempre la ejecución del código (#VBAforEPMAddin)

Si buscamos en Internet qué hacer para agilizar la ejecución de nuestro código VBA de nuestros formularios EPM Add-in (cliente de SAP BPC – SAP Business Planning and Consolidation), seguro que encontraríamos sugerencias que señalan, entre otras cosas, el uso de las siguientes sentencias:


Si buscamos en Internet qué hacer para agilizar la ejecución de nuestro código VBA de nuestros formularios EPM Add-in (cliente de SAP BPCSAP Business Planning and Consolidation), seguro que encontraríamos sugerencias que señalan, entre otras cosas, el uso de las siguientes sentencias:

  • Application.Interactive
  • Application.ScreenUpdating
  • Application.Calculation
  • Application.EnableEvents

Podríamos utilizar estas instrucciones al iniciar nuestras rutinas, pero como en todo, “el café para todos” no siempre resulta lo más aconsejable, dependiendo de la complejidad de las rutinas, en ocasiones será necesario revisar el código vía las opciones de Debug que tenemos en la interfaz para trabajar con VBA y comprobar si la aplicación de todas estas instrucciones resultan aconsejable, en especial, la desactivación del cálculo automático de MS Excel.

Por otro lado, recomendamos especial cuidado en el uso generalizado de estas sentencias en todos los procedimientos, dado que una llamada a una subrutina podría dejar estos parámetros con los valores no deseados al retornar el control al procedimiento que lo invocó.

VBA for SAP EPM Add-in: Uso de la función Aggregate (#VBAforEPMAddin)

Decidir que versión de MS Office se utilizará como estándar en la implementación de una solución SAP BPC (SAP Business Planning and Consolidation) es un factor clave que repercutirá en el desarrollo del proyecto. Por lo pronto, cualquier nuevo proyecto SAP BPC 10.0 debería valorar las siguientes versiones 2007, 2010 y 2013 (esta última a partir del EPM Add-in SP14).


Decidir que versión de MS Office se utilizará como estándar en la implementación de una solución SAP BPC (SAP Business Planning and Consolidation) es un factor clave que repercutirá en el desarrollo del proyecto.  Por lo pronto, cualquier nuevo proyecto SAP BPC 10.0 debería valorar las siguientes versiones 2007, 2010 y 2013 (esta última a partir del EPM Add-in SP14).

Primer parámetro de la función AGGREGATE o AGREGAR de MS Excel 2010 y 2013

No tan sólo está comprobada la mayor eficiencia y rapidez de MS Excel de la versión 2010 con respecto a la 2007, sino también la mayor disponibilidad de funcionalidades y características, facilitarán las tareas de diseño de formularios. Por ejemplo, la función AGGREGATE o Agregar, incorporada a partir de la versión 2010, permite realizar cualquier función de agregación (ver tabla adjunta) señalando el tratamiento que se le dará a las filas/columnas ocultas o las celdas con errores o valores nulos, realizar estas operaciones en la versión 2007 significaría recurrir a código VBA (macros).

Segundo parámetro de la función AGGREGATE o AGREGAR de MS Excel 2010 y 2013

Nuestra sugerencia es apostar por el uso de la versión 2010 para el diseño de formularios de entrada e informes EPM Add-in para SAP BPC,  por las mejoras con respecto a la versión 2007 y debido a que la novedad de versión 2013 podría dar lugar a algunas sorpresas o contratiempos.  La versión 2003 será retirada del soporte de Microsoft y por consiguiente de SAP en abril de 2014.

VBA for SAP EPM Add-in: Función IFERROR mejor que IF(ISERROR (#VBAforEPMAddin)

Evitar la visualización de errores tales como #¡DIV/0! en nuestros formularios de entrada e informes EPM Add-in es necesario, para este fin, la mejor alternativa es el uso de la función IFERROR (SIERROR). Esta función tiene dos argumentos, el primero es la expresión o fórmula que se evaluará si no genera error, si es correcto, su resultado se muestra en la celda, si genera error, en la celda se mostrará la expresión definida como segundo parámetro de esta función.


Evitar la visualización de errores tales como #¡DIV/0! en nuestros  formularios de entrada e informes EPM Add-in es necesario, para este fin, la mejor alternativa es el uso de la función IFERROR (SIERROR).  Esta función tiene dos argumentos, el primero es la expresión o fórmula que se evaluará si no genera error, si es correcto, su resultado se muestra en la celda, si genera error, en la celda se mostrará la expresión definida como segundo parámetro de esta función.

Una alternativa válida, pero menos óptima o eficiente es el uso de la expresión IF(ISERROR(<expresión>); <valorSiError>;<expresión>)  dado que la fórmula o cálculo que se desea efectuar de realiza dos veces por cada posición y dependiendo del tamaño del formulario, este aspecto puede contribuir negativamente en su actualización.

Nota: No confundir el nombre de las funciones entre la versión en ingles y en español.  IFERROR equivale a SIERROR y ISERROR equivale a ESERROR.

VBA for SAP EPM Add-in: Programa la ejecución automática de rutinas (#VBAforEPMAddin)

Los formularios de entrada o informes de SAP BPC (SAP Business Planning and Consolidation) tanto en versiones anteriores, como los que diseñemos con el EPM Add-in sólo se conectan al servidor cuando enviamos o solicitamos datos. Cada vez que abrimos un libro MS Excel en el que hemos diseñado nuestros formularios de entrada de datos o informes, una copia del mismo es almacenada en una carpeta local. Esta copia local del libro MS Excel no se actualizará hasta que no se vuelva acceder al “template”, normalmente almacenado en el servidor de BPC.


Los formularios de entrada o informes de SAP BPC (SAP Business Planning and Consolidation) tanto en versiones anteriores, como los que diseñemos con el EPM Add-in sólo se conectan al servidor cuando enviamos o solicitamos datos.  Cada vez que abrimos un libro MS Excel en el que hemos diseñado nuestros formularios de entrada de datos o informes, una copia del mismo es almacenada en una carpeta local. Esta copia local del libro MS Excel no se actualizará hasta que no se vuelva acceder al “template”, normalmente almacenado en el servidor de BPC.

Ejemplo del uso del método OnTime del objeto Application de VBA para automatizar la ejecución de rutinasEl comportamiento descrito en el párrafo anterior podría dar lugar a posibles contratiempos, por ejemplo, que un usuario no cierre el libro MS Excel durante días y resulte trabajando con un formulario desactualizado o por políticas del procedimiento que se ha automatizado, se encuentre fuera de los plazos para utilizar dicho formulario (si es que se lleva algún control de plazos, períodos o calendarios).   Una sugerencia para esta situación sería programar en el tiempo la ejecución automática de rutinas VBA que pudiesen comprobar el tiempo de apertura que tiene el libro MS Excel.  Para automatizar la ejecución de rutina podemos utilizar el método OnTime del objeto Application.