Vba word определить абзац

Ципихович Эндрю

1508 / 478 / 56

Регистрация: 10.04.2009

Сообщений: 8,008

1

Определить номер текущего абзаца (параграфа), где стоит курсор

14.10.2017, 15:11. Показов 6220. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

здравствуйте, делаю так:

Visual Basic
1
2
'
            sN = ActiveDocument.Range(Selection.Start, Selection.Start).Paragraphs.Count

но в ответе получаю 1, хотя это не правильно, что я делаю не так? спасибо



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

14.10.2017, 15:11

Ответы с готовыми решениями:

Как сделать, что бы в Memo1, на месте (строке) где стоит курсор, выделялась цветом строчка, где стоит печатный курсор «|»?
Как сделать, что бы в Memo1, на месте (строке) где стоит курсор, выделялась цветом строчка, где…

VBA Word Определить номер параграфа в ячейке таблицы
Доброго времени суток.
Работаю с ячейкой таблицы в word.
Задача взять из нее, например первых три…

Ворд, текст, где стоит курсор
здравствуйте, делаю так:
Sub Текст_где_курсор()

‘Debug.Print…

Word. Определение текущего параграфа
Всем, доброго времени суток!
Недавно пришлось начать осваивать VBA, причем параллельно на Word и…

2

Остап Бонд

Заблокирован

14.10.2017, 16:49

2

Цитата
Сообщение от viter.alex

Visual Basic
1
ActiveDocument.Range(0, Selection.Start).Paragraphs.Count

…это можно прочитать так: количество абзаце в части документа от первого символа до местоположения курсора

Не царское это дело —
голову включать и гуглить…



1



Homarty

141 / 119 / 29

Регистрация: 12.02.2017

Сообщений: 308

15.10.2017, 08:13

3

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub FindSelectedParagraph()
    Dim i&, iPos&
    iPos = Selection.Paragraphs(1).Range.Start
    With ActiveDocument
        Do
            i = i + 1
        Loop While .Paragraphs(i).Range.Start - iPos
        MsgBox "Active paragraph No " & i
    End With
End Sub



0



Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Как получить абзац, в котором находится курсор?

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 3 ]

1 11.01.2010 00:25:22

  • Денис
  • майор
  • Неактивен
  • Зарегистрирован: 10.01.2010
  • Сообщений: 63

Тема: Как получить абзац, в котором находится курсор?

Здравствуйте!
Проблема: у меня работа идет на уровне абзаца, которых в документе десятки тысяч (в основном, абзац=строка). Проверяется наличие определенных элементов в абзаце и соответственно выполняется обработка. На wordexpert я нашел способ определять текущий параграф, но когда его номер велик, время обработки увеличивается колоссально.

