Меню

Как создать абзац и добавить в него текст



Часть II

Программирование на VBA в Word

Глава 5

Вывод текста в документ Word

5.1. Основные объекты Word

Дополнительно ко всем возможностям программирования на VBA, рассмотренным в части I, можно добавить возможности вывода всех результатов вычислений, преобразований, сообщений в документ Word, с возможностью дальнейшего отправления на печать. Для этого необходимо рассмотреть основные объекты приложения Word.

Ключевым в объектной модели Word является объект Application, так как он содержит все остальные объекты Word. Его элементами на разных уровнях иерархии являются около 180 объектов. Сам корневой объект Application имеет более сотни элементов: свойств, методов и событий.

Свойства объекта Word.Application

Свойства любого объекта делятся на две группы: свойства-участники (объекты) и терминальные свойства (обычные переменные VBA).

Единую систему организации панелей меню и инструментальных кнопок обеспечивает объект CommandBars, справок – Assistant, поиска – FileSearch.

Центральными объектами Word являются коллекции Documents и Templates, точнее составляющие их элементы, сам документ и шаблоны.

Рассмотрим объекты второго плана.

Объект AutoCorrect поддерживает работу по автоматической коррекции набираемых текстов. Его возможности эквивалентны команде Автозамена меню Сервис.

Объект Browser позволяет перемещать точку вставки, указывающую на объекты в документе.

Коллекция объектов Dialogs представляет совокупность диалоговых окон, встроенных в Word. Добавлять новые или удалять элементы этой коллекции программным путем нельзя. Но соответствующие окна можно открыть и показать на экране дисплея и тем самым организовать диалог пользователем по теме, заданной соответствующим окном.

Три объекта, связанные с проверкой грамматики и орфографии: Languages, Dictionaries, SpellingSuggestions, – позволяют установить нужный язык, выбрать словарь, в том числе пользовательские словари, а также работать со списком слов, предлагаемых для исправления при обнаружении ошибки правописания. Команды Правописание и Язык меню Сервис предоставляют аналогичные, функциональные возможности при работе с документом вручную.

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

Работа с документами и класс Document

Когда открывается приложение, создается коллекция документов Documents, содержащая все открытые документы. В начальный момент коллекция содержит минимум один новый или ранее существовавший документ. Новый документ добавляется методом Add, а уже существующий – методом Open объекта Documents. Чтобы добраться до нужного документа, достаточно указать его индекс – имя файла, хранящего документ, или его порядковый номер в коллекции. Для той же цели можно использовать и метод Item, но обычно он опускается. Метод Save позволяет сохранить документ, а метод Close, сохраняя документ в файле, закрывает его и удаляет из коллекции.

Глобальное свойство Dialogs возвращает коллекцию диалоговых окон. Константа wdDialogFileOpen задает конкретное диалоговое окно – объект класса Dialog.

Классы, задающие структуризацию текста документа

Текст – это основа большинства документов. Его можно структурировать, оперируя различными единицами при решении тех или иных задач преобразования. Минимальной единицей текста обычно является символ. Кроме этого, существуют следующие единицы: слова, предложения, абзацы, а также более крупные образования: страницы, параграфы, главы.

Классы Characters, Words, Statements, Paragraphs, Sections позволяют работать с последовательностями (коллекциями) символов, слов, предложений, абзацев и разделов. Самой крупной единицей после абзаца выступает раздел. Элементом коллекций Characters, Words и Statements является объект класса Range. Объект Range позволяет работать как с одним элементом, так и с произвольной последовательностью элементов. Документы, поддокументы, абзацы, разделы – все они имеют метод или свойство Range, возвращающее интервал, связанный с объектом. Поэтому работа с текстом так или иначе ведется через методы и свойства объекта Range.

События объекта Document

Объект Document может реагировать на три события, возникающие в результате действий пользователя.

События объекта DocumentДокумент и его части

Рассмотрим основные классы, определяющие структуру документа.

1. Subdocuments (Subdocument) – коллекция и сам поддокумент. Есть некоторый разумный предел размера одного документа. Если в документе больше 10–20 страниц, работать с ним становится неудобно. В этом случае в нем выделяют главный документ и поддокументы. Главный документ в этом случае имеет коллекцию поддокументов, каждый из них является, по сути, документом, с которым можно работать независимо.

