Ich hab ein neues Problem.
Ich möchte mit Excel VBA, in meinem Access Datenbank, eine
Tabellenerstellung Abfrage aufmachen bzw. starten.
Es funktionniert mit einem Access-VBA Code (in Excel), d.h. ich muss
immer die Datenbank auf haben um meine Makro zu starten.
Um die ganze Sache zu automisieren habe ich eine neue Funktion
geschrieben die die Datenbank aufmacht, und nach der Makro wieder
zumacht.
Jetzt mein Problem: ich kann die Makro auf-/zumachen der Datenbank
nicht 2 mal nach einander starten (Error - Message).
Lösung :
1. Ich würde gern einen anderen Befehl finden von Excel um die
Tabellenerstellung Abfrage zu starten ohne die DB aufzumachen.
2. Sonst hätte ich gern die Lösung für mein auf-/zumachen Funktion
die nicht funktionniert.
Danke für alle Vorschläge !!!!
Florence
Public InAccess As Object
Const wInDB As String = "meine DB"
Sub Abfrage
Dim ADOC1 As New ADODB.Connection
Dim OK As Boolean
Dim X As Object
ADOC1.Open "Provider =Microsoft.Jet.OLEDB.4.0; Data Source =" & _
meine DB& ";"
OK = False
OK = Open_Access_InDB
Set X = CurrentDb
DoCmd.SetWarnings False
DoCmd.OpenQuery "MeineTabellenerstellungsAbfrage"
DoCmd.SetWarnings True
OK = Close_Access_InDB
ADOC1.Close
End Sub
Function Open_Access_InDB() As Boolean
Dim Exclusive_Mode As Boolean, OK As Boolean
Exclusive_Mode = False
OK = True
If InAccess Is Nothing Then
Set InAccess = New Access.Application
InAccess.OpenCurrentDatabase wInDB, Exclusive_Mode
End If
InAccess.Visible = False
Open_Access_InDB = OK
End Function
Function Close_Access_InDB() As Boolean
Dim OK As Boolean
OK = False
Close_Access_InDB = True
InAccess.Quit acQuitPrompt
Set InAccess = Nothing
End Function
On 16 Mrz., 09:27, "Florence" <georgesflore...@yahoo.fr> wrote:
> Hallo,
>
> Ich hab ein neues Problem.
> Ich möchte mit Excel VBA, in meinem Access Datenbank, eine
> Tabellenerstellung Abfrage aufmachen bzw. starten.
>
> Es funktionniert mit einem Access-VBA Code (in Excel), d.h. ich muss
> immer die Datenbank auf haben um meine Makro zu starten.
> Um die ganze Sache zu automisieren habe ich eine neue Funktion
> geschrieben die die Datenbank aufmacht, und nach der Makro wieder
> zumacht.
>
> Jetzt mein Problem: ich kann die Makro auf-/zumachen der Datenbank
> nicht 2 mal nach einander starten (Error - Message).
was steht denn in der Fehlermeldung? Ist nach einmaliger erfogreicher
Abfrage im Taskmanager weiterhin ein Access-Task vorhanden?
Evtl muss das Objekt X wieder freigegeben werden, also hinter
ADOC1.Close noch Set X = Nothing
>
> Lösung :
> 1. Ich würde gern einen anderen Befehl finden von Excel um die
> Tabellenerstellung Abfrage zu starten ohne die DB aufzumachen.
ohne die DB zu öffnen wirds mE nicht gehen. Du kannst den SQL-String,
der deiner Abfrage zugrunde liegt (in Access Entwurfsansicht der
Abfrage, dann Ansicht/SQL-Ansicht), per ADO abfragen, als Bsp:
Sub DBAbfrage()
Const DATEN_QUELLE As String = "d:\test\test.mdb"
Const TABELLE As String = "Tabelle1"
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = New ADODB.Connection
'Verbindung herstellen mittels OLE DB Data Provider
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & DATEN_QUELLE
strSQL = "SELECT * FROM " & TABELLE & _
" WHERE " & TABELLE & ".Sachnummer= 1;"
Set rst = New Recordset
rst.Open strSQL, cnn, adOpenDynamic, adLockReadOnly
'Datensatz mit der Sachnummer finden
Range("A1").CopyFromRecordset rst
End Sub
Gruß
stefan
Erstmal danke Stefan.
In diesem Befehl, wenn ich richtig verstanden hab, muss ich meiner
ganzer SQL Code schreiben.
Ich versuche's aber es klappt nicht, ich kriege immer einen Fehler.
hallo Florence,
der Fehler ist vermutlich "Laufzeitfehler 462. Der Remote-Server-
Computer existiert nicht."
In deinem ursprünglichen Code liegt das daran, dass du bei Codezeilen
nicht das InAccess-Objekt voranstellst:
Set X = CurrentDb muss heissen
Set X = InAccess.CurrentDb und bei den DoCmd vermutlich ebenso (also
InAccess.DoCmd).
statt der DoCmd kannst du den SQL-String verwenden, etwa
OK = Open_Access_InDB
Set X = InAccess.CurrentDb
Sql = "SELECT * FROM Tabelle1;"
Set rs = X.OpenRecordset(Sql)
Range("A1").CopyFromRecordset rs
OK = Close_Access_InDB
der SQL-String steckt, wie geschrieben, hinter deiner Abfrage.
Gruß
stefan