Вопрос: не существует ли какой-нибудь константы, которая бы возвращала текущий параграф, без необходимости его определять. Другими словами, как сказать word-у, что нужно попросту работать с текущим параграфом (а не с .paragraphs(23456)?

2 Ответ от viter.alex 11.01.2010 09:40:38

  • Как получить абзац, в котором находится курсор?
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Как получить абзац, в котором находится курсор?

Давайте для начала определимся с терминами. То, что в VBA называется Paragraph, на русский язык переводится как «абзац».
Что значит текущий абзац? В котором стоит курсор? Вот так:

Selection.Paragraphs.First

Лучше день потерять — потом за пять минут долететь!

3 Ответ от Денис 11.01.2010 18:11:39

  • Денис
  • майор
  • Неактивен
  • Зарегистрирован: 10.01.2010
  • Сообщений: 63

Re: Как получить абзац, в котором находится курсор?

Спасибо!
Именно то, что нужно.

Сообщений [ 3 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Похожие темы

  • Находится ли курсор в таблице?
  • Курсор поставил и автомтически выделяется текст-абзац
  • Получить номер первой страницы
  • Как получить номер главы (заголовка)
  • Как получить доступ к свойствам SP в word в VBA
  • Где находится Normal.dotm?
  • C#(или VBA) Как программно узнать в какой колонке находится символ?
  • Где находится Тезаурус Ворда и можно ли его изменять, дополнять?

Как получить абзац, в котором находится курсор?

Текстовым редактором Microsoft Word пользуются большинство работающих на компьютере людей, но многим хватает тех знаний, которые они получили, разбираясь с программой самостоятельно. Наш сайт о Microsoft Office Word даст ответ про: видеоуроки для начинающих как работать с макросами в excel word.
Такие пользователи даже не подозревают о множестве скрытых функций и возможностей  Ворда.

Форум Ворд Эксперт предназначен для продвинутых пользователей, дорожащих своим временем и желающих совершенствоваться. Наш сайт о Microsoft Office Word даст ответ про: функция сносок в ворде 2007.
Здесь вы найдете информацию по самым тонким настройкам программы, макросам и шаблонам.

У форума удобная структура, позволяющая быстро найти любую интересующую информацию. На портале о Microsoft Office Word вы узнаете про: ключи для 2007 офиса.
Самое основное вынесено в «Часто задаваемые вопросы», более нетривиальные проблемы настроек различных функций, редактирования, форматирования и оформления обсуждаются в подразделе «Настройки и Форматирования», а написанию шаблонов и макросов посвящен раздел «Автоматизация». Наш сайт о Microsoft Office Word даст ответ про: относительный путь в word.

Со своими проблемами вы можете обратиться в подраздел форума «Заявки на разработку», но возможно вам помогут готовые решения из одноименного раздела. Наш сайт о Microsoft Office Word даст ответ про: как сделать чтобы нумирация страниц в ворде начиналась не с первого листа.
Для общения администрацией форума выделена «Курилка».

Кроме того, на форуме приведен список литературы очень полезной для освоения программы и оптимизации работы с Вордом. Наш сайт о Microsoft Office Word даст ответ про: поиск и замена имени и файле.

I need find an specific text in my document and get paragraph number position

This is for Excel VBA

Sub exportardatos()
'Paso 1: Declare las variables
Dim Paragraphe As Object, WordApp As Object, WordDoc As Object, WordTable As Object, WordRange As Object
File = "C:UserslperDocumentsFormExp.docx"

 On Error Resume Next

    'creationsession Word
    Set WordApp = GetObject(class:="Word.Application")

    'Clear the error between errors
    Err.Clear
    If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

      If Err.Number = 429 Then
        MsgBox "Microsoft Word could not be found, aborting."
        GoTo EndRoutine
      End If

  On Error GoTo 0
    WordApp.Visible = True
    WordApp.Activate
    'open the file .doc
    Set WordDoc = WordApp.Documents.Open(File)


    'Word Enumerated Constants
    Const wdReplaceAll = 2
        WordApp.Documents("FormExp.docx").Activate
        Dim nParag As Long
        Set WordRange = WordApp.ActiveDocument.Paragraphs(1).Range

        For Each WordRange In WordDoc.StoryRanges
         With WordApp.Selection.Find
                .ClearFormatting
                .Replacement.ClearFormatting
                .Text = "Legal"
                .Wrap = wdFindContinue
                .Execute
                Do While .Execute = True
                nParag = WordRange(0, Selection.Paragraphs(1).Range.End).Paragraphs.Count
                MsgBox (nParag)
                Loop

         End With
        Next WordRange

EndRoutine:
        'Optimize Code
          Application.ScreenUpdating = True
          Application.EnableEvents = True

        'Clear The Clipboard
          Application.CutCopyMode = False

    'Set WordDoc = Nothing
    'Set WordApp = Nothing
MsgBox ("Ready")
End Sub

I get code error 438

Cindy Meister's user avatar

asked Jun 10, 2019 at 15:58

rafapmx's user avatar

1

Here’s a quick example of how to get the paragraph number. Notice that you don’t have to Activate the Word document to get this to work.

Public Sub Exportardatos()
    Dim filename As String
    filename = "C:UserslperDocumentsFormExp.docx"

    Dim wordApp As Object
    Set wordApp = GetObject(class:="Word.Application")
    If wordApp Is Nothing Then
        Set wordApp = CreateObject(class:="Word.Application")
        If Err.Number > 0 Then
            MsgBox "Microsoft Word cannot be found!", vbOKOnly + vbCritical
            Exit Sub
        End If
    End If

    Dim wordDoc As Object
    Dim searchRange As Object
    Set wordDoc = wordApp.Documents.Open(filename)
    Set searchRange = wordDoc.Range

    With searchRange.Find
        .ClearFormatting
        .Replacement.ClearFormatting
        .Text = "Legal"
        .Wrap = 0                     '=wdFindStop
        While .Execute(FindText:="Legal", Forward:=True)
            If .found Then
                Debug.Print "found in paragraph " & GetParNum(wordDoc, .Parent)
            End If
        Wend
    End With
End Sub

Function GetParNum(ByRef doc As Object, ByRef r As Object) As Integer
    '--- based on http://www.vbaexpress.com/kb/getarticle.php?kb_id=59
    Dim rParagraphs As Object
    Dim CurPos As Long

    r.Select
    CurPos = doc.Bookmarks("startOfSel").Start
    Set rParagraphs = doc.Range(Start:=0, End:=CurPos)
    GetParNum = rParagraphs.Paragraphs.Count
End Function

answered Jun 10, 2019 at 16:58

PeterT's user avatar

PeterTPeterT

8,1671 gold badge17 silver badges38 bronze badges

0

Добрый день.
Как в VBA Word достать номера абзацов? (отмечено красным на скрине)
У меня есть код, который обрабатывает таблицы в Word’e и берёт последний абзац перед каждой таблицей. Есть необходимость достать номер тоже.
Код:

Код
Sub KPI()
Dim wd As New Document
Set wd = ActiveDocument
tc = wd.Tables.Count
ReDim mas(1 To tc, 1 To 10)
For i = 1 To tc
    If i = 1 Then
        Set ps = wd.Range(0, wd.Tables(1).Range.Start - 1).Paragraphs
    Else
        Set ps = wd.Range(wd.Tables(i - 1).Range.End, wd.Tables(i).Range.Start - 1).Paragraphs
    End If
    For lp = ps.Count To 1 Step -1
        If Len(ps(lp)) > 5 Then
            mas(i, 1) = CleanString(ps(lp))
            Exit For
        End If
    Next
    For k = 1 To wd.Tables(i).Rows.Count
        mas(i, k + 1) = CleanString(wd.Tables(i).Cell(k, 2).Range)
    Next
Next
Set xl = CreateObject("Excel.Application")
xl.Visible = True
With xl.Workbooks.Add.Sheets(1)
    .Cells(1).Resize(tc, 10).Value = mas
    With .UsedRange
        .ColumnWidth = 27
        .Columns(2).ColumnWidth = 72
        .Columns(6).ColumnWidth = 72
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = True
    End With
End With
Set xl = Nothing
End Sub

VBA  в приложении к Word, Excel, Power Point 

 

Пакет Word в
сочетании с VBA предоставляет широкие возможности для работы с текстом или
фрагментами текста. Можно вызвать для обработки какой-либо абзац, предложение и
т.д.

Для доступа к
тем или иным фрагментам документа используют такие объекты, какSections (разделы), Paragraphs (абзацы), Sentences (предложения), Words (слова)
и др.

Пример:

Words(6) дает
возможность перейти к шестому
слову в документе

Sentences(11)
переход к одиннадцатому предложению

После перехода к
определенной части документа можно использовать объект Font,
позволяющий изменять свойства шрифта. Этот объект содержит методы, находящиеся
в панели меню “Формат | Шрифт”.

Объект Range является
базовым в операции редактирования. Его можно рассматривать как непрерывный
фрагмент текста (никак не связанный с выделенной областью), который не зависит
от положения курсора. Range включает в себя такие объекты, какWords (слова)
или Sentences (предложения); при обращении к ним сам
объект Rangeуказывать не нужно, тогда как для Sections (разделы)
или Paragraphs (абзацы) это делать необходимо.

Объект Range поддерживает
основные методы, которыми пользуются при форматировании текста (такие, как
“Копировать”, “Вставить”, “Вырезать”, команды меню “Формат”).

Для выполнения
заданий потребуется применение функций, работающих с символьными переменными.

Для знакомства с
примерами кодов целесообразно воспользоваться приемом, когда вы форматируете
часть документа в режиме записи макроса, а потом анализируете код макроса и
редактируете его.

Для записи
макроса необходимо:

1. Выбрать в меню “Сервис | Макрос | Начать запись”.

2. Ввести в окне “Запись макроса” в поле “Имя макроса” имя нового макроса.

3. Выбрать в списке “Макрос доступен для” шаблон или документ, в котором
будет храниться макрос.

4. Ввести описание макроса в поле “Описание”.

5. Ввести в поле “Назначить макрос” кнопку “Панели” (для назначения макросу
кнопки панели инструментов или команды меню); кнопку “Клавишам” (для
назначения макросу сочетания клавиш); если макросу назначение не требуется,
нажмите кнопку “OK”. Если в процессе работы вы часто используете какой-либо
макрос, то целесообразно назначить ему кнопку или сочетание клавиш.

6. Выполнить действия, которые нужно включить в макрос.

Следует помнить, что для записи действий надо использовать клавиатуру,
поскольку действия, произведенные с помощью мыши, не записываются.

7. Нажать после записи макроса кнопку “Остановить запись”.

Существует одна особенность при сохранении готового документа Word, в
котором находятся макросы и процедуры. Если вы вспомните работу с макросами в
Excel, то при открытии готового документа там всегда задается вопрос:
“Отключать макросы при открытии или нет?”. И если вы укажете, что макросы надо
отключить, то подготовленные кнопки работать не будут.

В редакторе Word, в отличие от Excel, установлена сильная защита от
макросов (макросы рассматриваются как вирусы), и при повторном открытии одного
и того же документа, в котором все программы и макросы работали, запроса на
включение или отключение макросов не будет, и работать также ничего не будет.

Поэтому при сохранении документа в Word вы должны выполнить следующую
последовательность действий:

1. Выбрать “Файл | Сохранить как | Сервис”. Появится диалоговое окно
“Сохранение документа”.

2. Выбрать в меню “Сервис” пункт “Параметры безопасности”. Появится
диалоговое окно “Безопасность”.

3. Щелкнуть по кнопке “Защита от макросов”, чтобы изменить уровень
безопасности файла (по умолчанию установлен Высокий уровень
безопасностипоэтому при
повторном открытии файла ваши программы выполняться не будут).

4. Выбрать в появившемся
диалоговом окне на закладке “Уровень безопасности ”Средний или Низкий уровень
безопасностиПри выборе Среднего уровня безопасности
при открытии документа будет появляться запрос на включение или отключение
макросов. Для того чтобы программы и макросы в документе работали, надо выбрать
“Не отключать макросы”.

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

5. Перейти на закладку “Надежные источники” и включить флажок “Доверять
доступ к Visual Basic Project”.

6. Сохраните документ.

Практическая
работа №1 “Работа в Wоrd”

Спроектировать кнопки, при помощи
которых можно провести разбор предложения. При установке курсора на найденное
слово и нажатии на соответствующую клавишу слово должно окрашиваться в
определенный цвет и подчеркиваться.

Порядок работы.

1. Набрать текст в редакторе
WORD.

2. Выбрать в меню “Сервис |
Макрос | Начать запись”.

3. Дать макросу имя
(например, “Имя_Существительное”).

4. Ввести описание макроса в
поле “Описание”.

5. Определить в поле
“Назначить макрос” способ, с помощью которого будет вызываться макрос (кнопка
или сочетание клавиш).

6. Выполнить действия,
которые нужно включить в макрос.

В нашем случае
последовательность действий будет такая: установить курсор перед любым словом;
выделить это слово; установить цвет шрифта — красный, одинарное подчеркивание.

Не забывайте, что для записи
действий надо использовать клавиатуру!

7. Нажать после записи
макроса кнопку “Остановить запись”.

8. Выполнить те же действия
для определения сказуемого (только цвет шрифта установить зеленый и задать
двойное подчеркивание).

9. Подготовить кнопку “CommandButton1”
на рабочем листе выше текста, назвать ее “Подлежащее”.

10. Просмотреть записанную
программу, скопировать ее и переписать через режим написания программы Исходный
текст 
в кнопку “Подлежащее”.

11. Проделать те же действия
и для кнопки “Сказуемое”.

12. Задать уровень
безопасности документа.

13. Сохранить работу. Она
будет выглядеть примерно так:

Практическая работа № 9–2
“Количество абзацев в документе”

Рассмотреть документ,
который состоит из нескольких абзацев. Задача заключается в том, чтобы
программно определить количество абзацев в документе; озаглавить текст; в конце
документа вывести сообщение о количестве абзацев.

Мы знаем, что в программе
Word количество абзацев определяется по символу ¶, который появляется каждый
раз после нажатия на клавишу Enter .
Но проверять и подсчитывать количество этих символов нецелесообразно, поскольку
существуют стандартные методы. Вспомним, что документ, с которым мы работаем,
называется активным документом, и в программе к нему будем обращаться ActiveDocument.

Возьмем для примера текст об
Интернете, а именно — о передаче информации и протоколах. Текст содержит 6
абзацев, судя по количеству специальных символов.

Порядок работы.

1. Вызвать панель элементов
управления (“Вид | Панели инструментов | Элементы управления”).

2. Подготовить кнопку
“CommandButton1” на рабочем листе ниже текста.

3. Переименовать кнопку в
“Количество абзацев”. Для этого на панели элементов управления вызовите
“Свойства”. Появится панель “Properties”. Выберите свойство “Caption” и в правой
колонке наберите название.

4. Придать кнопке свойство обтекания по контуру, чтобы
кнопку можно было перемещать по листу. Для этого на объекте кнопка следует
вызвать контекстно-зависимое меню и выбрать “Формат объекта”. Появится
диалоговое окно “Формат элемента управления”. На вкладке “Положение” выбрать
вариант “По контуру”.

5. Выбрать в
контекстно-зависимом меню этого объекта команду “Исходный текст” или два раза
щелкнуть по кнопке. Откроется редактор режима написания программы.

Алгоритм выполнения задания:

1. Объявить переменные:

a) k — переменная для
подсчета количества абзацев в документе;

b) Text — переменная для
формирования текста-ответа о количестве абзацев;

