感谢有人在这里,我终于有一个工作循环......差不多:) 它大部分时间都可以工作,但在某些情况下会出现此错误。
代码:
procedure TLetters.ReplaceDate(NewDate: String);
var I : Integer;
ARegion : OleVariant;
FieldType : Integer;
FieldCount : Integer;
begin
FieldCount := WordApp.ActiveDocument.Fields.Count;
For I := 1 to FieldCount do
Begin
FieldType := WordApp.ActiveDocument.Fields.Item( I ).type;
If FieldType IN [ 31,32 ] Then
Begin
ARegion := WordApp.ActiveDocument.Fields.Item( I ).Code;
WordApp.ActiveDocument.Fields.Item( I ).Cut;
ARegion.Text := NewDate;
End;
End;
end;
上面代码的问题在于,有时,Count会返回2,但是当我尝试检查第二个条目时,它会在主题中输出异常。
难道只是我必须做一个Count -1而不是Count?
答案 0 :(得分:0)
你是对的。 Office中的所有计数从1到计数。
错误在您的代码中:
procedure TLetters.ReplaceDate(NewDate: String);
var I : Integer;
ARegion : OleVariant;
FieldType : Integer;
FieldCount : Integer;
begin
FieldCount := WordApp.ActiveDocument.Fields.Count;
for I := 1 to FieldCount do begin
FieldType := WordApp.ActiveDocument.Fields.Item( I ).type;
If FieldType IN [ 31,32 ] then begin
ARegion := WordApp.ActiveDocument.Fields.Item( I ).Code;
WordApp.ActiveDocument.Fields.Item( I ).Cut; <<--- here !!
ARegion.Text := NewDate;
end;
end;
end;
当您cut
某个项目时,将其从列表中删除,您应该将count
减少一个。
重写代码如下:
begin
FieldCount := WordApp.ActiveDocument.Fields.Count;
i:= 1;
while (i <= fieldCount) do begin
FieldType := WordApp.ActiveDocument.Fields.Item( i ).type;
if FieldType in [ 31,32 ] then begin
ARegion := WordApp.ActiveDocument.Fields.Item( i ).Code;
WordApp.ActiveDocument.Fields.Item( i ).Cut;
Dec(FieldCount);
ARegion.Text := NewDate;
end
else Inc(i);
end; {while}
end;