2009-05-21 8 views
3

Obwohl ich VBA-Projekte in einer einzigen Anwendung für MS Access 2007 und Excel 2007 durchgeführt habe, habe ich nicht mehrere Anwendungen gleichzeitig automatisiert. Das generalisierte Projekt besteht darin, den Zugriff zu öffnen und einige Aktualisierungsabfragen auszuführen, die Daten an verschiedene Tabellen anhängen. Dann muss Excel die Daten bekommen. Einige Formatierungsänderungen sind in Excel erforderlich, z. B. Gruppierungen, die den Datumsbereich nicht automatisch ändern. Schließlich plane ich es so aufzubauen, dass die Excel-Datei automatisch per E-Mail versendet wird.Wie kann VBA zur Automatisierung mehrerer Office-Anwendungen verwendet werden?

Einige Teile davon sind klar, wie es zu erreichen, wie Excel wird die Daten von ODBC von Access bekommen. Aber wo soll der Master VBA wohnen? Ich könnte eine Schaltfläche in Access haben, die Access VBA starten würde, aber ist es eine gute Übung, die Access VBA starten, Excel zu manipulieren? Macht das das Debuggen schwierig?

Antwort

3

Um von Access aus zu starten, fügen Sie einen Verweis auf die Excel-Objektbibliothek hinzu. Verwenden Sie dann den Objektbrowser, um sich mit der Excel-Objekthierarchie aus Access vertraut zu machen. Es wird ein gewisser Unterschied sein, da das Objekt der obersten Ebene im Excel-Code implizit ist (wie es in Access der Fall ist) und beim Zugriff in Access explizit referenziert werden muss.

Das Access Developers Handbook enthält hervorragende Kapitel zur Automatisierung des restlichen Office von Access.

Zuletzt ist es am besten, wenn Sie den Verweis auf die Automationsbibliothek der anderen Anwendung programmiert haben, um die Programmierung zu vereinfachen. Sie möchten zur späten Bindung wechseln, damit Sie die Referenz entfernen können. Dies bedeutet, dass Sie keine der spezifischen Datentypen der externen Bibliothek verwenden (Sie verwenden meist einfache Objektvariablen) und keine der in der externen Bibliothek definierten Konstanten verwenden. Mein Produktionscode mit späte Bindung enthält normalerweise die frühe verbindliche Version, die auskommentiert wird, neben der späten verbindlichen Version.

+0

Danke, David. Ich finde bei Amazon kein Buch mit genau diesem Titel; Kannst du mir einen Zeiger geben? Ich schätze es. – Knox

+0

Besuchen Sie http://www.mcwtech.com/Books.aspx Ja, die letzte Version ist für Access 2002, aber es ist immer noch sehr relevant. –

-1

Ich habe VBA seit Jahren nicht gemacht, obwohl Access mein Einstieg in die Welt der Programmierung war. Der Umstieg von Access 97 auf Visual Basic war einfach und ich erinnere mich, dass ich mit Access viel mehr Zeug wie eine VB-Form für viele Arten von Aufgaben geschrieben habe (nicht unbedingt Datenbank-Zeug).

Dies ist der Grund, warum ich Sie denken, sollte für den Zugriff bleiben und von dort mit Hilfe von VBA, tun Sie Ihre Sachen in Excel etc ..

Viel Glück

1

denke ich, die Keywords, die Sie suchen sind für ist "Microsoft Office-Automatisierung".

Erstellen Sie eine Anwendung in Ihrer bevorzugten Programmiersprache, die COM-Schnittstellen unterstützt, und verwenden Sie dann die Automatisierung, um die Manipulationen in den verschiedenen Office-Anwendungen durchzuführen.

Suchen Sie hier c# How to access an excel cell? und hier How to read data of an excel file using c# ? und Google.

1

Ich habe vor kurzem etwas ganz ähnliches getan, und habe festgestellt, dass ich HTML mit integriertem CSS für die Formatierung ausgeben kann, die ziemlich gut in Excel lädt. Ich nutzte Access, um Benutzern zu ermöglichen, ihre erforderliche Ausgabe zu erstellen, und öffnete nur Excel, um die Ergebnisse anzuzeigen. Sie können feststellen, dass HTML-Ausgabe für schönere E-Mails sorgt.

1

Tun Sie die ganze Arbeit in Access VBA.Auch die folgenden URLs für einige Beispielcode

Modules: Sample Excel Automation

Modules: Transferring Records to Excel with Automation

Beachten Sie auch, dass, wenn Sie mit mehreren Versionen von Excel zu tun späte Bindung zu einer Notwendigkeit. Späte Bindung bedeutet, dass Sie die Referenz sicher entfernen können und nur einen Fehler haben, wenn die App Codezeilen ausführt. Anstatt beim Starten der App Fehler zu machen und die Nutzer überhaupt nicht in der App zuzulassen. Oder wenn Sie einen Mid-, Links- oder Trim-Funktionsaufruf ausführen.

Dies ist auch sehr nützlich, wenn Sie nicht wissen, Version der externen Anwendung wird auf dem Zielsystem befinden. Oder wenn Ihre Organisation gerade dabei ist, von einer Version in eine andere zu wechseln.

Weitere Informationen, einschließlich zusätzlicher Texte und einiger detaillierter Links, finden Sie auf der Seite Late Binding in Microsoft Access.

Soweit E-Mailing geht es eine Reihe von Optionen an den Microsoft Access Email FAQ

+0

Sehr informativ. Vielen Dank. – Knox

1

ist, können Sie den Code in Access setzen, oder Excel. Meiner Erfahrung nach ist das einfacher zu bearbeiten als den Code zwischen den beiden aufzuteilen (was auch funktioniert).

Wenn Sie feststellen, dass der Automatisierungscode zu langsam ausgeführt wird, können Sie den Code aufteilen, sodass Access von Funktionen in Access und Excel von Funktionen in Excel ausgeführt wird und der Mastercode nur Routinen in beiden ausführt. In diesem Fall können Sie den Master-Code überall dort platzieren, wo Sie die beste Benutzeroberfläche zum Starten von Dingen haben. Ich habe C, Access, Word und Excel verwendet, und wo Sie den Startknopf setzen, spielt eine ganze Menge keine Rolle, wenn der Code irgendwo anders ist.

Wenn Ihre Benutzer oder Betreuer mit einer Anwendung vertrauter sind, möchten Sie vielleicht Ihren Haupt- oder Hauptcode dort eingeben, aber öfter finde ich es besser, den Haupt- oder Hauptcode mit den Eingeweiden der Anwendung zu verbinden, damit ich bei dem anderen Partner überhaupt keinen Code haben kann.

Aus der kurzen Beschreibung klingt es wie mehr Arbeit wird in Excel getan werden, so würde ich den ganzen Code dort setzen.

Das Ziehen der Daten aus Access benötigt nicht einmal ein Access Application-Objekt - ein DAO- oder ADO- oder ODBC-Objekt wird funktionieren (oder sogar DDE), was viel schneller, viel robuster, viel einfacher, viel besser ist als beide Anwendungen zu öffnen und voneinander zu automatisieren.

Wenn Sie von Access starten, klingt es wie dieses Projekt ein Excel-Automatisierungsobjekt erfordern wird. Das funktioniert jetzt gut, aber es ist immer noch viel langsamer und zerbrechlicher, wenn man es nur mit Excel und einem DAO-Objekt macht.

Verwandte Themen