c) ZAGOLOVOK — переменная,
которая определит область для вывода заголовка.

2. Определить количество
абзацев с помощью метода Count объекта Paragraphs.

3. Сформировать текст вывода
сообщения.

4. Вставить дополнительный
абзац после последнего абзаца документа для вывода сообщения.

5. Вывести текст-сообщение в
подготовленный абзац.

6. Сформировать область для
вывода заголовка “Протоколы”.

7. Вывести название
“Протоколы”.

8. Установить шрифт и размер
заголовка.

9. Вставить символ конца
абзаца для того, чтобы название и начало текста были на разных строках.

Можно дополнить эту задачу.
Например, сообщение о количестве абзацев пусть выводится красным цветом и 14-м
размером шрифта. Этот фрагмент учащиеся могут выполнить самостоятельно.
Обратите внимание, что место этого фрагмента программы очень важно: он должен
располагаться только в этой части программы, а не после работы с заголовком.

Результат выполнения
программы представлен на рисунке.

Строка программы

Пункт алгоритма

Public Sub
CommandButton1_Click()

Начало

Dim k As
Integer

1a

Dim Text
As String

1b

Dim
ZAGOLOVOK As Range

1c

Dim
REZULTAT As Range

Эта часть
для выполнения дополнительного задания

k =
ActiveDocument.Paragraphs.Count

