Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2010, 19:54   #21
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Посмотри, мой макрос пропускает только те страницы, которые начинаются не с нового абзаца?

Добавлено позже
В общем фишка была в том, что фигура привязывается к началу первого абзаца из диапазона, заданного в качестве якоря. Поэтому, если текст на странице не совпадал с началом абзаца, то кнопка при вставке привязывалась к началу последнего абзаца предыдущей страницы. Я исправил это с помощью костыля. Также добавил явное задание шрифта для кнопки.
Код:
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 ActiveDocument.Shapes.AddOLEControl("Forms.CommandButton.1", , , , , Anchor)
    Set btn = .OLEFormat.Object
    With btn
      .Name = Name
      .Caption = Caption
      .AutoSize = True
      .Font.Bold = False
      .Font.Size = 14
    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 """ & MacroName & """" & vbCr & "End Sub"
  End With
End Sub

Sub Main()
  Dim oRng As Range
  Dim i As Long
  Dim n As Long
  
  n = ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
  Set oRng = ActiveDocument.Range.GoTo(wdGoToPage, wdGoToAbsolute, 1)
  i = oRng.Information(wdActiveEndPageNumber)
  Do
    'Костыль: Если начало текста на странице не совпадает с началом абзаца, _
    то привязываем фигуру к следующему абзацу на странице
    If oRng.Paragraphs.First.Range.Start <> oRng.Start Then
      Set oRng = oRng.Paragraphs.First.Next.Range
    End If
    AddButtonToPage oRng, "Button" & i, oRng.Sections.First.PageSetup.TopMargin, oRng.Sections.First.PageSetup.LeftMargin, "К оглавлению", "WebGoBack"
    Set oRng = oRng.GoToNext(wdGoToPage)
    i = i + 1
    If i - 1 = n Then Exit Do
    DoEvents
  Loop
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 24.09.2010 в 20:58.
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Страницная навигация R-87A Общие вопросы .NET 13 25.04.2010 18:36
Навигация по листу Rodion Microsoft Office Excel 1 19.04.2010 19:47
Навигация по элементах в ListBox RIO Компоненты Delphi 4 23.08.2009 15:00
Навигация по DBGrid uraura Компоненты Delphi 1 01.11.2008 18:13
Навигация по таблице Натуся Помощь студентам 4 31.10.2007 00:58