Hallo zusammen
Hoffe, ich bin richtig in dieser Sektion. Für meine DB habe ich bereits Tabellen- und Abfragedaten, die ich als CSV exportiere und in diversen Word Vorlagen verwende. Das klappt gut mit Datensätzen für Serienbriefe, wo sich alles "auf einer Zeile" exportieren lässt.
Wie macht man das aber am besten, wenn man z.B. ein Dokument mit Bestellpositionen füllen möchte, also mit variablen Inhalten, 1:n Daten etc. Ich bin mir nicht sicher, ob ich das seitens Access anfangen müsste, oder in Word die Daten aus Access abrufen sollte. Das einiges an VBA vonnöten ist für so ein Vorhaben bin ich mir bewusst, ich bräuchte auch noch keine Codebeispiele.
Um lediglich ein paar Ideen oder Anregungen wäre ich aber froh, den ich bin ja sicher nicht der Erste, der auf so eine Idee kommt...vielleicht gibt es ja bereits bestehende Beispiellösungen etc. für so ein Vorhaben.
Beste Grüsse
Micharius
Hi Micharius,
Detaildaten dürfte man in der geschilderten Konstellation wohl in Word-Tabellen ausgeben, und das Prozedere mittels Automation aus Word oder aus Access anleiern. Die alte Word FAQ (https://web.archive.org/web/20070617130307/http://mypage.bluewin.ch:80/reprobst/FrmSet.htm?Inhalt) von René Probst, die leider nur noch auf archive.org zu finden ist, bietet dafür einiges an Unterstützung.
Hallo Micharius,
von André Minhorst gibt es ein Buch namens "ACCESS und OFFICE".
Vielleicht kann Dir das weiterhelfen.
Gruß
Hubert
Hallo,
Zitatwenn man z.B. ein Dokument mit Bestellpositionen füllen möchte, also mit variablen Inhalten, 1:n Daten etc.
solche Anforderungen verleiten mich immer zu der Frage:
Warum wird hier nicht einfach ein Access Bericht verwendet ?
Was kann da Word besser als ein Bericht ?
Ich habe die Erfahrung gemacht, dass die vielfältigen Möglichkeiten der Gestaltung eines Berichts oftmals völlig unterschätzt werden.
Die beste Schnittstelle ist immer noch die, die man nicht braucht.
OT: Ich warte schon sehnlich auf das Buch Access im Kinderzimmer vom gleichen Autor. ;D
Wenn man den Inhalt der n-Tabelle per SQLListe & Co. zu einem Gesamtstring zusammenfasst und die Daten es hergeben, dass eine Spaltentrennung bspw. durch vbTab etwas ausreichend Übersichtliches ergibt, kann man bei der Serienbrieffunktionalität bleiben.
Der Umgang mit Wordvorlagen und -tabellen würde hier geübt:
Wordtabelle aus Access füllen (http://www.ms-office-forum.net/forum/showthread.php?t=221556)
Hallo Klaus
Zitat von: MzKlMu am März 23, 2018, 09:37:17
Warum wird hier nicht einfach ein Access Bericht verwendet ?
Was kann da Word besser als ein Bericht ?
Was mir sofort dazu einfällt:
1. Das Worddokument kann im Nachhinein noch bearbeitet werden.
2. Bereits das Ausfüllen eines Briefkopfes (Empfänger, Absender, diverse Zeichen und Nummern) macht es sinnvoll von Access aus ein Worddokument zu generieren.
3. Anders als der Accessbericht erlaubt die Wordvorlage bzw. das Worddokument auch eine Formatierung außerhalb der Accessentwicklungsumgebung.
4. Eine Dokumentation z.B. der genutzten Textmarken erlaubt den Benutzerinnen völlig unabhängig von Access eigene Wordvorlagen zu entwerfen.
Frithjof
Hallo Frithjiof,
ich bestreite ja gar nicht, dass es sinnvoll sein könnte.
Ich frage ja nur mal nach.
Schon so oft kam in diesem Zusammenhang die Rückfrage:
ZitatAch ein Bericht könnte das auch ?
Berichte kenne ich nicht, habe ich noch nie gemacht.
Daher der Hinweis bzw. Rückfrage.
Hallo Micharius.
Also dieses Beispiel geht davon aus, dass ein Wordobjekt bereits erfolgreich geöffnet und ein Dokument geladen wurde.
Die Vorlage des Dokumentes enthält u.a. eine Tabelle mit 2 Zeilen. Die Kopfzeile ist ausgefüllt und in der ersten Leerzeile der Tabelle befindet sich die Textmarke "vrt".
(Eine Alternative zu Textmarken wäre ein eigenes Kürzelsystem.)
Der SQL-String den ich öffne enthält alle Verträge eines Kunden (AdrNr). Diese werden in der Tabelle gelistet.
(Im Anhang das Ergebnis - nur erste Tabelle)
Sub machVertrage(lAdrNr as long)
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim i As Integer
Dim strSQL As String
Dim sumBeitrag As Double
Dim sInfo As String
Dim dbetrag As Double
On Error GoTo suberr
wobjekt.ActiveDocument.Bookmarks("vrt").Select
sumBeitrag = 0
strSQL = " SELECT dbo_MgVert.VertragNr, dbo_MgVert.Art, dbo_MgVert.ArtName, dbo_MgVert.Sollstellung, " _
& " dbo_MgVert.Betrag, dbo_MgVert.VertragBegin, dbo_MgVert.VertragEnde " _
& " FROM dbo_MgVert where dbo_MgVert.AdrNr = " & lAdrNr & " ORDER BY dbo_MgVert.VertragBegin, dbo_MgVert.VertragEnde desc;"
i = 2
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset(strSQL)
If rst.EOF = False Then
rst.MoveFirst
Do While rst.EOF = False
dbetrag = Val(rst!Betrag)
Call machzeilen(wobjekt, i)
wobjekt.Selection.Tables(1).Cell(i, 1).Select
wobjekt.Selection.TypeText Text:=Nz(rst!Vertragnr, "")
wobjekt.Selection.Tables(1).Cell(i, 2).Select
wobjekt.Selection.TypeText Text:=rst!art
wobjekt.Selection.Tables(1).Cell(i, 3).Select
wobjekt.Selection.TypeText Text:=rst!Artname
wobjekt.Selection.Tables(1).Cell(i, 4).Select
wobjekt.Selection.TypeText Text:=rst!sollstellung
wobjekt.Selection.Tables(1).Cell(i, 5).Select
wobjekt.Selection.TypeText Text:=Format(dbetrag, "standard")
wobjekt.Selection.Tables(1).Cell(i, 6).Select
wobjekt.Selection.TypeText Text:=rst!vertragbegin
wobjekt.Selection.Tables(1).Cell(i, 7).Select
wobjekt.Selection.TypeText Text:=Nz(rst!vertragende, "")
i = i + 1
rst.MoveNext
Loop
End If
rst.Close
dbs.Close
Exit Sub
suberr:
MsgBox Err.Description
Err.Clear
End Sub
Function machzeilen(ww As Object, i As Integer) ' hier wird eine neue Tabellenzeile angelegt
On Error GoTo funcerr
Do While i > ww.Selection.Tables(1).Rows.Count
ww.Selection.Tables(1).Rows.Add
ww.Selection.Tables(1).Rows(ww.Selection.Tables(1).Rows.Count).Select
ww.Selection.SelectRow
ww.Selection.Font.Size = 9
With ww.Selection.Cells
'.Borders(wdBorderLeft).LineStyle = wdLineStyleNone
'.Borders(wdBorderRight).LineStyle = wdLineStyleNone
.Borders(wdBorderTop).LineStyle = wdLineStyleNone
.Borders(wdBorderBottom).LineStyle = wdLineStyleNone
'.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone
'.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone
.Borders.Shadow = False
End With
Loop
Exit Function
funcerr:
MsgBox Err.Description
Err.Clear
End Function
Hallo zusammen
Vielen Dank für die vielen Antworten und Vorschläge!
@MzKlMu
ZitatWarum wird hier nicht einfach ein Access Bericht verwendet ?
Ich habe einige Vorlagen, die womöglich so befüllt werden könnten - auf jeden Fall ein guter Tipp. Für die anderen mit komplexeren Inhalten müsste es Word sein, da zwingend eine Nachbearbeitung nötig wird.
Den Link von ebs17 zum ms-office-forum habe ich angeschaut und die Beispiel DB mal heruntergeladen. Das sieht schon mal vielversprechend aus!
Lieber Gruss an alle & guten Wochenstart,
Micharius