1

Тема: Как изменить источник множества связей

Подскажите, пожалуйста, как можно решить эту проблему.
Были созданы связи ячеек Excel с Word с помощью копирования и специальной вставки. Но потом выяснилось, что после создания связей таким способом, при изменении названия Excel документа связи не обновляются.
Можно ли создать макрос, который автоматически изменял бы ссылки на файл при изменении названия документа?
Или, возможно, есть какой-либо другой способ? Так как связей много и заново всё связывать займет, думаю, немало времени smile

Отредактировано YulyaS10 (12.02.2010 15:20:15)

2

Re: Как изменить источник множества связей

YulyaS10, попробуйте у себя такой макрос:

Sub ChangeLinks()
  Dim oFld As Field 'Поле
  Dim OldFileName As String 'Старое имя файла
  Dim NewFileName As String 'Новое имя файла
  Dim FieldCode As String 'Код поля
  Dim ReplaceAllPath As Boolean 'Заменять весь путь к файлу или только имя
  Dim StartPath As Integer, EndPath As Integer 'Начало и конец пути к файлу в коде поля
  
  'Ввод старого имени файла
  OldFileName = InputBox("Укажите старое имя файла с расширением в ссылке, которое нужно изменить", "Изменение ссылок", OldFileName)
  If Len(OldFileName) = 0 Then Exit Sub
  
  'Выбор нового файла
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Выберите новый файл, с которым должен быть связан документ"
    .AllowMultiSelect = False
    .ButtonName = "Выбрать"
    .Filters.Clear
    .Filters.Add "Таблицы Excel", "*.xls; *.xlsx"
    If .Show Then NewFileName = .SelectedItems(1) Else Exit Sub
  End With
  
  'Если изменилось не только имя, но и местоположение, то можно заменить весь путь
  ReplaceAllPath = MsgBox("Заменять весь путь? Нажмите ""Нет"", чтобы заменить только имя файла", vbYesNo + vbInformation, "Изменение ссылок") = vbYes
  
  NewFileName = Replace(NewFileName, "\", "\\")
  'Перебираем все поля в документе
  For Each oFld In ActiveDocument.Fields
    If oFld.Type = wdFieldLink Then 'Если поле является полем ссылки
      FieldCode = oFld.Code.Text
      If InStr(oFld.Code.Text, "Excel.Sheet") <> 0 And InStr(FieldCode, "\\" & OldFileName) <> 0 Then 'Если поле ссылается на лист Excel и на нужный файл
        If ReplaceAllPath Then 'Если нужно заменить весь путь
          StartPath = InStr(FieldCode, ":\\") - 2
          EndPath = InStr(FieldCode, "\\" & OldFileName) + Len(OldFileName) + 2
          FieldCode = Mid(FieldCode, 1, StartPath) & NewFileName & Mid(FieldCode, EndPath)
        Else 'Если нужно заменить только имя файла
          FieldCode = Replace(FieldCode, OldFileName, Mid(NewFileName, InStrRev(NewFileName, "\") + 1))
        End If
      End If
    End If
    oFld.Code.Text = FieldCode
  Next
End Sub

Написал макрос, а потом вспомнил о стандартной возможности. Если вы работаете в Word 2003 и ниже, то зайдите в меню "Правка"→"Связи…", появится окно, а там уже разберётесь.
В Word 2007 это окно можно вызвать, зайдя в меню Office→"Подготовить"→"Изменить ссылки на файлы".
В Word 2010: вкладка "Файл"→"Сведения"→"Изменить связи с файлами"
Ну а макрос так, для разминки:)

Лучше день потерять — потом за пять минут долететь!

3

Re: Как изменить источник множества связей

Ну, тогда может и макрос сгодится:)

Лучше день потерять — потом за пять минут долететь!

4

Re: Как изменить источник множества связей

viter.alex
Спасибо!!! Получилось=))))
да, я так пробовала делать, но просто связей много, а вручную можно изменить лишь одну связь за раз))

5

Re: Как изменить источник множества связей

В следующий раз буду связи задавать по другому)))
Потому что у этого файла Excel постоянно и имя файла и путь меняются)))

6

Re: Как изменить источник множества связей

YulyaS10 пишет:

вручную можно изменить лишь одну связь за раз

Нет! Можно выделить все связи и сменить источник для все сразу.

Лучше день потерять — потом за пять минут долететь!