Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Vba word поиск текста

Поиск и замена текста с помощью VBA в Word

Поиск и замена текста с помощью VBA в Word

Хотя это звучит и несколько необычно, но Find — это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.

1. Получите доступ к объекту Find для определенного диапазона или выделенной области. Если вам необходимо просмотреть целый документ, используйте свойство Content объекта Document для получения доступа к соответствующему диапазону, как показано ниже:

2. Определить свойства объекта Find в соответствии с тем, что же вы ищете и как именно вы хотите проводить поиск.

3. Вызвать метод Execute объекта Find. Соответствующий пример приведен ниже:

Для свойств, значения которых явно вы задать не можете, объект Find выбирает параметры, использованные последними или те, которые в настоящий момент заданы в диалоговом окне Найти и заменить программы Word. Именно по этой причине вам всегда следует включать метод Clear Formatting перед началом нового поиска- он позволяет убрать все ранее определенные для проведения поиска параметры форматирования.

Работа с найденным текстом

Основная работа метода Execute — обнаружение первого экземпляра искомого текста или форматирования в указанном диапазоне или выделенной области. После выполнения этого метода вам прежде всего следует определить, было ли найдено то, что вы ищете. Для подобной проверки используйте свойство Found объекта Find совместно с инструкцией If. Then, как показано на примере следующей заготовки программного кода:

If .Found = True Then

(выполнение определенных действий с найденным текстом)

(отображение соответствующего сообщения)

Если метол Execute нашел необходимый текст, исходный диапазон или выделенная область переопределяются таким образом, чтобы содержать найденный текст. Это очень важный момент, поскольку это означает, что вы можете работать с найденным текстом посредством свойств и методов исходного объекта. В следующем примере, представляющем собой расширенный вариант первого фрагмента кода из настоящего раздела, инструкция .Parent. Italic = True обращается к родительскому объекту по отношению к объекту Find, т.е. диапазону OpenRange. При выполнении этой инструкции диапазон OpenRange теперь содержит только найденный фрагмент текста, так как только в нем предусмотрено форматирование курсивом:

If .Found = True Then

MsgBox «No pogosticks found.»

Объект Reolacement принадлежит (а значит, является его свойством) объекту Find. При написании кода для операции поиска и замены вам следует задать свойства и выполнить методы объекта Replacement.

Следующий фрагмент кода заменяет все экземпляры фразы pogosticks словом skateboards. Выделенная область изменяется при выполнении критерия поиска, поскольку доступ к объекту Find осуществляется через объект Selection:

.Execute Replace := wdReplaceAll

Обратите внимание на то, что метод Execute может использовать аргумент Replace, предназначенный для контроля за тем, будут ли заменены все обнаруженные экземпляры обнаруженного фрагмента текста, или только первый.

Похожие главы из других книг:

Поиск и замена данных