Метод AddFromRange класса SubDocuments создает поддокумент, выделяя из главного документа область, заданную параметром Range.

2. Tables (Table), TablesOfAuthoritiesCategories (T.O.A.C), TablesOfAuthorities (TableOfAuthorities), TablesOfContents (TablesOfContent), TablesOfFigures (TablesOfFigure). Класс Table определяет «обычные» таблицы с произвольным количеством строк и столбцов и произвольным заполнением полей. Остальные классы задают таблицы специального вида.

3. Shapes(Shape), InlineShapes(InlineShape) – эти две коллекции с их элементами позволяют добавлять в документ рисунки, но не только их. ActiveX– и OLE-объекты также являются элементами этих коллекций. Элементы этих двух коллекций отличаются тем, как они привязаны к документу: первые могут свободно перемещаться, вторые жестко привязаны к заданной области документа.

4. Lists(List), ListParagraphs(ListParagraph), listTemplates (ListTemplate) – списки удобно вводить в документ, когда имеешь дело с перечислением. Списки можно оформлять в соответствии с шаблоном. Существуют две группы шаблонов: нумерованные списки и списки-бюллетени. Коллекция ListTemplates содержит шаблоны оформления списков, а класс ListTemplate описывает конкретный шаблон. Шаблон применяется к списку абзацев и придает ему структуру, заданную шаблоном. Коллекция Lists содержит те списки документа (списки абзацев), что оформлены как нумерованные списки или списки-бюллетени. Коллекция ListParagraphs представляет список абзацев всех списков документа. Свойством ListParagraphs, которое возвращает объект соответствующего класса, обладает не только документ, но и объекты List и Range. Так что при наличии списка – объекта List можно выделить список абзацев. Чаще приходится выполнять обратную операцию – применять к списку абзацев один из возможных шаблонов, придав ему «настоящую» структуру списка. Тогда используют объект ListFormat.

Читайте также:  Обзор Hytera TC 508 от ЗАО Вива Телеком

5. Comments(Comment), Bookmarks(Bookmark), FootNotes (FootNote), EndNotes(EndNote), Fields(Field) – эти коллекции и их элементы отражают независимые, но близкие по духу понятия. Это части документа, косвенно связанные с ним. При нормальном просмотре документа они могут быть и не видны.

Коллекция comments и класс comment задают комментарии. Комментарии, как известно, вводятся для пояснения тех или иных терминов или понятий документа. Формально они приписываются некоторой области – объекту range.

Большой документ, к отдельным частям которого приходится часто обращаться, стоит снабдить закладками. Коллекция bookmarks задает все закладки данного документа.

Еще один способ комментирования – сноски. Они могут быть двух видов: подстраничные (внизу страницы) и концевые (в конце документа). Первые собраны в коллекцию footnotes, вторые – endnotes.

6. Fields (Field) – эта коллекция позволяет работать с полями документа. Одна из особенностей полей состоит в том, что их значения обновляются автоматически в зависимости от изменившихся внешних условий или контекста.

7. Story Ranges (Range) – эта коллекция представляет совокупность частей документа, называемых фрагментами (Story). Количество различных фрагментов документа фиксировано. Нельзя добавлять элементы в эту коллекцию обычным способом, используя метод Add. Фрагменты появляются в коллекции, когда создается соответствующая часть документа.

Фрагменты имеют тип, задаваемый константами из перечисления wdStoryType. Главный фрагмент – текст документа, тип которого задается константой wdMainTextStory. Комментарии, ссылки, колонтитулы составляют фрагменты других типов, т. е. сам фрагмент является объектом Range. Так что благодаря фрагментам можно, например, работать с коллекцией комментариев как с единой областью.

8. Variables (Variable) – с документом можно связать коллекцию переменных типа Variant. Это важная для программистов коллекция, так как время жизни переменных, в нее входящих, совпадает со временем жизни документа. Тем самым появляется возможность сохранять информацию о работе той или иной процедуры между сеансами. Например, можно иметь счетчики, подсчитывающие число вызовов макроса, и в зависимости от этого по-разному определять его дальнейшую работу.

Объекты Range и Selection

