Entwickler-Ecke

Sonstiges (Delphi) - MS Word alle Felder aktualisieren / berechnen...


Steini1980 - Mo 02.03.09 20:17
Titel: MS Word alle Felder aktualisieren / berechnen...
Hallo ich habe ein Rechnungsformular in MS Word und möchte nach dem Befüllen des Formulars aus Delphi alle Felder neu berechnen. Normalerweise geschieht dies erst, wenn ich auf die Druckvorschau oder auf Drucken gehe. Ich möchte aber, dass Standardmäßig alle Felder aktualisiert werden.

Ich habe schon lange Zeit danach gegoogelt und zu folgendem Macro gekommen, und habe versucht dies in Delphi umzusetzen. Offenbar bin ich zu blöd:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Sub UpdateAllFields()
   Dim aStory As Range
   Dim aField As Field

   For Each aStory In ActiveDocument.StoryRanges
      For Each aField In aStory.Fields
         aField.Update
      Next aField
   Next aStory
End Sub


Wie müsste der Code dann in Delphi aussehen? Angefangen hab ich mit


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
For i:=0 to wDoc.StoryRanges.Count do begin
  // Nur hier komme ich einfach nicht auf die einzelnen Felder:
  For j:=0 to ??? do begin
    // ???
  end;
end;


Keldorn - Mo 02.03.09 20:56

Hallo,

also
Zitat:

For i:=0 to wDoc.StoryRanges.Count do begin

ist schonmal suboptimal ;-), da zähslt du auf alle Fälle ein Item zuviel
entweder


Delphi-Quelltext
1:
For i:=0 to wDoc.StoryRanges.Count-1 do begin                    

oder

Delphi-Quelltext
1:
For i:=1 to wDoc.StoryRanges.Count do begin                    


2. wäre für mich richtig, die items in Word fangen immer bei 1 an.

Zeig mal bitte deinen kompletten Code, also auch, wie Du dich mit Word verbindest.

ansonsten haben die Elemente meist eine item-Eigenschaft (runde Klammer!).
Du müßtest sinnbildlich sowas stehen haben:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
Var Astory,Afield:variant;
For i:=1 to wDoc.StoryRanges.Count do 
  begin
    astory:=wDoc.StoryRanges.item(i);
    for j:=1 to astory.fields.count do
      begin
        Afield:=astory.fields.item(j);
        afield.update; 
      end;
  end;

ist aber völlig ungetestet.

Wobei, läßt sich das aktualisieren nicht auch in den Optionen generell einstellen?

Gruß Frank