2

Text =
«Количество абзацев в этом документе — » & k &
«.»

3

ActiveDocument.Paragraphs(k).Range.InsertParagraphAfter

4

ActiveDocument.Paragraphs(k + 1).Range.InsertBefore Text

5

Set REZULTAT =
ActiveDocument.Paragraphs(k + 1).Range

With REZULTAT .Font.Name =
«Arial» .Font.Size = 14

.Font.ColorIndex = wdDarkRed
End With

Эта часть
для выполнения дополнительного задания

Set ZAGOLOVOK = ActiveDocument.Range(Start:=0, End:=0)

6

With
ZAGOLOVOK

Начало
структуры With

.InsertBefore
«Протоколы»

7

.Font.Name
= «Arial»

8

.Font.Size
= 24

8

.InsertParagraphAfter

9

End With

Конец
структуры With

End Sub

Конец

Практическая работа № 2 “Количество букв а (русских) в абзаце”

Эта практическая
работа выполняется с тем же документом, что и работа № 9–2 (с документом,
который состоит из нескольких абзацев). Задача заключается в том, чтобы
программно определить номер абзаца, в котором будет происходить подсчет
букв а; подсчитать их количество; в конце документа (или после
абзаца, в котором происходил подсчет) вывести сообщение о количестве букв.

