Accediendo a .Net Framework desde VBA

Estándar

Siempre estoy buscando nuevas maneras de ampliar las posibilidades con VBA, ya sea combinándolo con otros lenguajes o herramientas, y en mi búsqueda he dado con una maravilla que será de gran ayuda en lo que deseo y estoy seguro que para muchos otro también. Había visto desde crear dll’s en visual studio, complementos como ExcelDNA, entre otras, pero esta última se me hace más práctica y con mayores posibilidades:

¡Hola, chicos del scripting!

Ahí se muestra como poder acceder a las estructuras de datos que brinda el .Net Framework lo cual supone nuevas posibilidades en el desarrollo desde VBA, el único inconveniente a primera vista es que hay que contar con el .Net Framework instalado en el equipo. El mío ya lo tenía y funciono a la primera.

Tal como se menciona en el artículo, donde se ve un ejemplo del uso del Objeto ArrayList, el cual pudiéramos comparar a usar una matrix en VBA, pero con esteroides, más poderosa y fácil de usar:

¿Es útil ArrayList para los generadores de scripts? Digámoslo así: después de ver la utilidad de arraylist en .NET Framework, no estamos seguros de por qué quería usar una matriz VBScript integrada, al menos no para listas simples de elementos como las empleadas aquí.

Con las estructuras de datos de .Net Framework VBA vuelve a tomar nuevas y mas posibilidades en mi trabajo diario.

Excel-DNA (incorporando .Net a VBA/Excel)

Estándar

Introducción


Excel-DNA (DotNet for Applications) – Excel DNA trae el poder de .NET a los usuarios y desarrolladores de Excel.
Se trata de un proyecto independiente para integrar .NET dentro de Excel con lo cual esta herramienta puede ser de gran utilidad para aquellos usuarios que actualmente escriben código VBA para desarrollar funciones o macros y que les gustaría comenzar a utilizar .NET en sus desarrollos.
Es gratuito para todo tipo de uso y se distribuye bajo licencia de código abierto lo cual permite su uso comercial y puede distribuir libremente.
Esta desarrollado en .NET y lo usuarios solo tienen que instalar el Framework .Net para su fácil uso. La integración es por complemento (.xll) el cual expone el código .Net a Excel. El código desarrollado puede basarse en texto (archivos .dna), archivos de script (C#, Visual Basic or F#) o compilando librerías .NET (.dll)
Excel-DNA soporta los Frameworks (2.0, 3.0 y 3.5), pudiendo estar disponible desde las versiones 97 a la 2010 y soportando características avanzadas como son el multiprocesamiento para calculo (Excel 2007 y superior), registro de servidores RTD (Excel 2002y superiores) y personalización de la cinta de opciones (Excel 2007 y 2010)

Desempeño

Con Excel-DNA se pueden crear UDF’s (funciones definidas por el usuario) de alto desempeño usando conjuntos de tipos restrictivos y tomando la responsabilidad del filtrado de excepciones. En otras palabras ExcelDNA esta diseñado para ser flexible y hacer la exposición de funciones de manera segura.
Si tenemos funciones que tardan demasiado tiempo para la realización de cálculos o procesamiento de datos, quizás ExcelDNA pueda ayudar a disminuir ese tiempo.

 Comenzando

  •  Descargamos Excel-DNA de su página oficial
  •  Extraemos su contenido
  •  Tendremos una carpeta de código y una de distribución (en esta encontraremos algunos archivos de referencia e introducción y una carpeta de ejemplos)
  •  .Net 2.0 debe estar instalado
  •  El nivel de seguridad de macro no debe estar en alto y se deben habilitar
  •  Hacemos una copia del archivo ExcelDna.xll en un directorio de nuestra preferencia y lo renombramos a prueba.xll
  •  En un editor de texto creamos la siguiente función de usuario:

<DnaLibrary>

<![CDATA[

Public Module MyFunctions

Function AddThem(x, y)

AddThem = x + y

End Function

End Module

]]>

</DnaLibrary>

  •  Guardamos el archivo como prueba.dna junto al archivo anterior (prueba.xll)
  •  Cargamos prueba.xll en Excel (como si se tratara de un complemento estandar)
  •  Una vez cargado el complemento nos situamos en una celda y escribimos: “=AddThem(4,2)”, lo cual nos devolverá 6.

Así habremos creado una sencilla función de usuarios (UDF) que suma dos números y devuelve el resultado. Se trata de una función muy fácil y simple pero se podría crear funciones más avanzadas haciendo uso de las clases que provee .NET lo cual puede reportarnos beneficios en tiempos de respuesta y ampliar nuestras posibilidades de desarrollo.