Excel access

Hallo Liebe/-r Experte/-in,
Ich möchte über Excel VBA eine Access Abfrage ausführen
und das Ergebnis wiederum in meine Excel tabelle
eintragen lassen.
Ich habe’s versucht über Query, es geht nicht.
Jetzt habe ich in einem CommandButton folgender Code
eingetragen. Die SQL Zeile habe ich mir einfach aus der
Access geholt und in meinem Code eingefügt.
Es kommt aber immer einen Laufzeitfehler 13: Typen
unverträglich.
Ich habe schon alles Variablen anders deklariert geht
aber nicht.Kann mir jmd helfen oder wie kann von Excel
die Abfrage anders durchführen?

Code:
Private Sub CommandButton1_Click()

Sheets(„rohdaten“).Select
With ActiveSheet.QueryTables.Add(Connection:= _

„ODBC;DSN=fuebas;SERVER=BASF03;DATABASE=fuebas;SERVERTYPE
=INGRES“, _
Destination:=Sheets(„rohdaten“).Range(„A1“))
.CommandText = Array( _
„SELECT fteil_daten.objekt, fteil_daten.gruppe,
fteil_daten.key1, fteil_daten.key2, fteil_daten.ob_dz,
fteil_daten.datum, fteil_daten.f1, fteil_daten.f2,
fteil_daten.f3, fteil_daten.f4, fteil_daten.f5,
fteil_daten.f6, fteil_daten.f7, fteil_daten.speicherdat
FROM fteil_daten INNER JOIN fteil_ob_dz ON
(fteil_daten.ob_dz = fteil_ob_dz.ob_dz) AND
(fteil_daten.key2 = fteil_ob_dz.key2) AND
(fteil_daten.key1 = fteil_ob_dz.key1) AND
(fteil_daten.objekt = fteil_ob_dz.objekt) WHERE
(((fteil_daten.objekt)=‚Produkt‘) AND
((fteil_daten.gruppe)=‚fl_st‘) AND
((fteil_daten.key1)=‚1097484‘) AND
((fteil_daten.key2)=‚21936032‘))“ _
)

.Name = „basf_tokyo“
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = _
„C:\Documents and Settings\Application
Data\Microsoft\Queries\basf_1.dqy“
.Refresh BackgroundQuery:=False
End With
ActiveWorkbook.Save

End Sub

Hier ist mein SQL Code aus Access, den ich kopiert habe
und in VBA eingefügt.In Access funktioniert die Abfrage
mit diesem SQL Code perfekt:

SELECT fteil_daten.objekt, fteil_daten.gruppe,
fteil_daten.key1, fteil_daten.key2, fteil_daten.ob_dz,
fteil_daten.datum, fteil_daten.f1, fteil_daten.f2,
fteil_daten.f3, fteil_daten.f4, fteil_daten.f5,
fteil_daten.f6, fteil_daten.f7, fteil_daten.c1,
fteil_daten.c2, fteil_daten.speicherdat
FROM fteil_daten INNER JOIN fteil_ob_dz ON
(fteil_daten.objekt = fteil_ob_dz.objekt) AND
(fteil_daten.ob_dz = fteil_ob_dz.ob_dz) AND
(fteil_daten.key2 = fteil_ob_dz.key2) AND
(fteil_daten.key1 = fteil_ob_dz.key1)
WHERE (((fteil_daten.objekt)=„Produkt“) AND
((fteil_daten.gruppe)=„fl_st“) AND
((fteil_daten.key1)=“1097484“) AND
((fteil_daten.key2)=“21936032”));

Bitte um Ihre Hilfe, denn ich suche scho seit 4 Wochen
nach der falschen Variable
Danke i.V.
Dennis

Hallo Dennis,

ich persönlich kann dir zwar nicht helfen, aber dies habe ich gefunden:

"ich habe deine Anfrage so verstanden, daß du mit den Daten einer Access-Abfrage in Excel-VBA arbeiten willst.

Du schreibst im Excel-VBA eine neue Sub mit folgendem Code:

Dim wsp As Workspace
Dim db As Database
Dim rec As Recordset

Set wsp = DBEngine.Workspaces(0)
Set db = wsp.OpenDatabase(„c:\DeineDatenbank.mdb“)
Set rec = db.OpenRecordset(„DeineAbfrage“)

