Ich schreibe mit folgendem Code (der in Access 2010 steht) Text vom Textfeld aus Access in ein Textformularfeld in Word (2010)
If oApp.ActiveDocument.Bookmarks.Exists("Datum") Then
oApp.ActiveDocument.FormFields("Datum").Result = Me!txtDatum
End If
Weiters habe ich im Worddokument Felder die auf diese Textformularfelder zugreifen. Man muss natürlich nachdem man den Text in die Textformularfelder geschrieben hat, alle Felder aktualisieren.
Ich habe Felder in folgenden Bereichen:
-Hauptbereich
-Kopfzeile
-Fußzeile
-Textfeld in Fußzeile
Darum folgender Code:
Sub Aktualisieren()
Dim rngDoc As Range
Dim oDoc As Document
Dim docSec As Section
Dim oHF As HeaderFooter
Dim shp As Shape
Set oDoc = ActiveDocument
For Each docSec In oDoc.Sections
For Each oHF In docSec.Headers
For Each shp In oHF.Shapes
With shp.TextFrame
If .HasText Then
.TextRange.Fields.Update
End If
End With
Next shp
Next oHF
For Each oHF In docSec.Footers
For Each shp In oHF.Shapes
With shp.TextFrame
If .HasText Then
.TextRange.Fields.Update
End If
End With
Next shp
Next oHF
For Each rngDoc In oDoc.StoryRanges
rngDoc.Fields.Update
While Not (rngDoc.NextStoryRange Is Nothing)
Set rngDoc = rngDoc.NextStoryRange
rngDoc.Fields.Update
Wend
Next rngDoc
Next docSec
Set rngDoc = Nothing
Set oDoc = Nothing
End Sub
(Obriger Code funktioniet nur in einem Word-Modul)
Mit diesem Code werden alle Felder aktualisiert, also auch die Textformularfelder (dh.Es Steht dann wieder der Standardtext drinnen und nicht der Text den ich von Access übernommen habe).
Folgedessen steht dann in allen Feldern der Standardtext der Textformularfeldern drinnen.
Meine Frage:
Wie kann ich beim Aktualisierungsvorgang die Textformularfelder ausschließen?
In weiterer Folge möchte ich den zweiten Code später auch über das Access-VBA ausführen. Welche Änderungen muss ich dann vornehmen?
Mit diesem Code werden alle Felder aktualisiert, also auch die
Textformularfelder (dh.Es Steht dann wieder der Standardtext
drinnen und nicht der Text den ich von Access übernommen
habe).
Folgedessen steht dann in allen Feldern der Standardtext der
Textformularfeldern drinnen.
Meine Frage:
Wie kann ich beim Aktualisierungsvorgang die
Textformularfelder ausschließen?
Hallo MPunkt,
lade mal bitte eine Kopie deiner Datei hoch mit fileupöoad o.ä., s. FAQ:2606
die brauch ich *glaub* nicht. Du befüllst ja die Textfelder durch Access mit irgendwelchen texten. Das kann ich ja in Word auch tun per makro.
Mir ist nur deine Doc wichtig da ich in Word nicht fit bin und immer Angst habe wenn ich da so eine Doc „nachbaue“ daß ich da „falsche“ (Text-) Felder „erwische“ oder die im falschen Bereich positioniere, sodaß ggfs. mein Code den ich zu meiner Doc schreibe bei dir gar nicht läuft.
Ich wäre erstmals schon zufrieden wenn es mal rein in der
Worddatei funktioniert.
Ich schaue mal, muß jetzt weg, danach.
Das Ummünzen auf Access ist dann der nächste Schritt.
Das ist recht einfach, teilweise hast du es doch schon gelöst sonst würde ja dein Access-Code gar nix in Word befüllen können.
D,h, den Verweis auf Word wirste gesetzt haben.
Ein Word-Objekt mit createObject oder getobject geöffnet haben.
Google mal nach
createobject Word.Application
und
getobject Word.Application
in dem zuerst geposteten Code werden mit diesem einen Befehl immer alle Felder einer Dokumentuntereinheit aktualisiert. Wenn ich richtig verstanden habe, sollen aber immer nur REF-Felder aktualisiert werden.
Warum ersetzt man nicht diesen Befehl
rngDoc.Fields.Update
durch so etwas wie
Call RefFelderAktualisieren docSec
Sub RefFelderAktualisieren(docSec as Section)
Dim ff as FormField
For Each ff in docSec
if ff.Type = wdFieldRef Then ff.Update
Next ff
End Sub
Achtung: dieser Code ist nur aus dem Gedächtnis geschrieben und ungetestet, weil ich zunächst nur eine Idee zur Verfügung stellen wollte.
HTH.
Markus
_______________
P.S.: Seit neuestem stellt der IE9 WIN7/64 in der Vorschau Text in den pre-Tags zweizeilig dar, auch wenn keine Leerabsätze eingegeben wurden. Ich hoffe, daß das nicht so ankommt. Ärger…