Объект Document имеет метод Range, возвращающий объект Range, и метод Select, создающий объект Selection. Метод Range – это функция, возвращающая как результат объект Range; метод Select – это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Объект Range имеет метод Select, превращающий область объекта Range в выделенную. Тем самым метод Select определяет новый объект Selection. Симметрично, объект Selection имеет свойство Range, возвращающее объект Range, соответствующий выделенной области.

Большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection.

Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range:

Объекты Range и Selection позволяют выполнять основные операции над текстом: «выделить», «добавить», «заменить», «удалить». У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка.

Выделение

Выделить некоторую часть текста по существу означает определить объект Range или Selection. Объекты задают некоторую область в тексте документа, а их свойства Start и End позволяют установить начало и конец этой области. Меняя значения свойства, можно задать нужную область выделения.

Move является основным методом перемещения точки вставки. Остальные методы этой группы – в той или иной степени его модификации. Метод Move(Unit, Count) сжимает область в точку, стягивая ее в начало или конец, а затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, a Count – количество этих единиц (по умолчанию 1). Знак переменной Count задает направление стягивания и перемещения. Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные – стягивание в начало и перемещение назад. Чистое стягивание без перемещения точки вставки задается как перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable.

Методы перемещения на сам текст не влияют – лишь изменяют область, заданную объектами Range и Selection. Поэтому эти методы применимы только к переменным типа Range, но не к фиксированным областям. Например, запись

не имеет эффекта, поскольку область первого абзаца – вещь неизменяемая. Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно тем самым расширяя область.

Удаление текста

Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection. Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count.

Вставка текста

Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр text типа string задает текст, вставляемый до или после области, заданной объектами range или selection. После вставки текста область автоматически расширяется, включая в себя добавляемый текст.

Читайте также:  Стандарты определяющие размеры приводных роликовых цепей

Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text). Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. Совсем иное дело – методы вставки, которые далеко не безопасны. При вставке внутрь области, например при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области.

Работа с буфером

Метод Сору, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод cut, действуя аналогично, должен бы заодно и удалять объект. Но сам объект не удаляется – только стягивается в точку, так что над ним возможны дальнейшие операции.

Иногда в буфер копируют не текст, а его формат. Этим занимается метод CopyFormat, копирующий формат по первому символу объекта selection. Если этот символ – метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект selection.

Метод Paste позволяет поместить («приклеить») содержимое буфера в область, заданную объектами Range и Selection. Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection, предварительно стянутым в точку вставки. Метод PasteFormat применяет форматирование, хранящееся в буфере, к объекту Selection.

Например, создадим макрос, который вставляет список «урок, экзамен, сдал!», копирует его и помещает еще раз на лист.

Sub Макрос1()

With Selection.ParagraphFormat

Selection.TypeText Text:=»Работа с текстом:»

Selection.TypeParagraph

With

ListGalleries(wdBulletGallery).ListTemplates(1)._ListLevels(1)

End With

End With

ListGalleries(wdBulletGallery).ListTemplates(1).Name = «»

Selection.Range.ListFormat.ApplyListTemplate

ListTemplate:=ListGalleries(wdBulletGallery).ListTemplates(1), ContinuePreviousList:=False, ApplyTo:= _wdListApplyToWholeList, DefaultListBehavior:=wdWord10ListBehavior

Selection.TypeText Text:=»урок»

Selection.TypeParagraph

Selection.TypeText Text:=»экзамен»

Selection.TypeParagraph

Selection.TypeText Text:=»сдал»

Selection.TypeParagraph

Selection.Range.ListFormat.RemoveNumbers

NumberType:=wdNumberParagraph

Selection.TypeParagraph

Selection.Font.Bold = wdToggle

Selection.Font.Italic = wdToggle

Selection.TypeText Text:=»Работа завершена!»

Selection.WholeStory

Selection.Copy

Selection.PasteAndFormat (wdPasteDefault)

Selection.PasteAndFormat (wdPasteDefault)

End Sub

5.2. Форматирование документа

