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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2009, 08:27   #1
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию Объекты Worda

Например, в ворде нет такой команды "Выделить страницу".

Можно ли создать такую команду, не знаю, как правильно называется.
Не макрос, а именно какой-нибудь объект.
Или создать этот объект где-нибудь в другом месте, а затем подсоединить к шаблону.
Busine2009 вне форума Ответить с цитированием
Старый 30.05.2009, 12:45   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Непонятно, какой объект вы имеете ввиду. И почему не макрос? Запишите макрос в шаблон, повесьте его на кнопку или сочетание клавиш и пользуйтесь.
Вам нужно выделить страницу? Это можно сделать, только без колонтитулов и примечаний. Спросите меня как.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.05.2009, 13:08   #3
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

Я имею ввиду вообще:

например, есть объект Table, могу ли я создать тоже объект? Или если их нет в программе, то ничего нельзя сделать?

Напишите, пожалуйста, макрос, выделения только страницы. А еще лучше макрос по уменьшению пустых знаков абзаца на 1 пункт на текущей странице, ну или хотя бы по выделению пустых знаков абзаца на одной странице.
Busine2009 вне форума Ответить с цитированием
Старый 30.05.2009, 13:38   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Объект создать можно. Если вы знаете, что этот объект должен делать, какими свойствами обладать и т.д. Делается это с помощью классов. Вам этим еще рано заниматься.
Сходу не могу сообразить как получить текущую страницу. Вот для всего документа:
Код:
  With ActiveDocument.Range.Find
    .Text = "^p"
    While .Execute
        .Parent.Select
      If Len(.Parent.Paragraphs(1).Range.Text) = 1 Then
        .Parent.Paragraphs(1).Range.Font.Size = .Parent.Paragraphs(1).Range.Font.Size - 1
      End If
    Wend
  End With
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 30.05.2009, 13:46   #5
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

А как просто тогда выделить текущую страницу?
Busine2009 вне форума Ответить с цитированием
Старый 30.05.2009, 14:05   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от Busine2009 Посмотреть сообщение
А как просто тогда выделить текущую страницу?
Если бы я смог получить текущую страницу, то я бы смог ее и выделить. Сейчас будем кумекать.
Накумекал я следующее:
Код:
Sub SearchOnCurrentPage()
  'Запоминаем в переменную oRng диапазон всего документа
  Dim oRng As Range: Set oRng = ActiveDocument.Range
  'Расширяем этот диапазон до положения курсора
  oRng.SetRange oRng.Start, Selection.Range.Start
  'Запоминаем в переменную oRng начало страницы, на которой находится курсор
  Set oRng = ActiveDocument.Range.GoTo(wdGoToPage, , oRng.ComputeStatistics(wdStatisticPages))
  'Расширяем диапазон, хранящийся в переменной oRng, до начала следующей страницы.
  'Таким образом в нашей переменной окажется вся страница, на которой в данный момент находится курсор.
  oRng.SetRange oRng.Start, oRng.GoToNext(wdGoToPage).Start
  'Запоминаем номер последнего символа на текущей странице
  Dim iEnd&: iEnd = oRng.End
  With oRng.Find
  'На нужной странице, диапазон которой хранится в переменно oRng, ищем знаки абзацев
    .Text = "^p"
    'Если знак абзаца найден
    While .Execute
      'При поиске диапазон почему-то меняется, поэтому выполняем проверку, что мы не вышли за пределы
      If .Parent.End <= iEnd Then
        'Если в найденном абзаце находится только один символ — знак абзаца
        If Len(.Parent.Paragraphs(1).Range.Text) = 1 Then
          'то уменьшаем его шрифт на 1
          .Parent.Paragraphs(1).Range.Font.Size = .Parent.Paragraphs(1).Range.Font.Size - 1
        End If
      End If
    Wend
  End With
End Sub
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 30.05.2009 в 14:50.
viter.alex вне форума Ответить с цитированием
Старый 02.06.2009, 21:26   #7
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

