Discussion:
Dokument-Inhalt in anderes Dokument kopieren per VBA
(zu alt für eine Antwort)
Herr Mann
2014-08-03 19:45:46 UTC
Permalink
Hallo, erneut bitte ich um kundige Hilfe.
Ich habe ein Zeugnis-Formular als Word-Dokument vorliegen, ich fülle aus der Datenbank für jeden Datensatz die Werte ein und kopiere den Inhalt der gesamten Datei inklusive Formatierung in ein neues, leeres Dokument. Sozusagen Serien-Druck selbst gemacht.
Das klappt mit einem Zeugnis-Formluar DIN-A4, einspaltig und dem Befehl:

AusdrucksDoc.Range(AusdrucksDoc.Range.End_ - 1, AusdrucksDoc.Range.End_).FormattedText = FormularDoc.Range.FormattedText

sehr gut.

Nun habe ich aber ein weiteres Zeugnis-Formular als Word-Dokument mit 2 Seiten (für doppelseitigen Druck), DIN-A3, zweispaltig.

mit
AusdrucksDoc.PageSetup.PageWidth = FormularDoc.PageSetup.PageWidth
AusdrucksDoc.PageSetup.PageHeight = FormularDoc.PageSetup.PageHeight
AusdrucksDoc.PageSetup.Orientation = FormularDoc.PageSetup.Orientation
AusdrucksDoc.PageSetup.TopMargin = FormularDoc.PageSetup.TopMargin
AusdrucksDoc.PageSetup.LeftMargin = FormularDoc.PageSetup.LeftMargin
AusdrucksDoc.PageSetup.RightMargin = FormularDoc.PageSetup.RightMargin
AusdrucksDoc.PageSetup.BottomMargin = FormularDoc.PageSetup.BottomMargin

bekomme ich in AusdrucksDoc eine DIN-A3 Seite im Querformat. Jedoch werden die beiden TextSpalten von FormularDoc nicht nebeneinander auf die Seite gesetzt, sondern für jede TextSpalte wird eine neue Seite aufgemacht. Text-Zeilen, die in FormularDoc innerhalb einer TextSpalte umgebrochen werden, werden in AusdrucksDoc über die gesamte Seitenbreite geschrieben.

Frage: Welche weiteren Parameter von PageSetUp muss ich noch an AusdrucksDoc übergeben, um beide TextSpalten nebeneinander auf die Seit zu kopieren?
Oder geht es vielleicht noch einfacher?

besten Gruß, Christian Hahn.
Bernhard Sander
2014-08-04 08:35:29 UTC
Permalink
Hallo Christian,
Post by Herr Mann
AusdrucksDoc.Range(AusdrucksDoc.Range.End_ - 1, AusdrucksDoc.Range.End_).FormattedText = FormularDoc.Range.FormattedText
Probiers mal mit dieser Ergänzung:
(Die linke Seite soll über FormularDocLinkeSeite und die rechte Seite über FormularDocRechteSeite ansprechbar sein!)

AusdrucksDoc.Range(AusdrucksDoc.Range.End - 1, AusdrucksDoc.Range.End_).FormattedText = FormularDocLinkeSeite.Range.FormattedText

AusdrucksDoc.Range(AusdrucksDoc.Range.End - 1, AusdrucksDoc.Range.End).InsertBreak type:=wdColumnBreak

AusdrucksDoc.Range(AusdrucksDoc.Range.End - 1, AusdrucksDoc.Range.End).FormattedText = FormularDocRechteSeite.Range.FormattedText



NB: ich habe die Unterstriche nach .End gelöscht. .End_ ist nichts, was in Word eingebaut wäre.

Gruß
Bernhard Sander
Herr Mann
2014-08-05 12:21:45 UTC
Permalink
Post by Bernhard Sander
Hallo Christian,
Post by Herr Mann
AusdrucksDoc.Range(AusdrucksDoc.Range.End_ - 1, AusdrucksDoc.Range.End_).FormattedText = FormularDoc.Range.FormattedText
(Die linke Seite soll �ber FormularDocLinkeSeite und die rechte Seite �ber FormularDocRechteSeite ansprechbar sein!)
AusdrucksDoc.Range(AusdrucksDoc.Range.End - 1, AusdrucksDoc.Range.End_).FormattedText = FormularDocLinkeSeite.Range.FormattedText
AusdrucksDoc.Range(AusdrucksDoc.Range.End - 1, AusdrucksDoc.Range.End).InsertBreak type:=wdColumnBreak
AusdrucksDoc.Range(AusdrucksDoc.Range.End - 1, AusdrucksDoc.Range.End).FormattedText = FormularDocRechteSeite.Range.FormattedText
NB: ich habe die Unterstriche nach .End gel�scht. .End_ ist nichts, was in Word eingebaut w�re.
Gru�
Bernhard Sander
Lieber Berhard Sander, besten Dank für deine Hinweise.
Ich musste jedoch erst einmal viel herumprobieren, bevor es geklappt hat.
Die Unterstriche bei .End_ brauche ich, weil ich das Makro aus meiner Entwicklungsumgebung RealStudio heraus starte. Von dort aus habe ich vollen Zugriff auf VBA, wenn ich einige Konventionen beachte. So muss nach End der Unterstrich gesetzt werden, damit es nicht mit dem systemeigenen End verwechselt wird.
Zu den Konventionen gehört auch, dass ich keine benannten Variablen und eben auch Formulierungen wie wdColumnBreak nicht verwenden kann, sondern die entspr. Konstante einsetzen muss. Aber das musste ich erst einmal rauskriegen.
Für die Hinzufügung einer TextSpalte habe ich dann selbst etwas herumgesucht und bin auf folgende Lösung gekommen, die ebenso gut funktioniert:

AusdrucksDoc.PageSetup.TextColumns.Add

Dennoch war deine Anregung wertvoll, weil ich am Ende jeder Dokument-Kopie in AusdrucksDoc einen Seitenumbruch brauche (FormularDoc füllt am Ende nicht die gesamte physische Seite aus). So habe ich die entsprechende Formulierung gefunden:

AusdrucksDoc.Range(AusdrucksDoc.Range.End_ - 1, AusdrucksDoc.Range.End_).InsertBreak 7

Ja, so lernt man Stückchen für Stückchen dazu.
Besten Dank für die Hilfe dabei und besten Gruß, Christian Hahn.
Loading...