Наиболее важной особенностью работы на VBA в Word является вставка текста в документ при работе с приложениями. Для этого служат объекты Range и Selection, которые являются главными для практически любых операций, которые можно выполнять с помощью Word VBA. Некоторые из этих действий можно применять к документам в целом, но в общем случае вам необходим диапазон или выделенная область, прежде чем вносить изменения. Мы, однако, рассмотрим действия с документом при его создании.

Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, таблица, ячейка таблицы, комментарий и т. д. определяют диапазоны. Например, для того чтобы вставить некоторый текст в уже существующий документ, необходимо прописать код:

Причем данная строка будет расположена в конце существующего параграфа. С другой стороны, используя объект Selection, можно также вставить некоторый текст в документ, используя метод Add и присвоение свойства Text объекту Selection:

If Documents.Count = 0 Then Documents.Add

Selection.Text = «Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, « + TextBox1.Text +», и отвечает запросам всех программистов!»

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

Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Светлана, и отвечает запросам всех программистов!

Здесь имя Светлана, например, считано с текстового поля некоторой формы, имеющей всего одно поле ввода для имени и кнопку «Вывод текста» (рис. 64).

Рис. 64. Форма ввода данных

При работе с текстом на рабочем листе Word необходимо знать следующие коды:

Источник

Как создать абзац и добавить в него текст

Коллеги, прошу прощения, только осваиваю особенности программного управления документом Word. Тривиальная, казалось бы, задача: вставить в закладку текст, добавить новый абзац и в него впечатать новый текст, но.
Текст в закладку вставляется на-ура, а вот дальше:
выделяю закладку, но новый абзац не создается, текст тоже вставляться не хочет (завершение выполнения с ошибкой). В чем причина?
Код работает из-под Excel, библиотека Word подключена

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Создать файл и добавить в него текст
как и в прошлой теме. дописываю свою программу. теперь она должна создать фаил под названием.

Как открыть созданный файл и добавить в него текст?
Программа по нажатию кнопки создается папка а в ней файл, имя файла с поля edit1, имя папки с поля.

Как создать архив и добавить в него файлы (ZipForge)?
пытаюсь разобраться с ZipForge, нужно заархивировать несколько файлов и папок. не могу даже.

Сообщение от zics

zics, если работаешь с вордом извне, то следует отказаться от использования Selection и везде использовать Range . В 95% случаев этого достаточно.
Ну и помнить, что в Excel тоже есть Range , поэтому обращаться через пространство имён.

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

Все попытки использовать TypeParagraph и TypeText ни к чему не привели.
Если не сложно, подскажите вариант кода, как реализовать простую, казалось бы, задачу:
1. Вставить в закладку документа Word текст (это удается без проблем)
2. Добавить новый пустой абзац после введенного текста на шаге 1
3. Добавить в этот абзац текст.

Как это сделать без Selection, а используя только Range?

Макрос запускается из Экселя.

Реализовал предложенную ViterAlex идею, сработало! Вероятно, реализация не самая оптимальная. Буду рад, если кто-нибудь предложит альтернативу

Сообщение от Казанский
Сообщение от zics
Сообщение от ViterAlex

Пока так и не смог реализовать задачу, даже при активной помощи (спасибо им большое) знатоков.
Задача: Макрос, который запускается из Excel, должен в закладку имеющегося файла Word впечатать несколько строк текста, подгружать рисунок, вставлять таблицу (всё с нового абзаца), и так в цикле несколько раз. Все данные (текст, таблица) берутся из Excel, рисунок — из папки.

Читайте также:  Замена платных программ для пользователей Windows аналогичными бесплатными

Проблема в том, что вставленная таблица выходит за пределы MyRange, что не позволяет после таблицы добавлять новые строки текста.

Добавлено через 6 минут
т

Сообщение от zics

То есть надо таблицу вставить именно в MyRange, чтобы потом можно было к ней потом обратиться, и добавлять новый текст дальше

Добавлено через 2 минуты
А если кто-нибудь посоветует источник, где расписаны основные моменты работы с VBA Word, буду признателен

Сообщение от zics
Сообщение от shanemac51

всё верно, угадали. Хочу научить Excel самостоятельно создавать отчеты в Word. Споткнулся на таблицах, прошу помощь зала

Добавлено через 3 минуты

Сообщение от zics
Сообщение от zics

а я как-то приладилась формировать НТМ-отчеты программно формировать(90-95%) ото всюду(ексель,аксесс, фохпро. ), обычно использую стандартные теги(30-40), без наворотов

