access-vba - compatibilidad - importar datos de excel a access vba
Admite múltiples versiones de Excel para la automatización desde una aplicación de Access (1)
Tengo una aplicación de acceso, desarrollada en Access 2013 en env multiusuario, usa automatización de Excel para exportar y formatear un archivo de Excel.
Las referencias normales de Office / Excel 2013 (15.0) se han realizado y todas funcionan bien en las máquinas de Office 2013. No funciona bien en las máquinas 2010.
Utilizando una máquina 2010, reemplacé las 15.0 referencias con 14.0 referencias, y la aplicación es feliz en las máquinas 2010 y 2013. Tras la próxima edición / actualización en mi máquina 2013, vuelven las 15.0 referencias.
¿Alguna sugerencia para desarrollar / operar de manera más conveniente en este entorno de múltiples versiones?
¡Gracias!
La solución general a este problema es utilizar el enlace tardío . Las desventajas del encuadernado tardío son
-
Dim xlApp As Object
significa que no obtenemos IntelliSense paraxlApp
, y - Las constantes relacionadas como
xlEdgeTop
no se definen sin la referencia asociada
Estos problemas se pueden mitigar mediante el uso de compilación condicional en el proyecto de VBA. Para el desarrollo, agregue la Referencia requerida al proyecto y defina un argumento de compilación condicional
que puedes usar en tu código como este
Option Compare Database
Option Explicit
Public Sub WorkWithExcel()
#If LateBinding Then
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
#Else
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
#End If
Debug.Print xlEdgeTop
End Sub
Para evitar el desorden, me inclinaría a mantener las constantes en un Módulo por separado como este
Option Compare Database
Option Explicit
#If LateBinding Then
Public Const xlEdgeTop = 8
#End If
Cuando se completa el ajuste del código, elimine la referencia, establezca el argumento de LateBinding
en "True" ( LateBinding = -1
) y compile el proyecto. Agregue las constantes que haya omitido (siempre parece haber una o dos) y cuando se compile sin la referencia, debe implementarlas.
Para la próxima sesión de desarrollo, establezca LateBinding en "False" ( LateBinding = 0
) y vuelva a agregar la referencia en.