Порядок
работы.

1. Вызвать
панель элементов управления “Вид | Панели инструментов | Элементы управления”.

2. Подготовить
кнопку на рабочем листе ниже текста “CommandButton2”.

3. Переименовать
кнопку в “Количество букв а в абзаце”.

4. Придать
кнопке формат обтекания по контуру, чтобы ее можно было перемещать по листу.

5. Выбрать в
контекстно-зависимом меню этого объекта пункт “Исходный текст” или
два раза щелкнуть по кнопке (мы попадем в редактор в режим написания
программы).

Алгоритм
выполнения задания следующий:

1. Объявить
переменные:

a) b — строковая
переменная для размещения в ней выбранного абзаца в документе;

b) k —
переменная для хранения количества абзацев в документе;

c) dl —
переменная для хранения длины абзаца;

d) Text —
переменная для формирования текста-ответа о количестве символов а в
абзаце;

e) Nab —
переменная для ввода номера абзаца, в котором будет происходить подсчет;

f) I —
переменная для организации цикла;

g) kol —
переменная для подсчета символов а;

h) REZULTAT —
переменная, которая определит область для вывода заголовка.

2. Ввести номер
абзаца, используя диалоговое окно.

3. Определить
количество абзацев в документе.

4. Проверить
существование введенного номера абзаца и выдать сообщение об ошибке, если
такого нет.

