Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Навигация в документе word2003 (http://forum.oszone.net/showthread.php?t=185055)

kanapfelka 09-09-2010 18:23 1491914

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

Morpheus 09-09-2010 18:52 1491937

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

kanapfelka 09-09-2010 19:03 1491945

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

kanapfelka 09-09-2010 19:24 1491964

Скажем так.

Оглавление.
  • б
    кратко
  • в
    кратко
  • г
    кратко

Статьи.
  • б
    Много текста
    кнопка назад
  • в
    Много текста
    кнопка назад
  • г
    Много текста
    кнопка назад

okshef 09-09-2010 20:43 1492029

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

v12345 10-09-2010 11:10 1492366

Схематично можно так:
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 10-09-2010 14:21 1492498

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

v12345 13-09-2010 05:21 1494124

Цитата:

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

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

Впрочем, если хотите должно быть так:
- включаем вкладку Разработчик (если в 2007)
- записываем макрос вставки одной кнопки в текущий абзац
- анализируем код, находим фрагмент, отвечающий непосредственно за вставку кнопки и назначение ей действия.
- корректируем мой вариант.

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

kanapfelka 15-09-2010 14:51 1495930

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

kanapfelka 24-09-2010 12:28 1503244

Код:

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

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


Время: 18:59.

Время: 18:59.
© OSzone.net 2001-