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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2020, 19:33   #1
AlexShp
Новичок
Джуниор
 
Регистрация: 13.02.2019
Сообщений: 3
По умолчанию Проблема с переходом на следущую страницу

Здравствуйте.
Нужен совет по такой проблеме:
Пытаюсь вывести несколько текстбоксов на странице, по достижении нужного количества, добавить страницу, перейти на неё там продолжить вывод.
Страница добавляется, но вывод продолжается на первой странице. Что интересно просто текст выводится на следущей странице, а textbox на той же. Я плохо разбираюсь в объектной модели Word, возможно где то чего то путаю. Вот код (по кусочкам собран на форумах )
Код:
Sub AddTxtBox()
   Dim objLeft As Double
   Dim objTop As Double
   Dim objWidth As Double
   Dim objHeight As Double
   
   Dim IntervalHeight As Double
   Dim IntervalWidth As Double
   
   Dim cntRows As Integer
   Dim i As Integer
   
   Dim objTxtBox As Shape
   'Координаты
   objLeft = ConvertCmToPoint(1)
   objTop = ConvertCmToPoint(1)
   'Размеры
   objWidth = ConvertCmToPoint(4.5)
   objHeight = ConvertCmToPoint(2.5)
   'Вертикальный интервал
   IntervalHeight = ConvertCmToPoint(0.5)
   i = 1
   cntRows = 1
   Do While i < 15
      Set objTxtBox = ActiveDocument.Shapes.AddTextbox _
      (msoTextOrientationHorizontal, objLeft, objTop, objWidth, objHeight)
      objTxtBox.TextFrame.TextRange = "Text Box " & "#" & Trim(Str(i))
      objTop = objTop + objHeight + IntervalHeight
      cntRows = cntRows + 1
      If cntRows > 7 Then
         cntRows = 1
         ActiveDocument.Range(ActiveDocument.Range.End - 1, ActiveDocument.Range.End - 1).InsertBreak Type:=wdPageBreak
         objTop = ConvertCmToPoint(1)
         ActiveDocument.Content.InsertAfter Text:=" Next Page" 
      End If
      i = i + 1
   Loop
 End Sub
Function ConvertCmToPoint(ByVal cm As Double) As Double
   ConvertCmToPoint = cm * 28.34646
End Function
AlexShp вне форума Ответить с цитированием
Старый 29.09.2020, 13:32   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

У метода AddTextbox есть последний необязательный параметр. В статье он не указан, но появляется в подсказке при вводе функции. Этот последний параметр называется Anchor и с его помощью задаётся диапазон, к которогому привязывается вставляемый объект. Чтобы вставить на нужную страницу, нужно задать диапазон, находящийся на нужной странице.
Например,
Код:
'Вставит на страницу с первым абзацем
ActiveDocument.Shapes.AddTextbox msoTextOrientationHorizontal,0,0,100,20,ActiveDocument.Paragraphs.First.Range
Код:
'Вставит на страницу с последним абзацем
ActiveDocument.Shapes.AddTextbox msoTextOrientationHorizontal,0,0,100,20,ActiveDocument.Paragraphs.Last.Range
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 29.09.2020, 15:41   #3
AlexShp
Новичок
Джуниор
 
Регистрация: 13.02.2019
Сообщений: 3
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
У метода AddTextbox есть последний необязательный параметр...
Спасибо! Отлично работает!
Нашел ещё другой способ - после вставки новой страницы добавить такой код:
Код:
 ActiveDocument.GoTo(wdGoToPage, wdGoToNext).Select
AlexShp вне форума Ответить с цитированием
Старый 30.09.2020, 10:11   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от AlexShp Посмотреть сообщение
Нашел ещё другой способ
Ну это если ты работаешь с выделением. Если же работаешь в фоне, незаметно от пользователя, то выделение не подходит, т.к. будет мешать.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 01.10.2020, 11:01   #5
AlexShp
Новичок
Джуниор
 
Регистрация: 13.02.2019
Сообщений: 3
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Ну это если ты работаешь с выделением. Если же работаешь в фоне, незаметно от пользователя, то выделение не подходит, т.к. будет мешать.
И замедлять наверное. Так что да, согласен.
AlexShp вне форума Ответить с цитированием
Старый 01.10.2020, 15:58   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от AlexShp Посмотреть сообщение
И замедлять наверное.
Не факт. Если отключить обновление экрана, то работа с Selection иногда быстрее, а некоторые вещи можно делать только через выделение.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с переходом на 2 форму bogdanzykov Общие вопросы Delphi 11 22.01.2015 20:33
Цикл с переходом на ячейку. bboyRALF Microsoft Office Excel 9 23.10.2012 15:41
Определиться с переходом с Delphi на C++ muhahp Свободное общение 12 25.01.2012 04:39
Проблема с переходом (bat) JonMagon Помощь студентам 8 11.07.2011 16:08