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