[gelöst] Mit Word Textmarken arbeiten
Verfasst: 18. Mai 2016 16:05
Hi all,
da ich mich mit VBA ziemlich gut auskenne und aus Navision heraus eine Vorlage mit Textmarken so befüllen möchte, dass nichts schief gehen kann und im Forum das Thema nur 'halb' gelöst war (für Office-Nerds), habe ich hier mal das richtige Vorgehen dokumentiert:
1. Eine Word-Vorlage erstellen (.dot oder .dotx oder .dotm).
2. An die Stellen, wo Text übergeben werden soll, unbedingt einen Mustertext schreiben.
3. WICHTIG: In den Word-Optionen unter Erweitert bei Ansicht die Textmarken anzeigen lassen (Haken an).
4. Den Mustertext markieren (und wirklich nur den Text der ersetzt werden soll).
5. Im Reiter Einfügen findet man den Befehl Textmarke. Hier nun für den markierten Text die Textmarke definieren (am Besten ohne Leerzeichen und Sonderzeichen etc).
6. Man kann diesen Vorgang beliebig oft wiederholen.
7. Vorlage speichern und schließen.
Nun benötigt man in Navision folgende Variablen:
Und SO füllt man Textmarken richtig in ein neues Dokument, basierend auf einer Word-Vorlage:
Natürlich solltet ihr am Ende für die Application-Objekte dann auch noch ein CLEAR einbauen.
da ich mich mit VBA ziemlich gut auskenne und aus Navision heraus eine Vorlage mit Textmarken so befüllen möchte, dass nichts schief gehen kann und im Forum das Thema nur 'halb' gelöst war (für Office-Nerds), habe ich hier mal das richtige Vorgehen dokumentiert:
1. Eine Word-Vorlage erstellen (.dot oder .dotx oder .dotm).
2. An die Stellen, wo Text übergeben werden soll, unbedingt einen Mustertext schreiben.
3. WICHTIG: In den Word-Optionen unter Erweitert bei Ansicht die Textmarken anzeigen lassen (Haken an).
4. Den Mustertext markieren (und wirklich nur den Text der ersetzt werden soll).
5. Im Reiter Einfügen findet man den Befehl Textmarke. Hier nun für den markierten Text die Textmarke definieren (am Besten ohne Leerzeichen und Sonderzeichen etc).
6. Man kann diesen Vorgang beliebig oft wiederholen.
7. Vorlage speichern und schließen.
Nun benötigt man in Navision folgende Variablen:
- Code:
Global:
Name DataType Length
FileName Text 250
TemplateName Text 250
- Code:
Lokal(die Application-Objekte unbedingt als lokale Variablen deklarieren, damit man keine Fehlermeldungen bekommt):
Name DataType Length Subtype
WordApp Automation 'Microsoft Word 14.0 Object Library'.Application
WordDoc Automation 'Microsoft Word 14.0 Object Library'.Document
WordRange Automation 'Microsoft Word 14.0 Object Library'.Range
Textmarke Text 30
Und SO füllt man Textmarken richtig in ein neues Dokument, basierend auf einer Word-Vorlage:
- Code:
TemplateName := 'F:\EureVorlage.dotx';
IF ISCLEAR(WordApp) THEN
IF NOT CREATE(WordApp, FALSE) THEN
ERROR('Konnte keine Word-Instanz erstellen!');
IF NOT EXISTS(TemplateName) THEN
ERROR('Wordvorlage %1 existiert nicht!', TemplateName);
WordDoc := WordApp.Documents.Add(TemplateName);
Textmarke:='ErsteTM';
IF WordDoc.Bookmarks.Exists(Textmarke) THEN BEGIN // Überprüfung, ob es die Textmarke überhaupt gibt
WordRange:=WordDoc.Bookmarks.Item(Textmarke).Range;
WordRange.Text('Hier wird der erste Text übergeben'); // Word überschreibt hierbei die Textmarke
WordDoc.Bookmarks.Add(Textmarke,WordRange); // Textmarke neu erstellen
End;
Textmarke:='ZweiteTM';
IF WordDoc.Bookmarks.Exists(Textmarke) THEN BEGIN
WordRange:=WordDoc.Bookmarks.Item(Textmarke).Range;
WordRange.Text('Hier wird der zweite Text übergeben');
WordDoc.Bookmarks.Add(Textmarke,WordRange);
End;
//...usw...
FileName := STRSUBSTNO('X:\%1.docx','NeueDatei');
WordDoc.SaveAs(FileName);
WordApp.ScreenUpdating(TRUE);
WordApp.Visible := TRUE;
WordApp.Activate;
Natürlich solltet ihr am Ende für die Application-Objekte dann auch noch ein CLEAR einbauen.