5. В переменную
b занести текст всего абзаца.

6. Определить
длину абзаца.

7. Организовать
цикл по нахождению символа а.

8. Сформировать
текст вывода сообщения.

9. Вставить
дополнительный абзац после последнего абзаца документа для вывода сообщения.

10. Вывести
текст-сообщение в подготовленный абзац.

11. Установить
определенный шрифт, размер и цвет текста-сообщения.

Строка
программы

Пункт
алгоритма

Private Sub CommandButton2_Click() Начало программы

Начало

Dim b As
String

1a

Dim k As
Integer

1b

Dim dl As Long

1c

Dim Text As
String

1d

Dim Nab As
Integer

1e

Dim i As Long

1f

Dim REZULTAT
As Range

1g

kol = 0

Nab = InputBox(«Введите номер абзаца», «Подсчитаем буквы
а»)

2

k =
ActiveDocument.Paragraphs.Count

3

If Nab > k
Then

4

MsgBox «В
тексте нет такого абзаца», 48, «Предупреждение»

4

End

4

End If

4

b = ActiveDocument.Paragraphs(Nab).Range

5

dl = Len(b)

6

For i = 1 To
dl

7

If Mid(b, i, 1) = «а» Or Mid(b, i, 1) =
«
А» Then kol = kol + 1

7

Next i

7

MsgBox kol

Отладочная
печеть

Text =
«Количество букв а в абзаце с номером «& Nab
& » — » & kol & «.»

8

ActiveDocument.Paragraphs(k).Range.InsertParagraphAfter

9

Set REZULTAT = ActiveDocument.Paragraphs(k +
1).Range

