2003/XP/2000 - Навигация в документе word2003

Ответить
Аватара пользователя
kanapfelka

2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Есть большие документы, в которых хотелось бы организовать удобную навигацию. Так, чтобы с оглавления можно было перемещаться к главам и после глав по нажатию кнопки перемещаться обратно к оглавлению. Как это реализовать если не гиперссылками? Хотелось бы также придумать какой-то макрос для расстановки таких кнопок по всему документу.
Аватара пользователя
Morpheus

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение Morpheus »

kanapfelka, на 2010 переходить не планируете? Там ничего изобретать на надо:

Аватара пользователя
kanapfelka

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Такое есть и в 2003, правда в чуть менее красивом виде. Но я имею ввиду чтобы кнопки были прямо в тексте, а не в меню навигации.
Аватара пользователя
kanapfelka

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Скажем так.



Оглавление.б

кратков

кратког

кратко

Статьи.б

Много текста

кнопка назадв

Много текста

кнопка назадг

Много текста

кнопка назад
Аватара пользователя
okshef

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение okshef »

kanapfelka, и в 2003-м процесс создания оглавления можно автоматизировать. Единственное - использовать стили и уровни. Если в документе стили не используются, то можно воспользоваться закладками и гиперссылками. Встроенная справка Word объясняет сей процесс весьма доступно.
Аватара пользователя
v12345

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение v12345 »

Схематично можно так:

1) вставляем стандартным способом оглавление в файл

2) устанавливаем курсор в начало заголовка оглавления и стандартным образом вставляем туда закладку - назовем ее, допустим, "ЗакладкаОглавление"

3) после этого выполняем в документе примерно такой макрос:





Код:

Код: Выделить всё

Sub ДобавитьСсылкиНаОглавление()
Dim P As Paragraph
For Each P In ActiveDocument.Paragraphs
    If P.Style = "Заголовок 1" Then
        P.Range.Select
        Selection.Collapse (wdCollapseStart)
        Selection.TypeParagraph
        Selection.MoveUp
        Selection.Style = wdStyleNormal
        Selection.TypeText Text:="Переход к оглавлению"
        Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
        ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", _
            SubAddress:="ЗакладкаОглавление", ScreenTip:="", TextToDisplay:= _
            "Переход к оглавлению"
    End If
Next P
End Sub

Суть макроса: перебирает все абзацы в документе, находит те, у которых стиль "Заголовок 1" (если нужно - имя стиля меняем в тексте макроса), перед каждым абзацем, который оформлен этим стилем, вставляет новый абзац "Переход к оглавлению", присваивает ему обычный стиль и делает гиперссылкой на закладку, которую мы вставили в начало оглавления.



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

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Гиперссылки это хорошо, а можно кнопку сделать?
Аватара пользователя
kanapfelka

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Цитата kanapfelka:



Гиперссылки это хорошо, а можно кнопку сделать?
2003/XP/2000 - Навигация в документе word2003




Можно, но я бы не советовал.



Впрочем, если хотите должно быть так:

- включаем вкладку Разработчик (если в 2007)

- записываем макрос вставки одной кнопки в текущий абзац

- анализируем код, находим фрагмент, отвечающий непосредственно за вставку кнопки и назначение ей действия.

- корректируем мой вариант.



Лично не пробовал, т. к. считаю, что гиперссылки лучше с точки зрения последующей поддержки. Но скорее всего в моем макросе окажется необходимым заменить лишь строку, начинающуюся со слов ActiveDocument.Hyperlinks.Add
Аватара пользователя
kanapfelka

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Сделал кнопку, теперь надо к ней привязать действие для переноса на оглавление.
Аватара пользователя
kanapfelka

Re: 2003/XP/2000 - Навигация в документе word2003

Сообщение kanapfelka »

Код:

Код: Выделить всё

Sub AddButtonToPage(Anchor As Range, Name As String, Top As Single, Left As Single, Caption As String, MacroName As String)
  Dim btn As CommandButton
  'Добавление кнопки на страницу
  With Anchor.Document.Shapes.AddOLEControl("Forms.CommandButton.1", , , , , Anchor)
    Set btn = .OLEFormat.Object
    With btn
      .Name = Name
      .Caption = Caption
      .AutoSize = True
    End With
    .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
    .Left = Left
    .RelativeVerticalPosition = wdRelativeVerticalPositionPage
    .Top = Top - btn.Height
  End With
  'Добавление кода для кнопки в модуль ThisDocument
  Dim CodeModule As VBComponent
  Set CodeModule = Anchor.Document.VBProject.VBComponents(1)
  With CodeModule.CodeModule
    .InsertLines .CountOfDeclarationLines + .CountOfLines, String(2, vbCr)
    .InsertLines .CountOfDeclarationLines + .CountOfLines, "Private Sub " & Name & "_Click()" & vbCr & "Application.Run ""WebGoBack""" & vbCr & "End Sub"
  End With
End Sub
Sub Main()
  Dim oRng As Range
  Dim i As Long
  Set oRng = ActiveDocument.Range
  'Переход последовательно по страницам и вставка кнопок
  For i = 1 To ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
    Set oRng = oRng.GoTo(wdGoToPage, wdGoToAbsolute, i)
    AddButtonToPage oRng, "Button" & i, oRng.Sections.First.PageSetup.TopMargin, oRng.Sections.First.PageSetup.LeftMargin, "К оглавлению", "Run" & i
    DoEvents
  Next
End Sub

Такой вот код помогли мне сделать на
http://www.programmersforum.ru/showthread.php?p=620182




Но есть проблема с его исполнением — проставляет кнопки не на каждой странице, и где ставит берет форматирование текста на кнопке из окружающего текста и все кнопки получаются разные.
Ответить

Вернуться в «Microsoft Office (Word, Excel, Outlook и т.д.)»