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
Wegen der UNION-Sache: da sich die Abfragen variabel aus allen Tabellenblättern zusammensetzen (z.B. zeig mir alle Datensätze von Jan bis Dez wo der Auftraggeber "Kunz" heißt) oder (zeig mir alle Datensätze von Jan bis Dez wo der Auftraggeber "Kunz" heißt und noch keine Rechnungsnummer vergeben ist) usw...
Da kann ich wohl nur dies verwenden (UNION ALL). Da werd ich dann wohl mit leben müssen hm?
Tja - das ist eine "Krankheit" unter Excelianern, erstens für jeden Monat ein Tabellenblat aufzumachen und dann zweitens diese Struktur mit Mitteln einer relationalen DB wie Access oder Oracle oder... abfragen zu wollen ;))
In einer DB lägen alle diese Daten in *einer* Tabelle - aber das weisst du ja, da du ja den UNION nutzt, um die Daten zusammenzuführen.
Mein Vorschlag ist daher, auf die Office-Automation zurückzugreifen und über VBA Excel direkt zu öffnen und einen Export der fraglichen Daten anzustoßen (am besten in eine einzige Arbeitsmappe schreiben lassen), anschliessend die Daten automatisiert nach Access importieren.
Andere Idee:
Ersetze doch mal die UNION-Abfrage (ein UNION über 12 Tabellen *kann* nicht performant sein)
durch 12 Anfügeabfragen, die du per VBA nacheinander aufrufst - und die die Daten in *eine* Accesstabelle laden, in der auch der jeweilige Auftragsmonat mitgeführt wird.
Da kann ich wohl nur dies verwenden (UNION ALL). Da werd ich dann wohl mit leben müssen hm?
Tja - das ist eine "Krankheit" unter Excelianern, erstens für jeden Monat ein Tabellenblat aufzumachen und dann zweitens diese Struktur mit Mitteln einer relationalen DB wie Access oder Oracle oder... abfragen zu wollen ;))
In einer DB lägen alle diese Daten in *einer* Tabelle - aber das weisst du ja, da du ja den UNION nutzt, um die Daten zusammenzuführen.
Mein Vorschlag ist daher, auf die Office-Automation zurückzugreifen und über VBA Excel direkt zu öffnen und einen Export der fraglichen Daten anzustoßen (am besten in eine einzige Arbeitsmappe schreiben lassen), anschliessend die Daten automatisiert nach Access importieren.
Andere Idee:
Ersetze doch mal die UNION-Abfrage (ein UNION über 12 Tabellen *kann* nicht performant sein)
durch 12 Anfügeabfragen, die du per VBA nacheinander aufrufst - und die die Daten in *eine* Accesstabelle laden, in der auch der jeweilige Auftragsmonat mitgeführt wird.