PDA

Vollständige Version anzeigen : Datenaustausch zwischen Access und Word 97!!!!


jaykay2000
25.09.2003, 15:10
Hallo zusammen!

Habe mich extra hier im Forum angemeldet weil ich ein Problem beim Datenaustausch zwischen Access 97 und Word 97 habe.

Ich habe in meiner Access Datenbank ein Formular erstellt auf dem mir Datensätze aus der Tabelle angezeigt werden. Jetzt möchte ich über einen Button das Programm Word aufrufen. Bis dahin kein Problem!

So, nun will ich aber einige Daten von meinem Access Formular in ein Word Dokument übertragen bzw. in mehrer TextBoxen schreiben.
Wie soll da von statten gehen?????

Hab mir schon Bücher ausgeliehen wie "VBA mit Office 97", die Beispiele beziehen sich aber leider nur auf Seriendrucke und treffen auf meinen Fall garnicht zu :-(

Hab schon mit folgendem VBA Code in der Prozedur für meinen Button
Click() versucht zum Test, aber das klappt auch nicht!

Selection.GoTo What:=wdGoToField , Name:="TextBox1"
Selection TypeText ("Test")

Wurde aber obwohl die TextBox1 existiert nicht genommen. Quelltext zeigt auch keine Fehler an!

Was soll ich jetzt machen und wie kann man das Problem lösen?
Wäre euch echt dankbar wenn ihr mir bei diesem Problem helfen könntet!
Vielen Dank schon mal im Vorraus!

Grüße aus Essen, Patrick!

MarioR
26.09.2003, 06:32
Hallo Patrick,

erstmal Willkommen im MSOF :)

Zum Problem - Hast Du die Word-Bibliothek eingebunden? Das ist zwar nicht zwingend notwendig, vereinfacht aber die Programmierung.
Öffne mal irgendein Formular, wechsel in die Code-Ansicht und wähle den Punkt Extras -> Verweise aus. Wenn der Eintrag "Microsoft Word 8.0 Object Library" nicht gewählt ist, dann setz bitte einen Haken rein. Damit sollte Access in Deinem Code auch Word-Konstanten erkennen (z.B. wdGoToField).

Sind die 2 Zeilen Dein kompletter Code zur Datenübergabe? Wenn nicht, dann poste doch bitte mal alles. Du kannst auch mal im Access-Forum nach dem Begriff Word suchen. Die Datenübergabe war schon mehrmals ein Thema. Die Übergabe erfolgte dabei allerdings zumeist an Textmarken (z.B. hier (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=95581)).

MarioR
30.09.2003, 06:14
Hallo Mario!

Danke für deine Hilfe, hab im Archiv und in dem Beitrag den du in deiner Antwort verlinkt hattest viele Infos über den Datenaustausch zwischen Access und Word 97 gefunden.

Hab jetzt gerade mal fließig versucht das hin zu bekommen, es klappt aber immer noch ned ganz. Schau dir mal bitte den Quelltext an, vielleicht siehst du ja die Fehler. Habe die Stellen kommentiert bei denen der Compiler
noch mekert. Die Prozedur wird überigens aufgerufen wenn man auf den Button Word clickt!
Dank dir schon mal im vorraus!

Grüße aus Essen, Patrick!


VBA-Quellcode:
-----------------------------

Private Sub Word_Click()
On Error GoTo Err_Word_Click

Dim word_obj As Object
Dim inhalt As String

Set word_obj = CreateObject("Word.Application")
word_obj.Visible = True
Rem word_obj.Documents.Add Template:="E:\Eigene_D\Meier HNR\test.doc"

Rem Bei folgender Zeile tritt beim Compilieren immer ein Fehler auf!
Rem Es wird immer gesagt "Variable nicht definiert" und markiert
Rem dabei "wdGoToField". Was stimmt daran nicht?

word_obj.Selection.Goto What:=wdGoToField, Name:="TextBox1"

Rem Meine Datenbank heißt "HNR" und das Formular von dem ich Werte an mein
Rem Word Dokument übergeben will heißt "NRW-Acces". Ist folgende Zeile korrekt
Rem geschrieben, wenn ich der Variable "inhalt" die Zeichenkette aus dem Feld "Vorname"
Rem was sich auf dem Formular befindet zuweisen will?

inhalt = NRW - Acces.Vorname
word_obj.Selection.TypeText Text:=inhalt