Поиск и замена данных В программе HtmlPad реализована возможность быстрого поиска данных. Этот механизм полезно использовать при работе с большими программными кодами или с большими объемами данных, поскольку поиск требуемой информации вручную (например, путем просмотра

Поиск и замена данных

Поиск и замена данных В программе Extra Hide Studio имеется удобный механизм для быстрого поиска и замены данных. Эта возможность особенно актуальна при работе с большими исходными кодами, поскольку поиск данных путем просмотра всего кода может занять слишком много времени, и к

Глава 2 Подготовка текста в Microsoft Word

Глава 2 Подготовка текста в Microsoft Word • Общие сведения о Word 2007• Основные правила форматирования• Вставка стандартных блоков в документ• Нумерация страниц и колонтитулы• Проверка правописания, поиск синонимов, перевод слов• Сноски и закладки• Настройка параметров

3.1. Поиск и замена фрагментов

3.1. Поиск и замена фрагментов Текстовый редактор успешно справляется с поиском и заменой текста в отдельном файле. Однако, если это же нужно сделать сразу в нескольких файлах, лучше воспользоваться специальными программами, с помощью которых можно заменить фрагменты

Поиск и замена текста

Поиск и замена текста В текстовом редакторе Adobe InDesign можно воспользоваться полезнейшей функцией поиска и замены фрагментов текста. Причем, раз мы имеем дело с программой верстки, найденные фрагменты можно не только заменить другими, но и оформить каким-то образом –

Поиск и замена форматирования

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

Автоматический поиск и замена данных

Автоматический поиск и замена данных В процессе работы иногда возникает необходимость быстро найти те или иные данные (слово, текстовый фрагмент и т. д.) либо заменить одни данные на другие. Для решения такой задачи в Publisher 2007 реализован механизм автоматического поиска и

Поиск и замена

Поиск и замена В новой версии Excel был полностью изменен пользовательский интерфейс и расширены функциональные возможности средства Найти и заменить. Теперь можно с помощью одной операции производить поиск и замену по всем листам книги, повторно выполнять запросы поиска

Поиск и замена символов

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

Глава 2 Подготовка текста в Microsoft Word

Глава 2 Подготовка текста в Microsoft Word Microsoft Word – пожалуй, самая популярная на сегодняшний день программа, предназначенная для работы с текстами. Продукт компании Microsoft обладает всеми необходимыми возможностями, связанными с набором и правкой текстов любой сложности.

5.7. Поиск и замена

5.7. Поиск и замена В документе можно производить автоматический поиск текста и замену его другим.Поиск и замена ведется по введенному образцу. Если в качестве образца указано слово «ход», то компьютер найдет и слово «пароход», если предварительно не поставить условие, что

13.3.4. Поиск и замена текста

13.3.4. Поиск и замена текста Как вы уже догадались, окно Найти и заменить используется не только для перехода на нужную страницу. Вкладка Найти используется для поиска текста. Для быстрого доступа к этой вкладке нажмите Ctrl+F или выберите команду меню Правка, Найти. Нажмите

Поиск и замена

Поиск и замена Для поиска в тексте документа нужного слова или сочетания символов служит окно поиска и замены (рис. 9.19), которое открывается нажатием Ctrl+F. Если надо, чтобы оно сразу открылось как окно замены, используйте сочетание Ctrl+H. Рис. 9.19. Окно поиска и замены.Для

Поиск и замена фрагментов фильма

Поиск и замена фрагментов фильма Очень часто бывает нужно найти в изображении или фильме Flash какой-либо текст и, возможно, заменить его на другой. Специально для этого Flash, как и многие другие программы, работающие с документами, предлагает богатые возможности по поиску и

Поиск и замена текста

Поиск и замена текста Поиск определенного слова или фразы в большом документе является довольно непростой задачей, но ее можно значительно упростить, если воспользоваться командой Главная ? Редактирование ? Найти. В появившемся окне (рис. 5.20) введите искомый текст и

Поиск и замена данных

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

Vba word поиск текста

И вставка в текст HTML-тегов.

Преамбула
Да, мне нравится 2003 MS Word, и на мой взгляд, текстового редактора лучше пока еще никто не написал. Я делал все нижеследующее для себя, но возможно, материал будет полезен изучающим VBA. Особенно если у них возникают вопросы, как найти текст, выделенный жирным, курсивом, или там определенным шрифтом.
Так вот. Написал я в Word’е заметку про какой-нибудь скрипт, красиво оформил, код выделен Курьером, заголовки отцентрованы, важные места выделены жирным, пункты меню указаны курсивом, ну и так далее. Теперь нужно текст переложить в уютненький бложег, да так, чтобы сохранить форматирование вставить куда надо нужные теги.
Встроенное сохранение в формате HTML вставляет много лишних тегов, добавлять нужные теги руками – лишняя работа, а я ленивый. Что же делать? У нас есть VBA, который все сам за нас сделает.

Читать еще:  Как использовать функцию впр в excel

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

Найдем, например, первое вхождение текста, который выделен жирным:

Этот фрагмент кода, будучи вставлен в исполнимый макрос найдет первое вхождение текста выделенного жирным

Найдем текст, выделенный определенным шрифтом, например Courier New

Или текст, который расположен по центру:


Ищем нужное
Нашли, и вроде бы все просто – бери Selecton.Text и присваивай ему значение «открывающий_тег»+Selection.Text+»закрыв ающий_тег» , да не тут-то было. Во-первых, Selection.Find.Execute имеет дурацкое свойство искать не кусок текста от и до, а искать по абзацам, т.е.
Если этот параграф выделен Курьером
И следующий тоже
Find.Excecute выделит нам только первый абзац, для поиска остальных операцию придется повторять в цикле, но и это еще не все. Если мы сразу будем вставлять теги, то получится много лишних. Несмотря на то, что абзацы с одинаковым оформлением пусть даже и идут друг за другом, функция поиска будет рассматривать каждый абзац, как отдельный случай. Посему, все найденные данные стоит сначала собрать в массив(ы):

Но, как я уже говорил, find ищет по абзацам, в результате в наших массивах окажется несколько идущих друг за другом подряд абзацев с одинаковым шрифтом. Конечное значение таких интервалов будет совпадать с началом следующего.
Чтобы не вставлять лишние теги, проанализируем это условие, и сдвинем массив на нужное количество элементов.

Процедура сдвига
Оформим отдельную процедуру, которая будет сдвигать массив на указанное количество элементов с указанного элемента массива:

Удаление лишнего
Теперь, с помощью этой процедуры объединим следующие друг за другом интервалы . Напоминаю условие: конечное значение таких интервалов будет совпадать с началом следующего

Теперь переопределим размерность массивов, обрезав ненужные элементы (для того мы и сохраняли счетчик сдвигов в переменной shiftctr )
Примечание: Функция UBound (массив) возвращает количество его элементов, его размерность.

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

Вставка тегов
Осталось только вставить теги. Но необходимо помнить, если мы в процессе работы что-нибудь добавим в текст, то нужно будет пересчитать «координаты» следующих символов. Если символы расположены после добавленных, то к их позиции приплюсуется длина добавленного текста.
В переменной TagLen будет содержаться длина открывающего и закрывающего тега, а переменная AllTagLen – накапливать суммарные длины всех вставленных тегов.

Конечно, макрос можно еще долго дорабатывать – например, сделать так, чтоб перед многострочным кодом вставлялись теги pre, для сохранения форматирования, сделать автоматическую вставку тегов a href (брать для них информацию из ссылок, заключенных в квадратные скобки), заменять специальные символы на последовательности HTML, и т.д. Но все это, во-первых, уж совсем специфично, а во-вторых, меня пока и так устраивает. Кое-что не влом и вручную подправить. Но может быть еще вернусь к теме.

Макрос целиком на pastebin

VBA: cоздание первой программы

В первой части статьи мы приступили к работе по исследованию языка Visual Basic for Applications, записали первую макрокоманду и начали изучение ее текста, а здесь оно будет продолжено.

Для выравнивания абзацев по ширине при записи макроса была вызвана функция замены Word. Ее вызов и был записан на языке VBA. Строка Selection.Find.ClearFormatting, видимо, предназначена для снятия параметров форматирования в окне замены — эквивалент нажатию кнопки «Снять форматирование», а строки Selection.Find. ParagraphFormat.Alignment = wdAlignParagraphLeft и Selection. Find.Replacement.ParagraphFormat. Alignment = wdAlignParagraphJustify определены для установки параметров того, что надо искать (выравнивание Left, т. е. «По левому краю»), и того, на что следует заменить (выравнивание Justify, т. е. «По ширине»). Команды впрямую соответствуют переводу слов с английского языка на русский: Selection — выделение, Find.Replacement — найти и заменить, ParagraphFormat — формат абзаца, Alignment — выравнивание, AlignParagraphJustify — равнять абзац по ширине. С оператором With мы уже знакомы, поэтому в следующем фрагменте речь пойдет об окне «Найти и заменить».

Легко догадаться, что параметры объекта Selection.Find (т. е. поиск по всему тексту или по его выделенной части) соответствуют параметрам окна «Найти и заменить»: .MatchWholeWord — искать целое слово; .MatchCase — учитывать регистр; .Text — заменяемый текст, а .Replacement.Text — сообщить, на что заменить. В рассматриваемом примере заменяется не текст, а форматирование, поэтому строки с этими параметрами заполнять не нужно.

Заметив в первых четырех строках повторение слов Selection.Find, можно счесть, что и их содержимое допускается включить в блок оператора With. Проверим, так ли это. Ниже последнего записанного макроса введем строку Sub experience1() — имя после Sub может быть любым, важно лишь, чтобы оно не совпадало с какой-либо командой VBA. Нажмем «Ввод» — через две строки редактор VBA поставит End Sub. С помощью команд «Копировать» и «Вставить» скопируем из нашей программы в текст нового макроса блок With Selection.Find, а затем переместим все строки, отражающие в макросе «работу» окна «Найти и заменить», в блок With Selection.Find, убрав при этом слова Selection.Find.

Теперь испытаем программу: откроем из общего набора еще один документ и, нажав клавишу , запустим новый макрос (курсор должен стоять внутри текста запускаемого макроса). Замена произошла так, как требуется, значит, можно сокращать текст программы описанным выше способом.

Раскроем значение еще нескольких интересных строк, смысл которых может вызвать вопросы: .Forward = True, .Wrap = wdFindContinue, .Execute Replace:=wdReplaceAll. В первой строке указывается направление поиска — вперед или назад (в последнем случае стояло бы значение False). Но что же скрывает вторая? Чтобы выяснить это, напишем еще один макрос с такой же заменой выравнивания, но с разными параметрами направления поиска (табл. 1).

Вполне очевидно, что наличие или отсутствие согласия на продолжение поиска не влияет на записываемый текст. Тогда как же отказаться от запроса на продолжение? Откроем текст макроса и поставим еще один знак «=» после команды .Wrap.

Теперь все ясно: чтобы отказаться от замены в конце документа, нужно обозначить параметр .Wrap как wdFindStop (табл. 2).

Осталось разобраться со строкой .Execute Replace:=wdReplace All. Поскольку слово Execute переводится как «исполнить», оно должно означать команду запуска поиска. Обратимся к справочной системе.

Из четырех предложенных ссылок — Dialog, Find, KeyBinding, MailMerge — нас интересует Find, поскольку мы работаем именно с этим объектом.

Так и есть, Execute запускает команду поиска и замены на выполнение: Runs the specified find operation. Returns True if the find operation is successful. Из текста справки выясняется, что все параметры поиска и замены можно задать также в скобках, а кроме того, записать в переменную результат выполнения команды — успешно ли прошел поиск (т. е. были ли найдены в данном сеансе работы команды «Найти и заменить» искомые элементы). В данном случае этого не требуется, однако запомнить ее все же стоит.

Продолжим изучение записанной макрокоманды.

Вопросов не вызывает — это команда сохранения активного документа.

А вот здесь уже потребуется редактирование. Это команда «Сохранить как. » — поскольку соответствующая опция Word задается в диалоговом окне, то в текст макроса помещаются все возможные параметры, как соответствующие установленным по умолчанию, так и нет: AddToRecentFiles — добавлять ли ярлык в папку Recent, EmbedTrueTypeFonts — внедрять ли шрифты TrueType. Наиболее интересны элементы FileName:=?Доклад1.rtf? и FileFormat:=wdFormatRTF — имя сохраняемого активного документа и его формат соответственно. Последний, Rtf, нас устраивает. А вот как быть с именем? Ведь у каждого файла оно должно быть свое, уникальное. Сначала попробуем из текста данной команды просто исключить строку с указанием имени. Создадим еще один модуль, скопируем туда полную команду ActiveDocument.SaveAs со всеми параметрами и удалим строку FileName:=?Доклад1.rtf?. После запуска программы ничего не произошло, однако она все же что-то делала, ведь и жесткий диск работал, и в течение нескольких секунд система была недоступна, да и сообщений об ошибках не появилось. Проверим, что делалось. Откроем в Блокноте или другом текстовом редакторе файл, который сохранялся, — в данном случае это файл «Доклад2.doc», — предварительно выгрузив его из Word.

Читать еще:  Как сделать примечание в word

Так вот в чем дело — файл был сохранен в формате Rtf, но под прежним именем и с расширением .doc. Но нас это не устраивает, поэтому имя пусть останется то же, а вот расширение должно быть .rtf.

А что произойдет, если запустить программу при активном и ни разу не сохранявшемся документе? Проделаем это. Активный документ получит имя Doc1.doc (или Doc2.doc, Doc3.doc — у кого как) и окажется либо в папке, где имело место последнее сохранение вручную какого-либо файла, либо в папке «Мои документы», предназначенной по умолчанию для файлов Word, либо в любой другой заданной вами (путь «по умолчанию» можно посмотреть, выбрав пункты «Сервис?Параметры?Расположение».

Таким образом, если программно сохранять ранее не сохранявшийся документ, не задавая ему имя и место расположения (впрочем, последнее можно указать, включив в пункт FileName полный путь к нему), то активный файл сохранится в папке и с именем по умолчанию (либо там, где был последний раз сохранен вручную какой-нибудь документ).

Но как же быть с нашей программой? Ведь требуется, чтобы все обрабатываемые файлы сохранялись со своими именами и с расширением .rtf. Попробуем получить имя активного документа программно. Создадим еще один макрос, введем в него параметр ActiveDocument, поставим точку и увидим, что среди возможных продолжений команды есть свойство Name.

Проверим работу. Модифицируем экспериментальную процедуру следующим образом.

Объект Word Selection — выделение текста, методы #2

Всем привет, с вами автор блога scriptcoding.ru. В этой статье мы рассмотрим методы объекта Word Selection, которые позволяют очистить материал от форматирования, преобразовать в таблицу, а также производить копирование, вставку и так далее. Помним, что данный класс отвечает за выделение текста в Word.

Методы класса Word.Selection – выделение текста в Word

Я приведу по два примера программного кода на языках JScript, VBScript и VBA. Хотя по сути, код под макрос (VBA) и сценарий VBScript особо не отличается. Для тех, кто забыл: для создания макроса в документе Microsoft Office нужно вызвать редактор Visual Basic for Application (комбинация клавиш Alt + F11), далее, добавить в проект новый модуль (макрос).

Методы с префиксом Clear… позволяют очистить выделенный материал от форматирования (абзацы, стили, символы и так далее):

ClearCharacterAllFormatting () — Все форматирование.

ClearCharacterDirectFormatting () — Форматирование знаков.

ClearCharacterStyle () — Форматирование знаков, применяемых через стили.

ClearFormatting () – Все форматирования (параграфы, стили и так далее).

ClearParagraphAllFormatting () — Форматирование абзаца.

ClearParagraphDirectFormatting () — Форматирование абзацев, применяемых вручную.

ClearParagraphStyle () — Форматирование абзацев, применяемых через стили.

Collapse (Direction) – Позволяет убрать выделение текста Word и переместить указатель в начало или конец. VBA Selection. Если параметры отсутствуют, то просто убирается выделение. Параметр Direction содержит значение константы WdCollapseDirection :

  • wdCollapseEnd — 0 – Указатель вконец
  • wdCollapseStart — 1 – Указатель вначале

ConvertToTable (Separator, NumRows, NumColumns, InitialColumnWidth, Format, ApplyBorders, ApplyShading, ApplyFont, ApplyColor, ApplyHeadingRows, ApplyLastRow, ApplyFirstColumn, ApplyLastColumn, AutoFit, AutoFitBehavior, DefaultTableBehavior) – Довольно мощный метод, который позволяет преобразовать выделенный Word текст в таблицу.

Separator — Символ-разделитель, может быть знаком или значением константы WdTableFieldSeparator:

  • wdSeparateByParagraphs — 0 — абзаца.
  • wdSeparateByTabs — 1 — табуляции.
  • wdSeparateByCommas — 2 — запятая.
  • wdSeparateByDefaultListSeparator — 3 — разделитель списка по умолчанию.

NumRows — Количество строк.

NumColumns — Количество столбиков.

InitialColumnWidth — Начальная ширина каждого столбца, в пунктах.

Format – Определяет формат таблицы и содержит значение константы WdTableFormat.

ApplyBorders — TRUE — применять границы.

ApplyShading — TRUE — применить затенение.

ApplyFont — TRUE применять свойства шрифтов.

ApplyColor — TRUE применять цветовые свойства.

ApplyHeadingRows — TRUE — применить свойства заголовок-строка.

ApplyLastRow — TRUE — применить свойства последней строке.

ApplyFirstColumn — TRUE — применить свойства первого столбцов.

ApplyLastColumn — TRUE — применить свойства последнего столбца.

AutoFit — TRUE — уменьшить ширину столбцов таблицы как можно больше.

AutoFitBehavior — Устанавливает правила авто-подбора (если DefaultTableBehavior содержит значение wdWord8TableBehavior, то этот аргумент игнорируется, VBA Selection), содержит значения константы WdAutoFitBehavior:

  • wdAutoFitContent — 1 — автоматически размер
  • wdAutoFitFixed — 0 — фиксированный размер
  • wdAutoFitWindow — 2 — автоматический размер по ширине активного окна

DefaultTableBehavior — Значение, указывающее, следует ли автоматически изменять размер ячеек таблицы по содержимому. Selection VBA. Содержит значение константы WdDefaultTableBehavior:

  • wdWord8TableBehavior — 0 — отключает Авто-подбор (по умолчанию)
  • wdWord9TableBehavior — 1 — включить Авто-подбор

Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию.

Примера на языке VBScript – выделение текста в редакторе Word

В данном примере в цикле For (смотрите статью «Урок 6 по VBScript: Циклы for…next и for each…next»), который выполняется шесть раз, происходит вставка перевода на новую строку, вставка текстовой фразы и перемещаем курсов к конец строки. С помощью оператора with мы можем экономить размер программного кода – не нужно лишний раз писать имя класса. Вконце происходит выделение текста Word и преобразование его в таблицу.

Примера на языке JScript – выделение текста в редакторе Word

Логика работы данного программного кода аналогичны предыдущему примеру, тут мы уже использовали цикл for языка JS, читайте в статье «Урок 9 по JScript — оператор цикла for». Тут тоже использовался оператор with, обратите внимание, что имена переменных изменились, а в конце каждой строки кода прописана точка с запятой.

Примера на языке Visual Basic for Application – выделение текста в редакторе Word

Хорошо, давайте продолжим рассматривать методы класса Selection.

EndOf () – Перемещает курсор в конец выделения.

StartOf () – Перемещает курсор в начало выделения.

SetRange (start, end) – Позволяет задать начальное и конечное значение для выделения текста Word.

TypeText () – Выполняет ту же функцию, что и свойство Text – ввод информации.

TypeParagraph () — Метод вставляет параграф.

Copy (), Cut (), Paste (), Delete () – Копирует, вырезает, вставляет и удаляет выделенный текст в Word.

CopyAsPicture () – Копирует выбранный материал как изображение.

И так, теперь рассмотрим программный код с данными методами.

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

Ну и в заключение, привожу программный код для макроса:

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

Спасибо за внимание. Автор блога Владимир Баталий

VBA для чайников (80 стр.)

В Access и Excel часто удобно сохранять данные, необходимые для работы VBA программы, прямо в документе — в таблицах базы данных (Access) или ячейках листа рабочей книги (Excel). Единственная проблема, связанная с подобным подходом, состоит в том, что данные видны пользователям и их легко изменить, если только вы не предпримите предупреждающих действий.

Читать еще:  Шрифт по умолчанию в word 2020

Два остальных возможных решения для сохранения данных на диске сработают в любом приложении, поддерживающем VBA. Вы можете сохранять значения в реестре Window (и даже считывать их оттуда), используя инструкции Save Setting и Get Setting, а также сохранять данные в отдельном файле. Оба эти способа рассмотрены в главе 20.

Глава 15. Программирование на VBA в Word.

Объектная модель Word

Ключевые объекты Word: окна, выделения, диапазоны и объект Find

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

Методы и свойства для манипуляции с текстом

Поиск и замена текста с помощью VBA в Word

Изо всего набора приложений Office Word предлагает наиболее богатый набор средств программирования. Знакомство с объектами Word, такими как Range и Find, иногда оказывается рискованным, но это очень важно, если вы действительно хотите создавать VBA-процедуры, раскрывающие всю мощь Word. Именно об этом мы и поговорим в настоящей главе.

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

Знакомство с объектом Application

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

Между прочим, метод List Commands создает новый документ и помещает в него таблицу, содержащую комбинации клавиш и команды меню Word. Если вы передаете методу List Commands значение True, новый документ содержит комбинации клавиш и команды меню Word. Передайте ему значение False, чтобы в нем перечислялись только команды.

Доступ к документам Word с помощью VBA

Если написанная вами VBA-процедура функционирует прямо в документе, вы должны указать объект этого документа непосредственно в коде, Часто вы сможете сделать это неявным образом, используя объект Selection, о котором я расскажу дальше в настоящей главе. Однако в остальных ситуациях вам придется явно идентифицировать целевой объект.

Работа с активным документом

Типичная VBA-процедура в Word выполняет все свои магические действия в том документе, который в данный момент открыт для редактирования. Для указания активного документа используется объект ActiveDocument. Например, приведенная выше инструкция просто закрывает активный документ:

Как видите, вам не нужно писать код для определения того, какой же документ редактируется в данный момент: достаточно просто использовать объект ActiveDocument.

Если вам необходимо работать с определенным документом, который сейчас не активен, вы должны указать его как члена коллекции Documents, состоящей изо всех документов, открытых в настоящее время в Word. Как и в случае с любой другой коллекцией объектов в VBA, вы можете обратиться к отдельному документу в коллекции, используя его заголовок, который в данном случае совпадает с именем файла (только именем файла, а не с полным путем к нему). Вот соответствующий пример;

Documents(«Toy Store News letter.doc»)

Поскольку вы не знаете точно имя файла целевого документа заранее, а пользователь может в любой момент его изменить, вам следует создать переменную, которая будет содержать имя файла. После этого вы можете использовать эту переменную для указания объекта документа, например, так: Documents (strDocName).

Вы также можете обратиться к документу по его индексному номеру. Следующая инструкция, например, обращается к третьему документу в коллекции Documents:

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

Для создания нового документа используйте метод Add коллекции объектов Documents. Используемый без каких-либо документов, метод Add создает новый документ, базирующийся на шаблоне Normal (Обычный). Для указания другого шаблона укажите путь к нему в качестве аргумента, как показано ниже:

Documents.Add template:= _

«C:WindowsApplication DataXMicrosoftHidden templates»

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

Documents.Open FileName:= _

«С:ToysToys for infants.doc»

Для активизации уже открытого документа используйте метод Activate коллекции объектов Documents. Предположим, что вам необходимо, чтобы ваша VBA-программа активизировала определенный документ, который в момент запуска программы может быть и открыт, и закрыт. Используйте код, подобный показанному ниже, для активизации открытого документа или открытия документа, если он еще не открыт:

Dim docFileName As String, docPath as String

docFileName = «Старые игрушки.doc»

For Each target Doc In Documents

If targetDoc.Name = docFileName Then

If targetDocIsOpen = True Then

Documents.Open FileName := docPath & docFileName

Поскольку каждый документ Word состоит из одного или нескольких разделов, вы можете ожидать, что Word VBA содержит коллекцию Sections и отдельные объекты Section для работы с этими элементами. Так оно и есть. Наиболее важное применение объектов Section — организация доступа к верхним и нижним колонтитулам (через объект Header Footer ). Вы можете добавлять новые разделы в документ, используя метод Add коллекции Sections или метод Insert Break объекта Range или Selection.

Открытие окон с помощью VBA

Каждый открытый документ содержит как минимум одно окно, а пользователь Word может открыть столько окон, сколько нужно для работы с любым документом. Каждое из подобных окон- объект с его собственными правами. В объектной модели Word объект Application содержит коллекцию Windows, содержащее все окна для всех открытых документов. Кроме того, каждый объект Document содержит свою собственную коллекцию объектов Windows.

Две основные причины работы с объектами Window в Word- контроль над внешним видом окна, а также манипулирование содержимым документа с помощью объекта Selection. Объект Selection я подробно рассмотрю в следующем разделе настоящей главы; здесь же я остановлюсь на приеме, позволяющем определить конкретное окно, а также познакомлю со свойствами, которые вы сможете использовать для определения внешнего вида окна.

Обращение к окнам из программного кода

Прямо из программного кода проще всего обращаться к тому окну, в котором открыт редактируемый документ во время запуска процедуры. Для указания окна используется объект ActiveWindow.

Для определения окна прямо в программном коде вам следует определить его как члена одной из коллекций Windows. При работе с глобальной коллекцией объектов Windows вам не нужно указывать собственно объект Application. При обращении к коллекции объектов Windows определенного документа, указывать имя объекта этого документа нужно обязательно. Вы можете идентифицировать окно по его имени или индексному номеру в коллекции. Имя окна совпадает с именем документа, который в нем отображается, за исключением того, что если для одного документа открыто несколько окон, после указания имени документа следует ставить точку с запятой, после которой указать номер окна.

Ниже приведены типичные ссылки для объектов Window.

Ссылка на основную публикацию
Adblock
detector