Как программно изменить местоположение вложенного документа в главном документе Word 2007? - PullRequest
2 голосов
/ 21 мая 2010

У нас произошло незавидное событие: различные основные документы ссылаются на поддокументы, которых больше нет, чем они были раньше из-за переименования каталога. Существует ли программный способ настройки поля HYPERLINK без потери отношения основной / вложенный документ?

У меня так далеко ...

Sub FixyaLinks()
    Dim s 'As String
    Dim i As Long
    Dim bTrackRevFlag As Boolean
    Dim bShowRevFlag As Boolean

    bTrackRevFlag = ActiveDocument.TrackRevisions
    bShowRevFlag = ActiveDocument.ShowRevisions

    ActiveDocument.TrackRevisions = False
    ActiveDocument.ShowRevisions = False

    For i = 1 To ActiveDocument.Fields.Count
    s = ActiveDocument.Fields.Item(i).Code.Text
    If InStr(s, "CURRICULUM\\NEW") Then
        s = Replace(s, "NEW Foundation Units-in developing", "Foundation Programme Units")
        ActiveDocument.Fields.Item(i).Code.Text = s
    End If
    Next
    ActiveDocument.TrackRevisions = bTrackRevFlag
    ActiveDocument.ShowRevisions = bShowRevFlag
End Sub

Он бомбардирует ActiveDocument.Fields.Item(i).Code.Text = s, с ошибкой 5686 («Операция не может быть завершена, поскольку параметр« Отслеживание изменений »в основном документе не соответствует параметру под-документа. Сделайте параметр« Отслеживание изменений »тем же в основном документе и поддокумент. ") Однако я не совсем уверен, что это значит.

Идеи кому-нибудь?

1 Ответ

0 голосов
/ 22 марта 2011

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

Вы пробовали включить отслеживание изменений и изменение ссылки?

Вам также, вероятно, следует проверить тип поля, который вы собираетесь изменить. В документе могут быть другие виды полей, на которые НЕ СЛЕДУЕТ ссылаться, и вы можете случайно их испортить с помощью этого кода. Я думаю, что вы делаете это с Field.Type

...