Hi,
folgender code erzeugt mir einen Serienbrief:
Delphi-Quellcode:
Procedure MachEinSerienBrief(Titel:TRichEdit; DBQuelle:
String; DBFelder:TStringlist; VertAbstand: Integer; HorAbstand: Integer);
var
Word: OLEVariant;
i:integer;
SHorAbstand:
String;
begin
try
Word:=GetActiveOleObject('
Word.Application');
except
try
Word:=CreateOleObject('
Word.Application');
except
ShowMessage('
Microsoft Word kann nicht starten.');
screen.cursor:=crDefault;
exit;
end;
end;
Word.ActiveDocument.MailMerge.MainDocumentType:= wdFormLetters;
titel.SelectAll;
titel.CopyToClipboard;
Word.Selection.paste;
//word.ActiveDocument.MailMerge.OpenDataSource(DBQuelle,'SELECT * FROM [" '+ DBQuelle +' "]"'); DBQuelle ist ja der Pfad zur Access Datenbank, da kann ich ja kein Select machen
Word.ActiveDocument.MailMerge.EditMainDocument;
for i:=0
to VertAbstand
do
begin
Word.Selection.TypeParagraph;
end;
SHorAbstand:='
';
for i:=0
to HorAbstand
do
begin
SHorAbstand:=SHorAbstand+'
';
end;
for i:=0
to DBFelder.Count-1
do
begin
Word.Selection.TypeText(SHorAbstand);
Word.ActiveDocument.MailMerge.Fields.Add(Word.Selection.Range,DBFelder.Strings[i]);
Word.Selection.TypeParagraph;
end;
Word := Unassigned;
end;
Funktioniert auch ganz gut, nur was mich stört ist, dass in Word ein fenster aufpoppt, wo ALLE Tabellen meiner Datenbank angezeigt werden und ich somit meine Tabelle auswählen muss, welche als Datenquelle genutzt werden soll.
Mit folgendem Code habe ich es auch schon versucht allerdings erscheint immer wieder das Fenster:
word.ActiveDocument.MailMerge.OpenDataSource(DBQuelle,'SELECT * FROM Profil');
Wird die Tabelle an einer falschen Position übergeben oder warum nimmt er den Select Befehl nicht an?
Ich möchte später auch einmal einen Serienbrief erstellen, der mit einem größeren Select abgefragt wird, weil ich manchmal nur bestimmte Datensätze als Serienbrief drucken möchte.
Jemand eine Idee
Grüße