With REZULTAT

.InsertBefore
Text

10

.Font.Name =
«Arial»

11

.Font.Size =
14

11

.Font.ColorIndex
= wdDarkRed

11

End With

End Sub

Конец
программы

Результат
выполнения представлен на рисунке.

Практическая работа № 3 “Предложения в абзаце”

Эта практическая работа выполняется с тем же документом, что и работа № 9–2
и 9–3 (или с любым текстом, который состоит из нескольких абзацев). Задача
заключается в том, чтобы программно определить номер абзаца, в котором
наибольшее количество предложений; выделить сообщение о номере абзаца и о
количестве предложений, используя диалоговое окно; выделить этот абзац другим
цветом.

Порядок работы.

1. Вызвать панель элементов управления “Вид | Панели инструментов |
Элементы управления”.

2. Подготовить кнопку “CommandButton3” на рабочем листе ниже текста.

3. Переименовать кнопку в “Предложения в абзаце”.

4. Придать ей формат обтекания по контуру, чтобы кнопку можно было
перемещать по листу.

5. Выбрать в контекстно-зависимом меню этого объекта пункт “Исходный текст”
или два раза щелкнуть по кнопке (попадаем в редактор в режим написания
программы).

Алгоритм выполнения задания следующий:

1. Объявить переменные:

a) k — переменная для хранения количества абзацев в документе;

b) kol — переменная для хранения количества предложений в абзаце;

c) i — переменная для организации цикла;

d) Mas() — массив для занесения количества предложений в абзацах;

e) Otvet — переменная для формирования текста-ответа с результатами;

f) Max — переменная для хранения максимального количества предложений в
абзаце;

g) ind — переменная для хранения номера абзаца с максимальным количеством
предложений;

h) REZULTAT — переменная, которая определит область абзаца, к которому надо
применить элементы форматирования.

При объявлении массива нам неизвестно количество абзацев в документе.
Поэтому объявление массива производим в два этапа: 1-й этап — объявление без
размера Dim Mas() As Integer; 2-й этап — после определения количества абзацев в
документе переопределяем размерность массива ReDim Mas(k) As Integer. Такие
массивы называются динамическими.

Кроме этого, чтобы индекс массива начинался с 1, а не с 0 (для удобства
работы), в редакторе в начале листа с процедурой укажите команду “Option Base
1”.

2. Определить количество абзацев в документе.

3. Переопределить размерность массива.

4. Организовать цикл по определению количества предложений в абзацах с
занесением их размерности в массив и сохранением порядкового номера в массиве,
что соответствует номеру абзаца.

5. Организовать цикл по нахождению наибольшего количества предложений в
абзаце (работа со сформированным массивом) по стандартному алгоритму.

6. Сформировать текст вывода сообщения.

7. Вывести в диалоговом окне сообщений результат.

8. Определить область абзаца для форматирования.

9. Установить определенный шрифт, размер и цвет текста-абзаца с
максимальным количеством предложений.

Строка программы

Пункт алгоритма

Private Sub CommandButton3_Click()

Начало программы

Dim k As Integer

1a

Dim kol As Integer

1b

Dim i As Integer

1c

Dim Mas() As Integer

1d

Dim otvet As String

1e

Dim Max As Integer

1f

Dim ind As Byte

1g

Dim REZULTAT As Range

1h

kol = 0: k = 0

Обнуление переменных

k = ActiveDocument.Paragraphs.Count

2

ReDim Mas(k) As Integer

3

Rem Начало программы

Комментарий

For i = 1 To k

4

kol =
ActiveDocument.Paragraphs(i).Range.Sentences.Count

4

Mas(i) = kol

4

Next i

4

Max = Mas(1)

Подготовительная часть перед циклом

ind = 1

For i = 2 To k

Начало цикла

If Mas(i) > Max Then

5

Max = Mas(i)

5

ind = i

5

End If

5

Next i

Конец цикла

Rem Вывод результатов

Комментарий

otvet = «Самое большое количество предложений в «

& ind & » абзаце — » & Max

