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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 21:39   #1
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию Уменьшение шрифта пустого абзаца на один пункт.

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

Вы хоть напишите макрос, который я вам написал. Там изменить-то всего пару строчек
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 03.06.2009, 05:20   #3
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

Код:
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

То есть нужен макрос не для range, а для selection.

Кстати этот макрос не работает на 1 и последней страницах.

Последний раз редактировалось EducatedFool; 03.06.2009 в 06:49. Причина: пользуемся тегом CODE (значок #)
Busine2009 вне форума Ответить с цитированием
Старый 03.06.2009, 13:41   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Согласен, макрос не работает на последней странице. Исправил. Еще раз подчеркну: макрос работает только со страницей, на которой находится курсор. Эту страницу даже выделять не нужно.
Код:
Sub SearchOnCurrentPage()
  Dim iPgRng%, iPgsCnt%, iRngEnd&
  'Запоминаем в переменную 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, до начала следующей страницы.
  'Если количество страниц в диапазоне oRng равно количество страниц в документе, то _
  курсор находится на последней странице. Исходя из этого, определяем позицию в документе, _
  до которой будем расширять наш диапазон. Если курсор находится на последней странице, то _
  расширяем до конца документа, если нет, то расширяем до начала следующей страницы.
  iRngEnd = IIf(iPgRng = iPgsCnt, ActiveDocument.Range.End, oRng.GoToNext(wdGoToPage).Start)
  'Таким образом в нашей переменной окажется вся страница, на которой в данный момент находится курсор.
  oRng.SetRange oRng.Start, iRngEnd
  'Запоминаем номер последнего символа на текущей странице
  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
      Else: Exit Sub
      End If
    Wend
  End With
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 04.06.2009, 07:42   #5
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

А как уменьшить знак абзаца в выделенной области? Дайте хоть подсказку.
Busine2009 вне форума Ответить с цитированием
Старый 04.06.2009, 19:50   #6
Busine2009
Новичок
Джуниор
 
Регистрация: 23.05.2009
Сообщений: 167
По умолчанию

Почему при выполнении этого макроса, происходит подсчет слов? Можно ли избежать этого, т.к. на подсчет слов уходит около 10 сек. А когда нажимаешь во время подсчета слов на Esc, то подсчет слов останавливается и выполняется макрос?
Busine2009 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уменьшение длины имени Aндрей Помощь студентам 3 20.05.2009 16:52
Уменьшение счетчика в записи azat20 Общие вопросы C/C++ 1 22.02.2009 22:03
уменьшение ширины таблицы Viteef HTML и CSS 5 18.02.2009 23:59
Увеличение и уменьшение картинок zzzzz Мультимедиа в Delphi 2 30.08.2008 20:53