PDA

Vollständige Version anzeigen : Access Code von Word aus ausführen


judith_21
27.06.2009, 19:49
Hallo zusammen,

ich möchte aus einem Word-Macro heraus folgenden Access-VBA-Code ausführen:
DoCmd.SetWarnings False
DoCmd.TransferText acImportHTML, "", "tblImport", "C:\Import.html", True, ""
DoCmd.SetWarnings True


Die Verbindung zur Datenbank habe ich schon programmiert, ebenso die Access-Referenz in Word hinzugefügt. Der obenstehende Code funktioniert aber nur, wenn die Datenbank tatsächlich geöffnet ist, d.h. unten in der Windows-Taskleiste zu sehen ist. Wenn ich die Datenbank nur über VBA-Code verbinde, bekomme ich bei der "TransferText"-Zeile eine Fehlermeldung wg. "Property not found".

Wie bekomme ich das hin, dass mein Code auch dann richtig ausgeführt wird, wenn ich die Datenbank nur über VBA aufrufe?

Danke & Gruß,
Nadine.

P.S.: Falls das wichtig ist, anbei noch der Code, wie ich die Verbindung zur DB herstelle:
Public ws As Workspace
Public db As dao.Database
Public dy As dao.Recordset

Function OpenDB(Database) As Boolean
'Öffnet die als String übergebene Datenbank.
On Error GoTo Fehler
Set ws = DBEngine.Workspaces(0)
If Dir(Database) = "" Then
MsgBox "Die Datenbank existiert nicht oder ist nicht erreichbar", vbInformation, "Fehler"
Exit Function
End If
Set db = OpenDatabase(Database, dbDriverNoPrompt, False)
OpenDB = True 'Datenbank ist geöffnet
Exit Function
Fehler:
Exit Function
End Function

Hotte
27.06.2009, 22:50
Hi,

... auf die Schnelle und nicht getestet ...:

Mir fällt nur auf, dass Du als Datenbankanbindung DAO benutzt .. nicht Access. Du musst also ein Access-Objekt benutzen - dann sollte es mit dem Befehl auch funktionieren. Daher geht es bei Dir wohl auch nur, wenn Access geöffnet ist.

Kannst Du nicht in Access den Code einbinden und als Funktion in Access hinterlegen, die Du dann aus Word aufrufst? Oder machst Du das so...:rolleyes:

judith_21
28.06.2009, 00:23
Hallo Hotte,

danke für die Antwort. Das mit DAO- vs. Access-Zugriff macht natürlich Sinn. Habe aber keine Lust, den Datenbankzugriff vollständig umzuprogrammieren, denn die Datenbankverbindung wird in meinem Projekt ständig verwendet...

Daher halte ich es für sinnvoller, den Code in Access als Funktion zu hinterlegen und von Word aus aufzurufen. (Bisher habe ich den Access-Code direkt in meinem Word-Makro stehen gehabt.)
Ich habe den Code (also das TransferText/SetWarnings) aber auch schon als Makro und als Modul in Access gespeichert.
Word muss Access aber bei dem Funktionsaufruf noch eine Variable übergeben können, da die zu importierende Datei im Word-Makro mittels FileOpen-Dialog ermittelt wird. Kannst du mir einen Tipp geben, wie und ob ich den Aufruf einer Funktion in einem Access-Modul von Word aus bei einer DAO-Verbindung realisieren kann?

Danke & Gruß,
Nadine

judith_21
30.06.2009, 12:34
Hi zusammen,

sorry für den Push, aber hat niemand eine Idee zu meiner Frage?

Ich bräuchte diese Woche eine Lösung, ich muss mein Projekt abschließen... wäre echt toll, wenn ihr helfen könntet.

Danke vorab und Gruß,
Nadine

judith_21
03.07.2009, 17:31
Hallo nochmal,

ich benötige keine Hilfe mehr. Ich habe das Problem selbst gelöst. Etwas umständlich zwar, aber immerhin.

Und zwar habe ich meine eigene TransferText-Funktion programmiert, die von Word aus abläuft, die entsprechenden Daten in einer txt-Datei speichert, die dann wiederum zeilenweise ausgelesen wird und die Daten in ein Array schreibt. In Access bekomme ich die Daten dann mittels INSERT INTO-Abfrage.

Gruß,
Nadine

Hotte
03.07.2009, 17:42
Hi Nadine,

Oh ... Sorry ... aber das hab ich hier ganz vergessen!!! Nicht böse sein. Aber ich hatte leider auch wenig Zeit.

Da hast Du aber mit Sicheheit die bessere Alternative gewählt...


Ein kleiner Nachtrag: Auch zum Aufrufen der Funktion in Access brauchst Du das Access-Objekt. Ohne wird das nie funktionieren. Über das Access-Objekt kannst Du dann dort Funktionen aufrufen oder auch Formulare ansprechen.

Also Sorry nochmal - hast was gut!

judith_21
04.07.2009, 10:45
Hallo Hotte,

kein Problem. Gestern habe ich nämlich festgestellt, dass selbst die Lösung des Access-Objekt-Problems mir nicht geholfen hätte, da es in den Sicherheitsrichtlininen meiner Firma nicht erlaubt ist, Programme aus dem VBA Code heraus zu starten. Daher musste es bei meiner DAO-Verbindung bleiben.

Aber ich bin jetzt glücklich mit meiner Lösung, war gar nicht so aufwendig wie gedacht.

Gruß,
Nadine