Cambiar automáticamente las referencias a las bibliotecas VBA (Microsoft Excel)
Mark se encuentra en un entorno de trabajo que usa dos versiones de Excel 2002 y 2003. Surge un problema cuando abre un libro con una macro en Excel 2003, que instala la biblioteca VB de Office 11, y luego alguien intenta abrir el mismo libro de trabajo en Excel 2002, que da un error cuando la macro intenta ejecutarse porque no puede encontrar la referencia correcta de la biblioteca de VBA. Mark sabe que puede corregir esto manualmente yendo al editor de VB y borrando la referencia a la biblioteca de VBA que falta, pero se pregunta si hay alguna forma de que el libro de trabajo verifique la versión de Excel automáticamente y actualice la referencia de la biblioteca de VBA en consecuencia.
Una forma de lidiar con esto es crear y guardar el libro con la versión anterior de Excel. Cuando se abre en la versión posterior de Excel, la referencia a la biblioteca VBA se actualizará automáticamente.
Excel hace que las actualizaciones vayan a versiones posteriores, pero no las hace a versiones anteriores.
Sin embargo, esto significa que incluso si el libro de trabajo se crea en la versión anterior de Excel, una vez que se abre y luego se guarda en la versión posterior de Excel, los usuarios de la versión anterior tendrán problemas para abrirlo.
La solución, según algunas fuentes, es recurrir a lo que se conoce como? Enlace tardío ?. Esto simplemente significa que la macro se escribe de modo que busque funciones específicas solo durante el tiempo de ejecución, no cuando se guarda la macro. Se hace referencia a esto un poco en el siguiente artículo de Microsoft Knowledge Base:
http://support.microsoft.com/?kbid=244167
Puede probar técnicas de enlace tardías abriendo el editor de VBA y eliminando cualquier referencia establecida previamente. Luego agregue un código similar al siguiente cerca del inicio de su macro:
If Application.Version = "10.0" Then 'Excel 2002 Dim oExcel As Object 'Apply late binding Set oExcel = CreateObject("Excel.Application") End If If Application.Version = "11.0" Then 'Excel 2003 ' ' Add whatever references you want for Excel 2003 ' End If
Al final de la macro, asegúrese de establecer cualquier objeto definido (como oExcel) en Nothing. Un buen ejemplo de código que es más robusto que el que se presenta aquí se puede encontrar en estos artículos:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=267 http://www.vbaexpress.com/kb/getarticle.php?kb_id=272
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (3340) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.