со временем накопились стандартные куски кода для формирования СОГЛАСОВАНО/УТВЕРЖДАЮ, подписей.

удобно
—можно просто смотреть в броузере
—хорошо открывается в ворде для печати(автоподбор таблиц по ширине окна, альбомная/книжная), при необходимости пересохраняю в ДОС/ДОСХ-формат
—да и ексель с небольшой руганью открывает

Сообщение от shanemac51
Сообщение от zics

каждый подстраивается под свой уровень ЛЕНИ
лично мне лень форматировать ворд-шаблон, расставлять закладки в нем
потом в аксесс/ексель писать код для заполнения сих закладок, при этом ломая голову над вставкой таблиц/рисунков

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

закладки(вернее замены через найти /заменить) применяю в более художественных шаблонах, слияние применила видимо 1 -2 раза в самом начале работы с ворд-шаблонами, затем перешла на замены

Источник

Vba word вставить абзац после таблицы

Visual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.

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

Например, можно автоматизировать обработку содержимого ячеек в Excel или ускорить исправление ошибок оформления документов в Word. Написание макросов для Excel пользуется популярностью у продвинутых пользователей Microsoft Office. Кому-то удается научиться этому самостоятельно, а кто-то записывается на курсы Excel в Алматы или в своем городе.

Созданные программы на языке VBA называются макросами.

Попробуем создать простой макрос обработки текста в Word.

Для начала стоит понять какая последовательность действий прописывается в макрос с помощью макрорекордера (инструмент для записи ваших действий с помощью кода VBA).

Для примера найдем все точки в тексте и заменим их на запятые. Заходим на вкладку Разработчик -> Код -> Запись макроса.

Теперь перейдем на вкладку Главная -> Редактирование -> Заменить. Вводим «.» в поле Найти и «,» в поле Заменить на. Жмем Заменить все.

Теперь останавливаем запись макрорекордера командой Разработчик -> Код -> Остановить запись.

Это все! Ваш первый макрос готов. Давайте же посмотрим на него. Заходим Разработчик -> Код -> Visual Basic. В окне редактирования кода появится такая штука:

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

Для этого будут использоваться регулярные выражения (конструкции для поиска и осуществления манипуляций с подстроками в тексте, основанные на использовании метасимволов).

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

Использованные конструкции регулярных выражений приведены в таблице.

Что изменяем Найти Заменить на
убрать пробелы между словом и точкой «([а-я]) @(.)» «\1\2»
добавить пробел между точкой и следующим предложением «([а-я].@)([А-Я])» «\1 \2»
убрать пробелы между словом и запятой «([а-я]) @(,)» «\1\2»
добавить пробел между запятой и следующим словом «([а-я],)([а-я])» «\1 \2»
убрать пробелы между точкой и переходом на следующую строку «(.) (^13)» «\1\2»
убрать повторяющиеся пробелы «( )<2;>« » «
убрать пробел после открывающей скобкой «\( « «(«
убрать пробел перед закрывающей скобки » \)» «)»

Теперь необходимо все это оформить в компактном виде. Для этого удобно создать пару массивов и загнать все в цикл.

В итоге получим:

Полученный макрос сохраняем вместе с документом. Вызвать макрос можно из меню Разработчик или с помощью назначенной комбинации горячих клавиш (Файл -> Параметры -> Настройка ленты -> Сочетания клавиш: Настройка…)

Источник

Paragraphs.Add method (Word)

Возвращает объект Paragraph, который представляет новый пустой абзац, добавленный в документ.

Синтаксис

выражения. Добавление (Диапазон)

выражение (обязательно). Переменная, представляюная коллекцию»Абзацы».

Параметры

Имя Обязательный или необязательный Тип данных Описание
Range Необязательный Variant Диапазон, перед которым необходимо добавить новый абзац. Новый абзац не заменяет диапазон.

Возвращаемое значение

Заметки

Если диапазон не указан, новый абзац добавляется после выбора или диапазона или в конце документа в зависимости от выражения.

Пример

В этом примере добавляется абзац после выбора.

В этом примере добавляется отметка абзаца перед первым абзацем в выборе.

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

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

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Adblock
detector