Hallo VBA-Gurus & co. :-)
Ich bin kein besonders mächtiger VBA-Experte aber einige Ahnung hab ich schon.
Dennoch hab hab ich ein kleines aber lästiges Problem mit verknüpften Excel 2007 Tabellen in Access 2007 und ich hab keinen Ansatz wo ich was drehen kann. Das sieht folgendermaßen aus:
Mit der Auswahlabfrage "SELECT * FROM [excel 12.0;imex=0;DATABASE=" & strDISPO & "].[Januar$] UNION ALL ..." erstelle ich eine Verknüpfung zu einer in der Variablen "strDISPO" enthaltenen Excel-Datei bzw. den 12 Sheets in der Datei. Das klappt einwandfrei. Alle Datensätze aus allen Excelsheets in einer Abfrage.
Weiterhin habe ich Listefelder auf Formualren mit denen ich Werte aus dieser Abfrage weiter Filtere mit neuen Abfragen die dann die WHERE Klausel enthalten. Mal mehr mal weniger Kriterien.
Sachen wie "Dim blabla as Excel.Worksheet" und dazugehörige Dinge kann ich nicht verwenden da ich Daten auch aus Access raus, in Excel rein ändern muss/können sollte und das wohl bei 2007 so einfach nicht mehr geht. Aber mit den Abfragen schon. Geht auch bis auf folgendes nerv-Problem.
Jetzt Kommts:
Ist die Exceldatei geschlossen (Excel selbst oder eine andere Datei kann ruhig geöffnet sein) geht alles recht flott und annehmbar, aber ist DIE Datei geöffnet die ich mit den Abfragen verlinke kotzt sich Access bei den Abfragen einer ab. Es dauert ewig bis sie ausgeführt werden. Manche schneller manche ewig, aber alle braucht um einiges länger. Die längste war bei 45 Sekunden, die bei geschlossener Exceldatei nur ca. 3 Sekunden brauch. Wäre Klasse wenn jemand nen Tip hätte was zur Hölle da stört, bzw warum bei geschlossener Exceldatei alle flutscht und sobald sie offen ist das so extrem bremst. Ich dreh bald am Rad *g*. Evtl kennt ja jemand das Problem
Vielen Dank schon mal
Greetz
Kai
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
Mit der Auswahlabfrage "SELECT * FROM [excel 12.0;imex=0;DATABASE=" & strDISPO & "].[Januar$] UNION ALL ..." erstelle ich eine Verknüpfung zu einer in der Variablen "strDISPO" enthaltenen Excel-Datei bzw. den 12 Sheets in der Datei.
Nein. du erstellst damit keine Verknüpfung, sondern fragst die Daten direkt ab. Noch dazu nutzt du "SELECT * FROM" was *immer* zeitintensiver ist, als wenn du nach dem SELECT alle Tabellenfelder aufführen würdest (bei "*" muss sich Access die Felder selber suchen, gibst du sie an, kann es direkt zugreifen).
Dazu kommt dann noch das von ChrE gesagte, sowie die Tatsache, dass UNION Abfragen erstens meist recht langsam sind (umso langsamer, je mehr Tabellen miteinander verknüpft sind und je mehr Daten diese Tabellen enthalten - denn Access muss hier einen Full Table Scan über alle 12 Tabellen machen.)
Ich würde hier anders vorgehen; es gibt 2 Möglichkeiten:
1. die Tabellen in die Access-DB verlinken (im DB-Fenster erscheinen die dann wie verlinkte Tabellen aus einem Backend; also mit -> vor dem Tabellennamen).
Dazu musst du wahrscheinlich die 12 Worksheets einzeln verlinken - aber das musst du auch nur einmal machen.
2. über Office-Automation Excel aus Access heraus ansprechen und die 12 Tabellen eportieren, anschliessend in je eine Access-Tabelle importieren - und erst über diese Tabellen den UNION machen.
Volker
Nein. du erstellst damit keine Verknüpfung, sondern fragst die Daten direkt ab. Noch dazu nutzt du "SELECT * FROM" was *immer* zeitintensiver ist, als wenn du nach dem SELECT alle Tabellenfelder aufführen würdest (bei "*" muss sich Access die Felder selber suchen, gibst du sie an, kann es direkt zugreifen).
Dazu kommt dann noch das von ChrE gesagte, sowie die Tatsache, dass UNION Abfragen erstens meist recht langsam sind (umso langsamer, je mehr Tabellen miteinander verknüpft sind und je mehr Daten diese Tabellen enthalten - denn Access muss hier einen Full Table Scan über alle 12 Tabellen machen.)
Ich würde hier anders vorgehen; es gibt 2 Möglichkeiten:
1. die Tabellen in die Access-DB verlinken (im DB-Fenster erscheinen die dann wie verlinkte Tabellen aus einem Backend; also mit -> vor dem Tabellennamen).
Dazu musst du wahrscheinlich die 12 Worksheets einzeln verlinken - aber das musst du auch nur einmal machen.
2. über Office-Automation Excel aus Access heraus ansprechen und die 12 Tabellen eportieren, anschliessend in je eine Access-Tabelle importieren - und erst über diese Tabellen den UNION machen.
Volker