Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Tabellenerstellung Abfrage aus Excel-VBA

2 views
Skip to first unread message

Florence

unread,
Mar 16, 2007, 4:27:16 AM3/16/07
to
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).

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

Florence

unread,
Mar 16, 2007, 4:35:31 AM3/16/07
to
Oups ich habe den Code für auf-/zumachen vergessen :

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

stefan onken

unread,
Mar 16, 2007, 7:27:01 AM3/16/07
to
hallo Florence,

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

Message has been deleted

Florence

unread,
Mar 16, 2007, 10:38:17 AM3/16/07
to
strSQL = "SELECT * FROM " & TABELLE & _
" WHERE " & TABELLE & ".Sachnummer= 1;"

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.

stefan onken

unread,
Mar 16, 2007, 11:41:02 AM3/16/07
to

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

Florence

unread,
Mar 19, 2007, 5:21:30 AM3/19/07
to
Du bist ein Genie ! Funktionniert wunderbar !
Vielen Dank !

0 new messages