2013-05-01 44 views
6

Modifica: la risposta a questa domanda può essere trovata all'interno dei commenti della risposta accettata.Accesso iniziale da Excel VBA

Sto tentando di aprire un database di Access da un clic sul pulsante all'interno del mio file excel. Al momento ho questo codice:

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 

Questo sembra funzionare brevemente e quindi l'accesso si interrompe quasi immediatamente. Se è importante, il file di Access ha una macro AutoExec che viene eseguita con alcuni test in apertura.

+0

Si sta tentando di eseguire la GUI di accesso all'interno di Excel, o semplicemente cercando di connettersi al database e interrogare i dati dentro? –

+0

Fornisco semplicemente un accesso facile al database per l'utente. Sono ESTREMAMENTE novizio in VBA e non sono nemmeno sicuro di cosa sia la GUI di Acess. Il database è fondamentalmente uno strumento separato per pianificare un matrimonio. I file di Excel e di accesso finiranno per collegarsi attraverso un'importazione. –

risposta

6

Non tentare di aprire l'applicazione Access; è sufficiente creare un oggetto di connessione utilizzando una delle tecnologie di accesso ai dati: - OLE-DB o - ODBC.

Google "Stringhe di connessione ODBC" o "Stringhe di connessione OLE-DB" per ottenere dettagli in base alla configurazione specifica (e al tipo di file Access).

Probabilmente ADODB è la libreria corrente più semplice da utilizzare per l'accesso ai dati.

Aggiornamento: prova a importare i dati da Access quindi utilizzando il Dati -> Dalla Accesso procedura guidata. Yu può sempre utilizzare la funzione di ricodifica Macro per generare automaticamente un codice VBA per te, che creerà per te un'infrastruttura; Lo uso regolarmente quando esploro nuove porzioni del modello di oggetti VBA.

Aggiornamento - la risoluzione finale del problema, dai commenti qui sotto
Questo può essere perché la variabile va fuori del campo di applicazione; spostare la dichiarazione di db fuori dalla funzione, a livello modulo

+0

Ho esaminato molto rapidamente alcuni risultati su Google e non avevo idea di cosa stessero parlando o da dove andare. Questo progetto è per l'introduzione alla classe VBA a scuola, quindi ho appena iniziato a studiare. Inoltre, penso che il mio commento precedente sull'importazione potrebbe aver confuso le mie intenzioni. Ho progettato un database per la pianificazione del matrimonio che gestisce elenchi di ospiti, venditori e poche altre cose. Il file excel su cui sto lavorando ora si occupa maggiormente del lato finanziario del matrimonio (modellazione, calcoli minimi, soprattutto, ecc.). Voglio solo essere in grado di aprire il file di accesso e nient'altro. –

+0

La navigazione in un recordset potrebbe essere un po 'difficile da masticare all'inizio se OP è estremamente alle prime armi in VBA come dice. – ApplePie

+1

@ AlexandreP.Levasseur: punto preso; post aggiornato. –

1

Il codice ha avviato Access creando un'istanza dell'applicazione assegnata a una variabile oggetto. Al termine della procedura, la variabile è stata esclusa dall'ambito di applicazione, quindi Access si spegne.

È stata accettata una risposta per utilizzare una variabile a livello di modulo per l'istanza dell'applicazione di Access. In tal caso, Access rimane in esecuzione al termine della procedura. Tuttavia, se l'utente esce da Excel, anche l'accesso verrà chiuso.

Se l'obiettivo è avviare Access e lasciarlo in esecuzione fino a quando l'utente decide di chiuderlo, avviare direttamente Access senza assegnare l'istanza dell'applicazione a una variabile oggetto (Set db = New Access.Application). La variabile db sarebbe utile se il tuo codice Excel lo richiedesse per altri scopi. Tuttavia, in realtà è utilizzato solo per aprire il file db.

È possibile utilizzare il metodo Run di WScript.Shell per aprire il file db in una sessione di accesso.

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 
+0

Ho provato questo metodo e ha dato un errore di run-time "Metodo 'Esegui' di Object 'IWshShell3' non riuscito ... – SandPiper

0

So che questo è un vecchio thread, ma si otterrà questo errore in Excel VBA, se si sta tentando di aprire un database di Access, ma non si hanno due riferimenti specifici cliccato. (Strumenti, riferimenti sulla schermata Editor VBA). È necessario fare clic su "Libreria oggetti di Microsoft Access 15.0" e "Libreria Microsoft ActiveX Data Objects 6.1".

0

Rimuovere la dichiarazione New allora funziona