PDA

Vollständige Version anzeigen : Daten aus Access an Word Serienbrief übergeben


jonsonjo
11.07.2001, 12:44
Hallo,

ich habe mal wieder ein kleines Probelm bei dem ich gar nicht weiterkomme!

Ich habe ein Word-Serienbrief erstellt. Die Datenquelle ist eine AccessDB-Abfrage.
Z.Z. mache ich die Anbindung noch "zu Fuß", d.h. ich öffne den Brief, suche mir über "Abfrage Optionen" den richtigen DS aus und speichere danach das Dokument unter einem bestimmten Namen...

Nun soll aber einiges an der DB geändert werden (alles mögliche soll automatisiert werden...).

Aus dem Formular (in dem die Daten für den Serienbrief angezeigt werden), sollen nun auf "Knopfdruck" die entsprechenden Serienbrief-Felder gefüllt werden und die neu entstandene Datei unter einem bestimmten Namen gespeichert werden.

Kann mir jemand einen Tip geben wie ich das realisieren kann? Danke!

Gruß jonsonjo

BodoM
11.07.2001, 14:31
Hallo jonsonjo,

es gibt fast immer mehrere Möglichkeiten. Du kannst z. B. mit CreateQueryDef den Datensatz oder die Datensätze in einer Abfrage speichern und den Serienbrief fest mit der Abfrage verbinden.

Wenn ich Dich richtig verstanden habe,möchtest Du lediglich einen Datensatz an Word übergeben. In diesem Fall benötigst Du keinen Serienbrief. Eine ähnliche Aufgabe habe ich ohne Serienbrief gelöst. Ich habe eine Dokumentvorlage (Vorlage .dot !!) erstellt und an den entsprechenden Stellen in der Vorlage Textmarken eingefügt.füge in die Dokumentvorlage an den entsprechenden Stellen Textmarken eingefügt.
In der DB muss zunächst folgende Prozedur aufgerufen werden; am besten beim Öffnen der DB

Private Sub WordObjektbibliothek()
On Error GoTo Fehler
Dim ref As Reference
Set ref = References.AddFromFile(SysCmd(acSysCmdAccessDir) & "MSWord8.olb")
Exit Sub
Fehler:
Select Case Err
Case 32813
Resume Next
Case 48
MsgBox "Word Objekt-Bibliothek konnte nicht gefunden werden." & vbCrLf & _
"Word kann ohne Verweis auf die Objekt-Bibliothek nicht gesteuert werden.", vbCritical + vbOKOnly, "Word Objekt-Bibliothek"
Case Else
MsgBox Err.Description
End Select
End Sub

In der Datenbank bzw. im Klassenmodul Deines Formulars kannst Du folgende Befehle verwenden:

1.Im Deklarationsbereich des Klassenmoduls:
Private objWord As New Word.Application, objDokument As Word.Document

2. Teil einer Prozedur:
If Not WordGeladen() Then
Set objWord = New Word.Application
Else
Set objWord = GetObject(, "Word.Application")
End If
Set objDokument = objWord.Documents.Add("Vorlagenname")
Call DatenEinfügen("Nachname", "Meier") ' Textmarkenname und Wert
Call DatenEinfügen...
objWord.PrintOut
' alternativ
'objWord.Visible = True
'objWord.WindowState = wdWindowStateMaximize
'objWord.Activate

Private Sub DatenEinfügen(strTextmarke As String, varDaten As Variant)
On Error GoTo Fehler
If Trim$(strTextmarke) <> "" Then
If objDokument.Bookmarks.Exists(strTextmarke) Then objDoku-ment.Bookmarks.Item(strTextmarke).Range.Text = varDaten
End If
Exit Sub
Fehler:
If Err.Number = 94 Then Exit Sub
MsgBox Err.Description
End Sub
Function WordGeladen() As Boolean
WordGeladen = True
If FindWindow("OpusApp", 0&) = 0 Then
WordGeladen = False
End If
End Function

Viel Glück!

jonsonjo
12.07.2001, 09:50
Hallo BodoM,

danke für die Infos. Ich werde das mal versuchen.

In der Zwischenzeit habe ich folgende Funktion aufgebaut:

Public Function fktWdSerienBrief(strMyFileName As String, strMyCondition As String, strMyNewFileName As String)
'Daten aus Formular in einem Word-Serienbrief übertragen und Brief speichern
'strMyCondition ist eine SQL Select-Abfrage!


Dim oApp As Word.Application
Set oApp = CreateObject("Word.Application")


'Vorlage öffnen
Documents.Open FileName:=strMyFileName, ConfirmConversions:=False, _
ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto

ActiveDocument.MailMerge.DataSource.QueryString = strMyCondition

'Daten an Serienbrief übergeben
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute
End With

'Neues Dokument speichern
ActiveDocument.SaveAs FileName:=strMyNewFileName, FileFormat:=wdFormatDocument, _
LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword _
:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False
ActiveDocument.Close
ActiveDocument.Close
MsgBox "Datei gespeichert"
Set oApp = Nothing

End Function

Mit dieser Funktion geht auch alles prima, ich kann die Daten an den richtigen Stellen im Dokument einfügen, die Datei wird autom. gespeichert und ich muß nicht mal Word öffnen ...

LEIDER dauert das Ganze ca. 1-2 Minuten!!!
Hast Du vielleicht eine Ahnung wie ich das schneller machen kann?

Gruß jonsonjo