Außerdem hakst du unter Extras -> Verweise Microsoft DAO 3.51 (Access '97) bzw. DAO 3.6 (Access 2000 und höher) an.
Du stehst jetzt quasi auf dem ersten Datensatz der Abfrage.

Klar kannst du diesen Code auch in Access-VBA (also in einer anderen DB) verwenden, wobei du dann auch den Verweis nicht brauchst."

Es stammt von einer Julia hier bei WWW. Da du ja selber sagst, dass die Abfrage im Access funktioniert, warum nicht auf diese Art.

Ich hoffe es hilft dir weiter.

Gruß Matthias

Hallo Dennis,

mit welcher Office-Version arbeitest Du?

Sophie

Hallo Dennis,

mit welcher Office-Version arbeitest Du?

Sophie

Hi,
Mit Office 2003

was meinst du genau mit „Ich habe’s versucht über Query, es geht nicht.“?
funktionierte die ODBC quelle nicht?
war die abfrage korrekt?
kamen irgendwelche fehlermeldungen?

Sophie

was meinst du genau mit "Ich habe’s versucht über

Query, es

geht nicht."?
funktionierte die ODBC quelle nicht?
war die abfrage korrekt?
kamen irgendwelche fehlermeldungen?

Sophie

Die Abfrage an sich funktioniert prima wenn ich die in
Access ausführe.Ich will aber irgendwie in Excel über
ein Commandbutton immer wieder 1-2 Spalten ändern um
entsprechend die Daten haben.DAfür brauche 2 Verknüpfte
Tabellen und mit Query kommt dann immer die Meldung
etwa „mit verknüpften Tabelle funktioniert es nicht“
Ich bin verzweifelt.

heisst es, du willst explizit ein button haben, das einen bestimmten code ausführt oder willst du einfach die daten reinkriegen ins excel?

ich bin nicht sehr gut in VBA, allerdings prinzipiell brauchst du ja kein query, um daten aus access oder sql in excel zu bringen

so wie ich deine abfrage lese, hast du über access tabellen einer datenbank verknüpft, die du jetzt ins excel bringen willst, richtig?
ich mache sowas normalerweise auf dem direkten weg über odbc zu der datenbank selber, ohne access
dann kann ich entweder mit query arbeiten, oder die in meinen augen saubere lösung zu nehmen und die abfrage als sicht in sql erstellen, dann nur ins excel holen

geht es in deinem fall nicht?

alternativ kannst du die abfrage in access erstellen und diese nach excel verknüpfen

Hi Sophie,
In meinem Fall geht’s nicht.Ich bekomme immer von Excel eine Meldung Datentyp unverträglich.Ich habe aber schon alle Daten kontrolliert und geändert angepasst anders deklariert.Es geht nicht.
Ja ich will per Commandbutton dass meine Abfrage ausgeführt wird und somit die Daten in Excel geschrieben werden. Ich habe dafür den SQL Code aus Access geholt und in Meine Excel VBA Editor eingefügt und angepasst.Aber es geht nicht.(Datentyp unverträglich).
HILFE!!!

Hi!

Ich sehe aber nirgends „AS …“ in deiner Abfrage?
Ich weiss nicht welche Typen unverträglich sind, ob es Zahl vs Text ist oder Datum.

Aus meiner Erfahrung einer oder mehrere von diesen passen nicht zusammen:

(fteil_daten.ob_dz = fteil_ob_dz.ob_dz) AND
(fteil_daten.key2 = fteil_ob_dz.key2) AND
(fteil_daten.key1 = fteil_ob_dz.key1) AND
(fteil_daten.objekt = fteil_ob_dz.objekt)

und dann hilft ja auch kein Button, oder?

Kannst Du die Tabellen in SQL anschauen um zu sehen als was die einzelnen Spalten gespeichert werden? Dann kämen wir schon weiter. Ach, und welche Spalten hast Du wie versucht, anders zu deklarieren?

Sophie

Hi!

Ich sehe aber nirgends „AS …“ in deiner Abfrage?
Ich weiss nicht welche Typen unverträglich sind, ob es

Zahl vs

Text ist oder Datum.

Aus meiner Erfahrung einer oder mehrere von diesen

passen

nicht zusammen:

(fteil_daten.ob_dz = fteil_ob_dz.ob_dz) AND
(fteil_daten.key2 = fteil_ob_dz.key2) AND
(fteil_daten.key1 = fteil_ob_dz.key1) AND
(fteil_daten.objekt = fteil_ob_dz.objekt)

und dann hilft ja auch kein Button, oder?

Kannst Du die Tabellen in SQL anschauen um zu sehen

als was

die einzelnen Spalten gespeichert werden? Dann kämen

wir schon

weiter. Ach, und welche Spalten hast Du wie versucht,

anders

zu deklarieren?

Sophie

Ich schaue nochmal morgen wie die einzelnen Variablen
deklariert wurden. Ich habe die Datenbank nur an meinem
Rechner im Büro.
Danke

Sorry, leider keine schnelle Antwort. Einziger Tip wäre, die Access-Query in MSAccess einmal als Abfrage abzuspeichern und nicht den inner-join per sql aus excel heraus aufzubauen.
Dann braucht Excel nur auf eine einzige bestehende Abfrage zuzugreifen.
Bei den ODBC-Verbindung besteht das Problem, dass nicht korrekt auf die Indizees der ODBC-Datenbanken zugegriffen werden kann und daher möglicherweise der innerjoin nicht sauber läuft. Aber es ist nur eine Vermutung.
Sorry für die späte Antwort.
Ulrich