2013-05-01 35 views
6

Edycja: Odpowiedź na to pytanie można znaleźć w komentarzach zaakceptowanej odpowiedzi.Otwieranie dostępu z programu Excel VBA

Próbuję otworzyć bazę danych programu Access za pomocą kliknięcia przycisku w pliku excel. Obecnie mam ten kod:

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 

Wydaje się działać krótko, a następnie program Access zamyka się niemal natychmiast. Jeśli ma to znaczenie, plik programu Access zawiera makro AutoExec, które jest uruchamiane w kilku testach na bieżąco.

+0

Czy próbujesz uruchomić Access GUI wewnątrz Excel, lub po prostu próbuje połączyć się z bazą danych i wyszukiwać dane w środku? –

+0

Po prostu zapewniam łatwy dostęp do bazy danych dla użytkownika. Jestem NAJWYŻSZYM nowicjuszem w VBA i nawet nie jestem pewien co to jest GUI Acess. Baza danych jest w zasadzie oddzielnym narzędziem do planowania ślubu. Pliki Excel i Access zostaną ostatecznie połączone poprzez import. –

Odpowiedz

6

Nie próbuj otwierać aplikacji Access; po prostu utwórz obiekt połączenia za pomocą jednej z technologii Data Access: - OLE-DB lub - ODBC.

Google "Łańcuchy połączeń ODBC" lub "Ciągi połączeń OLE-DB", aby uzyskać szczegółowe informacje w zależności od konkretnej konfiguracji (i typu pliku dostępu).

Prawdopodobnie ADODB jest najłatwiejszą bieżącą biblioteką do wykorzystania w celu uzyskania dostępu do danych.

Aktualizacja: Spróbuj Importowanie danych z programu Access, a następnie przy użyciu danych -> z dostępu kreatora. Yu zawsze może użyć narzędzia do przekodowywania Makr, aby automatycznie wygenerować dla ciebie kod VBA, który utworzy dla Ciebie pewną infrastrukturę; Używam go regularnie podczas eksplorowania nowych części modelu obiektowego VBA.

Update - ostateczne rozwiązanie problemu, z komentarzami poniżej
To może być zmienna, ponieważ wykracza poza zakres; przenieść deklarację db poza funkcję, do poziomu modułu

+0

Bardzo szybko przejrzałem niektóre wyniki w Google i nie miałem pojęcia, o czym rozmawiają i dokąd się udać. Ten projekt jest wstępem do zajęć VBA w szkole, więc dopiero zacząłem się uczyć. Ponadto uważam, że mój komentarz powyżej dotyczący importowania mógł wprowadzić w błąd moje intencje. Zaprojektowałem bazę danych do planowania ślubu, która zarządza listami gości, dostawcami i kilkoma innymi rzeczami. Plik Excela, nad którym teraz pracuję, zajmuje się bardziej stroną finansową wesela (modelowanie, min max głównie obliczenia itp.). Naprawdę chcę tylko móc otworzyć plik dostępu i nic więcej. –

+0

Poruszanie się po zestawie rekordów może być nieco trudne do pogryzienia na początku, jeśli OP jest wyjątkowo początkujący w VBA, jak mówi. – ApplePie

+1

@ AlexandreP.Levasseur: Punkt wzięty; po aktualizacji. –

1

Uruchomiony kod Dostęp poprzez utworzenie instancji aplikacji przypisanej do zmiennej obiektu. Po zakończeniu procedury zmienna wyszła poza zakres, więc program Access został zamknięty.

Zaakceptowano odpowiedź, aby użyć zmiennej poziomu modułu dla instancji aplikacji Access. W takim przypadku program Access pozostaje uruchomiony po zakończeniu procedury. Jednak jeśli użytkownik wyjdzie z programu Excel, program Access również zostanie zamknięty.

Jeśli celem jest uruchomienie programu Access i pozostawienie go uruchomionego, dopóki użytkownik nie zdecyduje się go zamknąć, po prostu uruchom program Access bezpośrednio, bez przypisywania instancji aplikacji do zmiennej obiektu (Set db = New Access.Application). Ta zmienna db byłaby przydatna, gdyby twój kod Excel potrzebował jej do innych celów. Jednak w rzeczywistości jest używany tylko do otwierania pliku db.

Możesz użyć metody Run z WScript.Shell, aby otworzyć swój plik db w sesji 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 
+0

Próbowałem tej metody i dał się uruchomić błąd "Metoda" Uruchom "obiektu" IWshShell3 "nie powiodło się ... – SandPiper

0

Wiem, że to stary wątek, ale dostaniesz ten błąd w programie Excel VBA jeśli próbujesz otworzyć bazy danych Access, ale nie masz dwóch konkretnych odniesień kliknięciu. (Narzędzia, odnośniki na ekranie edytora VBA). Musisz kliknąć "Biblioteka obiektów Microsoft Access 15.0" i "Biblioteka Microsoft ActiveX Data Objects 6.1".

0

Usuń deklarację New to działa

Powiązane problemy