1

Тема: Переименовать закладки

Здравствуйте. Пишу диссер. Неудачно придумал названия закладок и их уже много (порядка 50). Хочу переименовать. Но на закладки настроены перекрестные ссылки. Если переименовать по простому, я так понимаю, ссылки все пропадут. Поэтому возник вопрос.

Вручную это вообще можно все сделать тупо: удалить старые закладки, расставить новые, обновить ссылки по всему документу - получится куча мест с "Ошибка! Неправильная ссылка" (типа того). Пройти по всем этим местам и настроить ссылки на правильные закладки. Просто хотелось бы автоматизировать этот процесс. В идеале надо взять список закладок со старыми именами, дать им новые имена и всё.

2

Re: Переименовать закладки

Могу предложить такой вариант:

Sub ChangeBookmarksName()
  Dim FileNum As Byte
  Dim sBmOldName As String
  Dim sBmNewName As String
  Dim oBmRange As Range
  Dim oFld As Field
  
  'Путь к файлу со списком замен
  Const sPath As String = "c:\Users\Viter Alex\Desktop\bmRepl.txt"
  
  'Построчное чтение файла со списком замен
  FileNum = FreeFile
  Open sPath For Input As #FileNum
  Do While Not EOF(FileNum)
    Line Input #FileNum, sBmOldName
    'Новое имя закладки
    sBmNewName = Mid(sBmOldName, InStr(sBmOldName, " ") + 1)
    'Старое имя закладки
    sBmOldName = Mid(sBmOldName, 1, InStr(sBmOldName, " ") - 1)
    
    'Замена имени закладки в перекрёстных ссылках
    For Each oFld In ActiveDocument.Fields
      If oFld.Type = wdFieldRef Then
        oFld.Code.Text = Replace(oFld.Code.Text, " " & sBmOldName & " ", " " & sBmNewName & " ")
      End If
    Next
    
    'Замена имён закладок
    With ActiveDocument
      Set oBmRange = .Bookmarks(sBmOldName).Range
      .Bookmarks(sBmOldName).Delete
      .Bookmarks.Add sBmNewName, oBmRange
    End With
    DoEvents
  Loop
  Close #FileNum
End Sub

Файл списка замен — это обычный текстовый файл, в каждой строке которого указаны старое и требуемое имя закладки, разделённые пробелом. Создайте такой файл, путь к нему запишите в константу sPath.

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

3

Re: Переименовать закладки

Супер! Спасибо. Такую можно было бы даже интерактивной сделать. Т.е. формой.