Archivo de la etiqueta: VBA

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

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.

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: Mejor una megaformula antes que varias fórmulas intermedias (#VBAforEPMAddin)


Cuando diseñemos formularios con el EPM Add-in, tal vez algún dato requerirá un tratamiento adicional y para lograr el resultado deseado, quizás se requiera más de una operación intermedia.  Por ejemplo, recuperamos un ID y se desea uniformizar la longitud de cada porción que lo conforma y se opta por la siguiente solución:

En este ejemplo utilizamos 5 fórmulas intermedias

Las fórmulas utilizadas resultan legibles, pero a costa de mayor tiempo de recálculo e incremento considerable del tamaño del libro, lo que deriva en un incremento importante del tiempo de apertura

La definición anterior resulta clara para la gran mayoría, pero dependiendo de la cantidad de filas que se recuperen y/o si se almacena con todos los datos, la apertura del libro y su recalculo, demandará más tiempo que si se opta por una solución basada en evitar las fórmulas intermedias y definir una sola fórmula que realice todos los cálculos, la cual pasaría a denominarse, según la terminología MS Excel, megafórmula.

Las 5 fórmulas intermedias serían sustituidas por una megaformula, obtenemos menor tiempo de actualización y un libro de menor tamañoLa sugerencia final es evitar la definición de fórmulas o local members que no tendrán uso real para el usuario, que a menudo se definen para cálculos internos o intermedios y terminan ocultándose. Dependiendo del vólumen de datos que se esté procesando, valorar si mayor eficiencia se logrará con una sola fórmula, aunque su diseño y comprensión resulte un poco más complejo.

VBA for SAP EPM Add-in: Declaración de variables indispensable (#VBAforEPMAddin)


En VBA, como en muchos otros lenguajes de programación, tenemos la “libertad” de hacer muchas cosas pero algunas de ellas resultan poco recomendables. Uno de los casos más frecuentes, relacionados a este tema, es el uso de variables.

En VBA tenemos la opción por defecto de utilizar variables sin declararlas.  Los programas declarando todas las variables que se utilizarán, señalando el tipo de datos adecuado es muy probable que obtenga el mismo resultado si codificamos sin declarar las variables a emplear. Entre uno y otro estilo redundará en el tiempo de procesamiento. 

Por ejemplo, con la siguiente rutina, dependiendo de las características del ordenador, su ejecución con las variables correctamente tipificadas tardó 15 segundos y retirando la declaración de variables (comentando estas líneas) esta rutina tardo 55 segundos (pruebas realizadas en una máquina virtual con 1 CPU (2.4GHz) y 2 GB de memoria).

Rutina para comprobar la eficiencia que se logra en VBA al declarar adecuadamente todas las variables que se utilizarán(aquí código)

Una buena práctica es utilizar Option Explicit a nivel de módulo para no olvidar la declaración de variables en ninguna parte de cada proyecto.  Por defecto, cualquier variable no declarada, será de tipo Variant, la cual ocupa más espacio en memoria e internamente para VBA requiere mayor tratamiento.