6

MsgBox otvet

7

Set REZULTAT =
ActiveDocument.Paragraphs(ind).Range

8

With REZULTAT

Начало структуры With

.Font.Name = «Arial»

9

.Font.Size = 12

9

.Font.ColorIndex = wdDarkRed

9

End With

End Sub

Конец программы

Диалоговое окно с результативным сообщением будет выглядеть так:

Результат выполнения задания представлен на рисунке.

Практическая работа №4 “Слова-палиндромы”

Задача заключается в том, чтобы программно определить,
есть ли в тексте слова-палиндромы и выделить эти слова другим цветом.

Порядок работы.

1. Подготовить текст (можно придумать рассказ или
стихотворение со словами-палиндромами ШАЛАШ, КАЗАК, НАГАН, МАДАМ и т.д.).

2. Вызвать панель элементов управления “Вид | Панели
инструментов | Элементы управления”.

3. Подготовить кнопку “CommandButton1” на рабочем
листе ниже текста.

4. Переименовать кнопку в “Палиндромы”.

5. Придать созданной кнопке формат обтекания по
контуру, чтобы ее можно было перемещать по листу.

6. Выбрать в контекстно-зависимом меню этого объекта
пункт “Исходный текст” или два раза щелкнуть по кнопке.

Алгоритм выполнения задания следующий:

1. Объявить переменные:

a) Slovo — переменная для последовательного хранения
выделенных слов;

b) L — переменная для хранения длины слова;

c) M — переменная, определяющая половину длины
выделенного слова;

d) K — переменная для формирования 1-й половины слова;

e) D — переменная для формирования 2-й половины слова;

f) Kol — переменная для хранения количества абзацев в
документе.

2. Определить количество абзацев в документе.

3. Определить область, в которой надо искать
слова-палиндромы, — это все абзацы текста.

4. Организовать цикл по выделению слов в области
определения.

5. Присвоить выделенное слово строковой переменой.

6. Определить длину выделенного слова.

7. Проверить длину слова. Если она равна 1, то слово
проверять нет смысла.

8. Организовать цикл, чтобы определить, является ли
слово палиндромом.

9. Изменить цвет букв у слова-палиндрома.

Строка программы

Пункт алгоритма

Private Sub CommandButton1_Click()

Начало программы

Dim slovo As String

1a

Dim L As Byte

1b

Dim M As Byte

1c

Dim K As String

1d

Dim D As String

1e

Dim kol as byte

1f

kol = ActiveDocument.Paragraphs.Count

2

Set myRange =
ActiveDocument.Range

(ActiveDocument.Paragraphs(1).Range.Start,

ActiveDocument.Paragraphs(kol).Range.End)

3

For Each aword In
myRange.Words

4 (Начало внешнего цикла)

slovo = aword.Text

5

L = Len(slovo)

6

If L <= 1 Then GoTo M1

7

M = Int(L / 2)

Подготовка к проверке на палиндром

For I = 1 To M

8 (Начало вложенного цикла)

K = Mid$(slovo, I, 1)

8

D = Mid$(slovo, L — I + 1,
1)

8

If K <> D Then GoTo M1

8

Next I

8 (Конец вложенного цикла)

aword.Font.Size = 14

9

aword.Font.ColorIndex = wdDarkBlue

9

M1: Next aword

4 (Конец внешнего цикла)

End Sub

Конец программы

В результате ыполнения программы слова-пасиндромы
будут ыделены синим цветом.

Литератрура:

1.      

Газета «Информатика» Издательского
дома «Первое сентября» № 1-5 2006 г.

2.      

Газета «Информатика» Издательского
дома «Первое сентября» № 7 2006 г

3.      

Газета «Информатика» Издательского
дома «Первое сентября» № 9 2006 г.

4.      

Газета «Информатика» Издательского
дома «Первое сентября» № 10 2006 г.

Like this post? Please share to your friends:
  • Vba word объект надпись
  • Vba word объект application
  • Vba word работа с файлами
  • Vba word объединение ячеек таблицы
  • Vba word примеры кода