Я к тому вел беседу, что есть такая команда, как выделить раздел, можно ли своими силами создать команду: выделить страницу.
Busine2009 вне форума Ответить с цитированием
Старый 02.06.2009, 21:57   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Можно так сделать. Повесьте этот макрос на кнопку и будет вам счастье.
Код:
Sub SelectCurrentPage()
  'Запоминаем в переменную oRng диапазон всего документа
  Dim oRng As Range: Set oRng = ActiveDocument.Range
  'Расширяем этот диапазон до положения курсора
  oRng.SetRange oRng.Start, Selection.Range.Start
  'Запоминаем в переменную oRng начало страницы, на которой находится курсор
  Set oRng = ActiveDocument.Range.GoTo(wdGoToPage, , oRng.ComputeStatistics(wdStatisticPages))
  'Расширяем диапазон, хранящийся в переменной oRng, до начала следующей страницы.
  'Таким образом в нашей переменной окажется вся страница, на которой в данный момент находится курсор.
  oRng.SetRange oRng.Start, oRng.GoToNext(wdGoToPage).Start
  'Выделяем диапазон
  oRng.Select
End Sub
Красная строчка добавлена в предыдущий макрос. Все что ниже — удалено
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 03.06.2009, 05:29   #9
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

Например, есть такое сочетание клавиш ctrl + А - выделение всего документа - это же не макрос.
Вот как создать подобное для выделения 1 страницы.
Busine2009 вне форума Ответить с цитированием
Старый 03.06.2009, 13:28   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от Busine2009 Посмотреть сообщение
Например, есть такое сочетание клавиш ctrl + А - выделение всего документа - это же не макрос…
Вы уверены? Это команда EditSelectAll. Если вы создадите макрос с таким именем, то переопределите ее. Например, так
Код:
Sub EditSelectAll()
  MsgBox "Вы попытались выделить весь текст в документе." & vbCr & "Но не тут-то было!", vbExclamation, "Шутка"
End Sub
Запустите этот макрос и увидите, что будет.
Цитата:
Сообщение от Busine2009 Посмотреть сообщение
…Вот как создать подобное для выделения 1 страницы.
Я же дал макрос. Повесьте на него сочетание клавиш и все.
Да, макрос не работал с последней страницей. вот исправленный вариант:
Код:
Sub SelectCurrentPage()
  Dim iPgRng%, iPgsCnt%, iEnd&
  'Запоминаем в переменную oRng диапазон всего документа
  Dim oRng As Range: Set oRng = ActiveDocument.Range
  'Расширяем этот диапазон до положения курсора
  oRng.SetRange oRng.Start, Selection.Range.Start
  'Количество страниц в нашем диапазоне
  iPgRng = oRng.ComputeStatistics(wdStatisticPages)
  'Количество страниц в документе
  iPgsCnt = ActiveDocument.Range.ComputeStatistics(wdStatisticPages)
  'Запоминаем в переменную oRng начало страницы, на которой находится курсор
  Set oRng = ActiveDocument.Range.GoTo(wdGoToPage, , iPgRng)
  'Если количество страниц в диапазоне oRng равно количество страниц в документе, то _
  курсор находится на последней странице. Исходя из этого, определяем позицию в документе, _
  до которой будем расширять наш диапазон. Если курсор находится на последней странице, то _
  расширяем до конца документа, если нет, то расширяем до начала следующей страницы.
  iEnd = IIf(iPgRng = iPgsCnt, ActiveDocument.Range.End, oRng.GoToNext(wdGoToPage).Start)
  'Таким образом в переменной oRng окажется вся страница, на которой в данный момент находится курсор.
  oRng.SetRange oRng.Start, iEnd
  'Выделяем диапазон
  oRng.Select
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Явление Worda Busine2009 Microsoft Office Word 2 26.05.2009 08:53
Объекты или... Lich Общие вопросы Delphi 1 03.06.2008 23:22
объекты в си Барби Помощь студентам 1 13.05.2008 01:10
3D объекты в Си g0liath Помощь студентам 2 20.04.2008 21:39
com-объекты b-code Общие вопросы Delphi 0 15.03.2007 11:17