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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 22:47   #11
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 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
  Next
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 22.09.2010, 11:22   #12
kanapfelka
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 11
По умолчанию

Вот это да! Я бы никогда сходу такого не написал, ещё не пробовал, но всё равно огромное спасибо
kanapfelka вне форума Ответить с цитированием
Старый 22.09.2010, 12:19   #13
kanapfelka
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 11
По умолчанию

Выделяет CodeModule As VBComponent, и говорит user-defined type not defined.
В новом документе с рыбой AddButtonToPage говорит argument not optional, а Main выделяет btn As CommandButton и говорит user-defined type not defined.

Последний раз редактировалось kanapfelka; 22.09.2010 в 13:18.
kanapfelka вне форума Ответить с цитированием
Старый 22.09.2010, 14:01   #14
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Tools→References… и подключить Microsoft Visual Basic for Applications Extensibility и Microsoft Forms 2.0 Object Library. В безопасности макросов разрешить программный доступ к объектам VBA
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 22.09.2010, 16:23   #15
kanapfelka
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 11
По умолчанию

О классно, расставил, только иногда пропуская страницы и принимая стиль окружающего текста к тексту на кнопке.
Куда всунуть clearformatting?
kanapfelka вне форума Ответить с цитированием
Старый 23.09.2010, 04:50   #16
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Код в студию
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 23.09.2010, 13:13   #17
kanapfelka
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 11
По умолчанию

Так я не менял ничего

Код:
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
  Next
End Sub
kanapfelka вне форума Ответить с цитированием
Старый 23.09.2010, 13:37   #18
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Может, я чего-то не понял, а не проще использовать "Схему документа"?
Главное сформатировать заголовки правильно, и макросы не потребуются!
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 23.09.2010, 16:34   #19
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Если ничего не менял, то как понять
Цитата:
Сообщение от kanapfelka Посмотреть сообщение
…принимая стиль окружающего текста к тексту на кнопке…
если кнопка вставляется над верхней границей страницы, а не в текст? Странно, что пропускаются страницы, попробуй вот так записать цикл в процедуре Main
Код:
  'Переход последовательно по страницам и вставка кнопок
  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
Замечание Skif-F совершенно корректно, но, как известно, у начальства свои тараканы в голове.

Добавлено позже
Странно, действительно меняет шрифт и пропускает страницы
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 23.09.2010 в 20:47.
viter.alex вне форума Ответить с цитированием
Старый 24.09.2010, 12:23   #20
kanapfelka
Пользователь
 
Регистрация: 20.09.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
проще использовать "Схему документа"?
Главное сформатировать заголовки правильно, и макросы не потребуются!
Повторюсь, это делается не для бланков договоров, а для довольно-таки больших документов (50-300 страниц)
Изображения
Тип файла: jpg 1.JPG (98.3 Кб, 145 просмотров)
kanapfelka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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