En un proyecto de automatizaci贸n (m谩s concretamente, al crear una macro que nos permite automatizar una tarea) existen ocasiones en las que es necesario que un software (por ejemplo, Excel) se comunique con y/o controle a otro (como Outlook, Word o PowerPoint) mediante el modelo de objetos componentes (COM) de Microsoft. Esta comunicaci贸n entre programas puede lograrse a trav茅s de dos estrategias principales.
El enlace anticipado y el enlace en tiempo de ejecuci贸n en tus macros de VBA tienen efectos concretos sobre el programa, desde el rendimiento, hasta la flexibilidad y el mantenimiento. Pero tal vez esos nombres te resulten algo extra帽os, y puede que los conozcas por sus nombres originales en ingl茅s: early binding y late binding respectivamente. Cada uno de ellos presenta una serie de fortalezas que deber谩s sopesar en un proyecto a fines de poder aprovecharlas.
"Binding" o enlazar, implica poder utilizar referencias a objetos externos (otras aplicaciones) a fines de ejecutar c贸digo (funciones, propiedades) que est谩n disponibles en los mismos, y lograr trasmitir informaci贸n entre ellas. Esto es muy 煤til cuando desde la informaci贸n disponible en Excel precisamos enviar correos electr贸nicos, crear presentaciones o documentos de texto.
La diferencia principal entre ellos, es que en late binding creamos primero la variable como un Objeto (gen茅rico), y en early binding, como una instancia de la aplicaci贸n en concreto.
Early binding:
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application
Late binding:
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
A partir de ese punto, hemos creado dos objetos casi equivalentes (olApp), y el proceso subsiguiente casi no se diferencia.
Early binding o enlace anticipado recibe este nombre porque desde un primer momento, VBA sabr谩 con qu茅 aplicaci贸n estar谩 tratando espec铆ficamente, permiti茅ndole desplegar una biblioteca de IntelliSense espec铆fica. Late binding o enlace en tiempo de ejecuci贸n se denomina de tal manera porque el objeto se terminar谩 de enlazar durante la misma ejecuci贸n del c贸digo, en lugar de hacerlo anticipadamente.
Por lo general, la opci贸n preferida es hacerlo por early binding, ya que es m谩s eficiente en t茅rminos de rendimiento (la asignaci贸n es directa). Adem谩s, otra ventaja es que proporciona IntelliSense por parte de VBA, ya que desde el mismo c贸digo VBA identifica qu茅 tipo de objeto est谩 tratando, en lugar de ser uno "gen茅rico".
Sin embargo, late binding puede ser 煤til para evitar problemas de compatibilidad cuando el c贸digo debe trabajar con diferentes versiones de los programas (por ejemplo, si en un ordenador coexisten diferentes versiones de Outlook), o si una macro debe ejecutarse en diferentes ordenadores.
Por lo tanto, si lo cr铆tico en tu proyecto es el rendimiento (tanto para redactar el c贸digo como para ejecutarlo), te recomiendo considerar aplicar el enlace anticipado. Si por otro lado, debes priorizar la flexibilidad, debes considerar utilizar el enlace en tiempo de ejecuci贸n (late binding).