Word 2003 против 2007/2010 Автоматизация - PullRequest
2 голосов
/ 25 марта 2011

Я автоматизирую Word в приложении VB6 и получаю исключение, когда хост-машина использует Word 2007 или 2010, но не на компьютере под управлением Word 2003. Исключение составляет

Ошибка выполнения '4605': «Этот метод или свойство недоступны, поскольку объект ссылается> на конец строки таблицы.»

Исключение выдается на седьмой итерации следующего цикла,в строке, которая пытается вставить разрыв страницы:

For num = 1 To breakArrCount
    Set myRange = oworddoc.Paragraphs(breakArr(num)).Range
    With myRange
        On Error Resume Next
        .Collapse Direction:=wdCollapseEnd
        .InsertBreak Type:=wdPageBreak
    End With
Next

В массиве breakArr хранятся индексы абзацев в документе, за которыми следует разрыв страницы.

Интересно, что если я вырваюсь из цикла перед исключением (т.е. после 6-й итерации) и посмотрю сгенерированный документ, я замечу, что разрывы страниц (для первых 6 страниц) вставляются в разные точки в Word 2007/2010чем в 2003 году.

Почему будет разница?Кто-нибудь знает, что я должен делать по-другому?

Спасибо.

1 Ответ

2 голосов
/ 28 марта 2011

Добро пожаловать в мир разработки приложений для автоматизации Word с несколькими версиями.

Если серьезно, вы попадете в горы этих типов проблем. Я знаю, что разные версии слова обрабатывают вставку разрывов страниц в разных местах по-разному. У меня было множество проблем с разработкой надстройки, которая интеллектуально объединяла документы из нескольких слов в один обычный (не основной) документ.

Лучше всего тестировать как черт и создавать процедуры исключения для обработки определенных версий Word, когда вы получаете подобные аномалии. Надеюсь, вы не столкнетесь со многими, но я могу сказать, что их очень много.

В этом конкретном случае выбранный абзац, скорее всего, находится в таблице, и вы сворачиваетесь в конец КОН, затем пытаетесь вставить что-то, что портит маркер конца ячейки для ячейки, в которой вы находитесь. в. Различные версии слова обрабатывают это по-разному. В одном случае (я точно забыл, какой именно), если вы сделаете это в ОЧЕНЬ ПОСЛЕДНЕЙ КЛЕТКЕ в таблице, вы повредите документ при его сохранении, но вы не узнаете об этом, пока не попытаетесь открыть документ заново. 1007 *

Часто вы можете обойти эту конкретную проблему, обнаружив, что вы находитесь в таблице, и, если это так, свернуть до конца, а затем создать резервную копию одного символа (если это возможно, ячейка может быть пустой) и ТО, вставив вашу страницу сломаться.

...