Acceso de apertura desde Excel VBA

Editar: la respuesta a esta pregunta se puede encontrar en los comentarios de la respuesta aceptada.

Estoy intentando abrir una database de Access desde un clic de button dentro de mi file de Excel. Actualmente tengo este código:

Private Sub bttnToAccess_Click() Dim db As Access.Application Set db = New Access.Application db.Application.Visible = True db.OpenCurrentDatabase "C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb" End Sub 

Esto parece funcionar brevemente y luego Access se cierra casi de inmediato. Si es importante, el file de Access tiene una macro AutoExec que se ejecuta a través de algunas testings en abierto.

No intente abrir la aplicación de acceso; simplemente cree un object de connection utilizando una de las tecnologías de acceso a datos: – OLE-DB o – ODBC.

Google "Cadenas de connection ODBC" o "Cadenas de connection OLE-DB" para get detalles dependiendo de su configuration particular (y tipo de file Access).

Probablemente ADODB es la biblioteca actual más fácil de usar para su acceso a datos.

Actualización: Intente importar los datos de Access y luego utilice el asistente Datos -> Desde acceso . Yu siempre puede usar la function de reencoding de Macro para generar automáticamente algún código de VBA para usted, que creará cierta infraestructura para usted; Lo uso regularmente cuando exploro nuevas porciones del model de objects VBA.

Actualización – Resolución final del problema, de los comentarios a continuación
Eso puede ser porque la variable está fuera del scope; mover la statement de db fuera de la function, al nivel de module

El código inició Access creando una instancia de aplicación asignada a una variable de object. Al final del procedimiento, la variable salió del scope, por lo que se cerró el acceso.

Usted aceptó una respuesta para usar una variable de nivel de module para la instancia de aplicación de Access. En ese caso, Access sigue ejecutándose después de que finaliza el procedimiento. Sin embargo, si el usuario sale de Excel, Access también se cerrará.

Si el objective es iniciar Access y dejarlo en ejecución hasta que el usuario decida cerrarlo, simplemente inicie Access directamente sin asignar la instancia de la aplicación a una variable de object ( Set db = New Access.Application ). Esa variable db sería útil si su código de Excel lo necesita para otros fines. Sin embargo, en realidad solo se usa para abrir el file db.

Puede usar el método Run de WScript.Shell para abrir su file db en una session de Access.

 Private Sub bttnToAccess_Click() Const cstrDbFile As String = "C:\Users\wcarrico\Desktop\wcarrico-CapstoneFinalSubmission.accdb" Dim objShell As Object Set objShell = CreateObject("WScript.Shell") objShell.Run cstrDbFile Set objShell = Nothing End Sub 

Sé que este es un hilo antiguo, pero obtendrá este error en Excel VBA si está tratando de abrir una database de Access, pero no tiene dos references específicas en las que se haya hecho clic. (Herramientas, Referencias en la pantalla del Editor de VBA). Debe hacer clic en 'Biblioteca de objects de Microsoft Access 15.0' y 'Biblioteca de objects de datos de Microsoft ActiveX 6.1'.

Eliminar la New statement y luego funciona