Set word_obj = Nothing


Exit_Word_Click:
Exit Sub

Err_Word_Click:
MsgBox Err.Description
Resume Exit_Word_Click

End Sub

Zum Fehler:
Binde die Word-Bibliothek ein (Beschreibung siehe meinen vorherigen Beitrag).

Zur Frage:
Wenn diese Prozedur im gleichen Formular läuft, auf dem sich auch "Vorname" befindet, reicht das:
inhalt = Me.Vorname
(mit Me verweist Du auf das eigene Formular)

Wenn "Vorname" auf einem anderen Formular ist, dann so:
inhalt = Forms![NRW - Acces]!Vorname
Das Formular "NRW - Acces" muss dazu geöffnet sein.

jaykay2000
30.09.2003, 10:17
Hallo zusammen!

Habe jetzt, wie Mario gesagt hat, die Word Libary eingebunden und es sah auch fast so aus als wenns geklappt hätte, nur es kam wieder eine Fehlermeldung und die lautet:

Objektvariable oder With-Blockvarialbe nicht festgelegt!!!

Nur leider weiß ich nicht worauf sich das beziehen soll, da keine Stelle im Quelltext markiert ist. Die Fehlermeldung gehört aber zu Access, die im Word Dokument angesprochene TextBox1 existiert und auf ihr steht auch beim öffnen des Dokumentes der zeiger.
Könnt ihr mir abermals weiterhelfen?
`Vielen Dank!

Grüße aus Esse, Patrick! (Der am verzweifeln ist!)

Karlheinz
30.09.2003, 10:46
Hallo Patrick,

hier (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=101733) findest du ein Beispiel.

Vielleicht hilft das weiter.

Gruß Karlheinz

jaykay2000
27.10.2003, 15:41
Hallo Karlheinz!

Vielen Dank für deine Hilfe, auch wenns schon ein wenig länger her ist.
Das mit dem Datenaustausch zwischen dem Access Formular und dem Word Dokument klappt dank deinem Verweis auf das Beispiel ohne Probleme.
Jetzt hab ich nur noch mal eine Frage:

Ich bekomme immer Fehlermeldungen wenn ein Textfeld leer ist, Fehlermeldung heißt dann "Ungültige verwendung von Null!"

Wie kann ich solch einen Fall Beispielsweise per if-Anweisung abfangen?
Es kommt nämlich häufiger vor das ein Textfeld das ich an das Word Dokument übertragen möchte nicht belegt ist.
Zum besseren Verständnis hier der Quellcode. Hab ihn ein wenig verkürzt, denn insgesammt sind bestimmt 20-30 Textfeldinhalte zu übertragen.

Vielen Dank an euch, Patrick!


Quellcode:
--------------------

Private Sub Word_Click()
On Error GoTo Err_Word_Click

Dim word_obj As Object
Dim inhalt As String
'Hier muss der Pfad des Dokumentes angegeben werden!!!
Const cstrVorlage As String = "E:\Eigene_D\Meier HNR\Aufnahmeformular.doc"

Set word_obj = New Word.Application
With word_obj
.Documents.Open cstrVorlage
.Application.Visible = True

'ID wird an das Word Dokument übergeben
.Selection.Goto What:=wdGoToBookmark, Name:="id"
inhalt = Me.ID
.Selection.TypeText Text:=inhalt

'ID wird an das Word Dokument übergeben
.Selection.Goto What:=wdGoToBookmark, Name:="idBlatt2"
inhalt = Me.ID
.Selection.TypeText Text:=inhalt

'ID wird an das Word Dokument übergeben
.Selection.Goto What:=wdGoToBookmark, Name:="idBlatt4"
inhalt = Me.ID
.Selection.TypeText Text:=inhalt

'Geschäftsstelle wird an das Word Dokument übergeben
.Selection.Goto What:=wdGoToBookmark, Name:="Geschäftsstelle"
inhalt = Me.Dienststelle
.Selection.TypeText Text:=inhalt

Set word_obj = Nothing

End With
Exit_Word_Click:
Exit Sub

Err_Word_Click:
MsgBox Err.Description
Resume Exit_Word_Click

End Sub

MarioR
27.10.2003, 20:22
Das geht mit der Funktion Nz, z.B. so:

...
inhalt = Nz(Me.ID, "")
...