Sub Макрос()
Dim find_rng As Range, find As find
‘1. Откл. монитора.
Application.ScreenUpdating = False
‘2. Создание объектов для поиска.
Set find_rng = ActiveDocument.Range(0, 0)
Set find = find_rng.find
‘3. Настройка поиска.
find.ParagraphFormat.FirstLineIndent = CentimetersToPoints(1.25)
find.Format = True
find.Wrap = wdFindStop
‘4. Поиск и замена.
Do While find.Execute = True
‘ Если найдено в таблице, то перестановка точки вставки за таблицу.
If find_rng.Information(wdWithInTable) = True Then
find_rng.SetRange find_rng.Tables(1).Range.End, find_rng.Tables(1).Range.End
‘ Если найдено не в таблице.
Else
‘ Изменение отступа первой строки.
find_rng.ParagraphFormat.FirstLineIndent = CentimetersToPoints(1.29)
‘ Перестановка точки вставки за найденный фрагмент.
find_rng.Collapse Direction:=wdCollapseEnd
End If
Loop
‘5. Вкл. монитора.
Application.ScreenUpdating = True
‘6. Сообщение.
MsgBox «Готово.», vbInformation
End Sub
[свернуть]
������ � ������� � Word VBA
������ � ������� � Word VBA
������� Range � Selection �������� ���������� ������� ��� ����������� ����� ��������, ������� �� ������� ��������� � ������� � ������� Word VBA. ��������� �� ���� �������� ����� ��������� � ���������� � �����, �� � ����� ������ ��� ��������� �������� ��� ���������� �������, ������ ��� ������� ���������.
� �������� Range � Selection ���������� ����� ������, �� ���� � ��������� �������� �������. ��� ������� ������������ ����������� ������������������ ��������, ��� �������� �� ������� ��������� ��������� ��������. ��� ������� ����� ����� ����� ������� � �������. ������ ��������� �������� � ������ ��������� ��� ���������� ��������, � ������ — ��� ����������. ������������ �������� ������� � � ���, ��� ������ Selection ������������� ��������� � ������� ����: ������, ������������ ����������� ��� ������ ������� �������, � �� ����� ��� ������� Range ���������� ���������� �� ���������� ������� � ������ �������� �����.
����������� ������ Selection � ��� ������, ���� ���� ��������� ������� �� ������������, ��������, �� ������ ������� �����, � ������� ����� ��������� ������������ ��������, ��� � ��� ������, ���� ��� ���������� �������� ������������, ����� ������ ����� ����� �������. � ������ ��������� ������� ����� �������� ������� Range. ��� ������������ ������� �������� ���������� �������� � ������ ���������� ������������: Word ��������� ���������� ������ ��� ������ ��������� ����������� ���������� �������, � ��� ��������� ��������� ���������� ������ �� �����������. ����� ����, ��������� ���������� �� ���������� �� ���������� ��������, ��������� �������������.
�������� �� �� ��������, ������� Selection � Range ����� ��������� ���� �� �������. ��� ����������� ����������� ����������� ������, ��� ��� ������ ������� �������������� �������� ������ � �����������. � ����������������� �����, ������������ ������ ���������� ���������� ��������� ������������- �������� ���. ����������� ��������� ������� ������.
* ��� ��������� ��������� ������������ ��� ����� Select. ��������, ��� ������� RangeR ������� ����� ��� RangeR. Select.
* ��� ��������� ������� � ���������, ��������������� �� �� ����������, ��� � ���������� �������, ������������ �������� Range.
�������: ���� �����, ����������� � ��������� ������, ���������� ��� ���������, � �� ������ ��������� ��� � ���������� �������, ������ �������� � ���� ��� ���������� Selection . Range . ���������.
Word VBA ���������� ����� ��� ������� ��� ����������� � ��������� �������� ���������� � ���������� ��������. � ��������� ������� � ������������ ������ ����� ������ �� ���; ��� ���������� � ������� �������� ��� �������� ���������� � ���������� �������.
����� Expand ����������� ������������ �������� ��� ���������� �������, �������� ���� ������ � �� �����. ���� ����� ������������ ����� ������, �����, ����� ��� ���-������ ������. �� ������ �������� ������ ���� ������� ������������ ����; ����� ����, ���������� �������� ������ � ������ ��������� ��� ���������� ������� �� �����������.
��� ���������� � ���������� ������� �����, ������� ����� ��������� ����� �� ���, ����������� ����� ����������:
Selection.Expand(wdWord)
�� ������ ������������ ����� �� ��������� �������� ��� ���������� �������; wdCharct er, wdWord, wdSent ence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow, wdTable � (������ ��� �������� Selection) wdLine. �� ��������� ������������ ��������� wdWord.
������ ��� ������� ������������ �� ����� ���������� �������: ������� Selection (�� �� ���������) ����� �������� ����� Expand. ���� ����� �������� ��������������� �������� Word, ������� ��������� ��������� ���������� ������� ��� ����������� ��������� ����. ������ ���, ����� ��������� �������� ����� Extend, ���������� ������� ������������� �� ���� ������, ������� ������� ����� �� ������ �������: ������� �����, �����������, �����, ���������� �������� ��� ����� ��������. ���� �� ������� �������� � ���� ������ �������, ��������, Selection.Expand ( «�» ). ���������� ������� ����� ��������� ������ �� ������� �������������� ���������� �������.
Word VBA ��������� ��� �������� ���������� ������ � ����� ��������� ��� ���������� �������. ������ ������ � ����, ��� ������, � ����� ������� ������������ ����� Move, �������� ������������ ��������� ��� ���������� �������: ��� �� ���������� �����, ������� ���������� � ��������� �������.
����� Move �������� �������� ��� ���������� �������, ������� � �� ������, ������� �� ������������, � � ��� ��� ��� �������� ������. ������������ ��������� � ������� ��������� �������. ����� ����� ����� Move ���������� «������» ������ � ������������ � ������ ������������. �� ��������� ����������� �� ������ ������������ ������ Expand � Mover,nd ��� ���������� ������� �������.
����������� ���� ������ ���������� ����������� �������� � ��������� �� ��� ������ �����. �������� �������� �� ��, ��� �� ����������� ����������� ��������� � �������� �������� ��������� Uni t (������ ���� ���������� ����������� �������� �������� � �������
«���������� ���������� � ���������� ��������» ������ � ���� �����). �������� Count ������������ ����� ����� ������������� �����, ���� �� ������ ���������� ������ ������ �� ��������� (�.�. � ��� �����), ��� �������������, ���� �� ������ ���������� ������ ����� �� ���������. � ����������� ���� ������� ��������� �� ��������� � ������, ��������� ������������ ������� �������� (���������� ������������ ���������) ����� �� ������������:
oTheRange .Move Unit : = waParagraph, Count, : = -2
������ MoveStart. � MoveEnd �������� ����������� ��� ��, ��� � ����� Move, ������ ��� �������� ��������� ��� �������� ����� ��������� ��� ���������� ������� ��������������. ����������� ���� ���������� ���������� ������ ���������� ������� �� ��� ����� ����� � ����� ���������:
Select-on.KoveStart Unit : = wdWord, Count := 3
�������� �������� �� ��, ��� ���� �� ����������� ��������� ����� ������� � �����, Word ������ �������� ��� ���������� ������� � ���������� �� � ������������ � ���������� ������������.
��� ���� ���� �������, Start Of ��� EndOf, ���������� ��� ��������� ������ ��� ����� ��������� ��� ���������� �������. ����� Start Of ���������� ������ ������� ������� � ������ �������� �����, � �� ����� ��� ����� EndOt ���������� ����� ������� ������ � ����� �������� �����.
�� ������ ������������ �������� Extend � ����� ������� ��� �������� ��� ���������� Word. ���� ������������ ������� ������� ��� ��������� � ���� ����, � �������� �� ��������� �� �����������, ����� �� ����������. ����������� ��������� wdMove ��� �������� ������� ��� ��������� wdExtend ��� ����������� ������ ��������� �������. ���� �������� ��������������� ������:
Selection. Start Of Unit := wdSentence, Extend := wdMove
����� ����� ��� ���������� ����� �������� ��� ���������� ������� � �����, ������� �� �������� �������� ������. � ����������� ����� ������ ��������� �������� ��� ���������� ������� — ��� ����� �������� ��� ���������� �������, ��������� � �������� ����� ������� ���������. ������ �������� �������� ����������� ������ � ��� ���������, ����� ��� ���������� �������� ����, ������� ��� ������ ������� �� ��� ����� ���������� ������� ��� ���������, �������� ��� ������ ������. (�� ������ �������� ������� �����, ����� ������, � ����� ��������� ������ �������� � «��������» �������� ��� ���������� �������).
����������� ����� Collapse ��� ������ ��������� ��� ���������� �������. �� ������ ����� ������ � ��� ��������� ��� �������� �����, ��������� �������������� �������� Direction. ����������� ���� ���������� ������� ���������� ������� � �� ��������� �����:
Selection.Collapse
� ���� ������ ������� ���������� ������� � �� �������� �����:
Selection.Collapse( Direction:=wdCollapseEnd)
���� �� ������� ��������, ������� ������������� ������ ������, � ��� �������� ����� (��������� ��������� wdCollapseEnd), Word ��������� ������ �������� ����� ����� ������ (��� ��������, ��� ������ �������� ����� ���������� � ��������� ������). ���� �� �� ������ ���������� ���-�� ����� ������ ������ ��������� ���������, �� ������ ������� ����������� �������� ������� � ������� ������ MoveEnd, ��������� ����������, �������� ����:
��������.MoveEnd Unit := wdCharacter, Count := -1
������� ���� ����� � ��������� ��� ���������� ������� ������ ��������: ������ ����������� ����� Delete ���������������� �������. �� ������ ������������ � ����� Cut, ���� ������ ������� ����� � ��������� ��� � ����� ������. ������� ��, ����� ���� �������� ����� � ����� ������, �� ������ ������� �� ����� � ��������� ��� ���������� �������.
�� ������ �������� �����, ������ ���������� � ����� ������, � ����� �������� ��� ���������� �������, ���������������� ������� Paste ����� �������. ���� ������ ���������� ��� �� ����, ����������� ����� ������ ������� �������� ����� � �������, ����� ��� �� ��� ��� ���������� ����� ���������� ������� �������� � Word.
���� ������������� ������ ������ ��� �������� ������ �� ������ ����� � ������ ������� ������ ���������, ���� ����� �� ������ ����������� ����� �����������. ������� ������� ������������ �������� Text ��� FormattedText ��������� ��� ���������� �������. ������� ��� �������� ������� ��������� ��� ���������� �������, ���������� �����, ������� �� ������ ��������, � ���. ������ ���������� ������ ���� ���� �� ��� ���, ���� ������������ ����� �� ������ ����� �������� ������������ ����� � �������.
����������� ���� �������� ���� �������� ����� �� ���������� ������� � ������ ��������, ����������� � �������� (�������� �������� ����������� ��������� ������ ����). � ����� ����� ������������ �������� ������ ��� �����; ����� �������������� ��� ���� ��������:
With ActiveDocument.Bookmarks("TheBookmark")
Set RangeY = _
ActiveDocument.Range(Start:=.Start, End=.Start)
End With
RangeY.Text = Selection.Text
��� �������� ������ � ������� � ��� �������������� ������ �������� �������� Text ��������� FormattedText.
���������� ��� ����������� ������� ���������� ������ �������� ������� �������� Text ��������� ��� ���������� ������� ������ ������, ������� �� ������ ��������. ��� ����������������� �� �������, ���������� ����:
Range2.Text = «��, ��! � ���� ����-�� ������ ���!»
������ ���������, ��� ������������� �������� Text �������� � ������ ������ ������������� � �������. �� ��������� ����� (���� ������ �� ������������� �� ������ �������� ������������ �����), ������� ������� ������.
����������� ������ Insert Before ��� Insert After �������� Range ��� Selection ��� ������� ������ � ������������ ����� ���������, �� ���������� ��� ���� ������������ �����. ��� ������ ��������� �������� ����� ����� ��������������� ����� ��� ����� ���������� ������� ��������������. Word �������� ����������� ����� � ���������� ������� ��� ��������.
��� ������������� ������ �� ������� ������������ ���������� �������� �����, ������� �� ������ ��������. ����������� ���� �������� ���� ��������� ����� �����, ���������� ����� Dairy Entry � ������ ���������� ������� (�������� �������� �� ������������� ����� ��������� VBA, ��� vbCr, ��� ���������� ����� ������). ����� ����� � ����� ����������� ����� �����, ������� ���������� � ������� ����. ���� �� �������� ����� ����� �� ���������� ����� ����, �����, ���������� ������� ����, �������� ����� ����� ������ � ���������� �������.
Dim strInsert Text As String
Selection.Insert Before "Dairy Entry" & vbCr
strInsert Text = "Today" & Chr(146) & "s date is"
strInsertText = _
strInsertTex't & Format (Now, "Long date") & ". "
Selection.InsertAfter strInsertText & vbCr
���� ������ ����������, ����� ������� ����������� ����� ����� ��������� ��������� ���������� ������� VBA, ������������ ��������� ��������, � ����� �������� � ��������� VBA. ��������� �������� � �������������� � ��������� ��������� �������� � ������� VBA �������� � ����� 11.
���������� ������ �������� ����� ������ ����� � �������� — �������� ���� ������ (�������������� ���������� vbCr) � ������� �������� Text ��� ������� Insert Before ��� Insert After. ����� Add, ����������� � ���������� Paragraphs, ��������, �� �� ����� ������ � ����������.
����������� ��� � ��� ������, ���� ��� ���������� ���������� ����� ����� � ��������� ��� ���������� �������, � �� � �� ������ ��� �����.
��������� ������� ��������� ��� ���������� ������� — ��� ��� ���� � ��������� �������� ���� ������. ��� ��� �������� ������������� �������� �� ���� ������ ��������� Word � ������������� ��������� �������.
��� �������� |
������������� ������ �… |
Font |
��������������� �������� ������� ������� �������������� ��������, ����� ��� Name, Size � Bold. �� ��������� �������� �� ������ �������� ���������������� ������ � ����� ������ ��������� �������������� �������� Range, �� ��������� � �������� Font, �� ������ �� ��� ������ � ����������� ��������� |
Paragrap |
��������������� �������� ������� ������� �������������� �������, ����� ��� hFormat LeftIndent ��� LineSpacing |
Style |
��� ����� ������� ��� ������, ������������ � ��������� ��� ���������� ������� |
Borders |
������� ������ ������ |
Tabstops |
���� � ������������ ����� ���������. �� ������ �������� ������ � ���� ��������� ������ � ������� �������� Paragraph, � �� ��������������� ����� ��������� ��� ���������� ������� |
Редактирование документов Word из кода VBA Excel. Добавление и форматирование текста. Объект Word.Range, свойство Text, методы InsertAfter и InsertBefore.
Работа с Word из кода VBA Excel
Часть 3. Редактирование документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Добавление текста в новый документ
Основные объекты, использующиеся в VBA Word для определения места вставки, добавления и форматирования текста – это Selection (выделение), Range (диапазон) и Bookmark (закладка).
Selection и Range позволяют заполнять текстом новые документы или редактировать существующие. Закладки можно использовать для вставки изменяемых реквизитов в шаблоны различных документов: договоры, акты, справки.
Объект Range имеет преимущество перед объектом Selection, так как он может быть создан только программно и не зависит от действий пользователя. Если для вставки и форматирования текста будет использоваться объект Selection, а пользователь во время работы программы просто поставит курсор в другое место документа, результат будет непредсказуем.
Word.Range кардинально отличается от объекта Range в Excel. В приложении Word он представляет из себя набор из одного или множества символов. А также он может вообще не содержать ни одного символа, а быть указателем ввода текста (виртуальным курсором).
Объект Range возвращается свойством Range других объектов приложения Word: Document, Selection, Bookmark, Paragraph, Cell (объект Table).
Вставка текста без форматирования
Если текст вставляется без форматирования, достаточно одной строки кода (myDocument – это переменная):
- Вставка текста с заменой имеющегося:
myDocument.Range.Text = "Вставляемый текст"
- Добавление текста после имеющегося:
myDocument.Range.InsertAfter "Добавляемый текст"
- Добавление текста перед имеющимся:
myDocument.Range.InsertBefore "Добавляемый текст"
Методами InsertAfter и InsertBefore можно вставить текст и на пустую страницу, также, как с помощью свойства Text. Перейти на новый абзац и начать предложение с красной строки можно с помощью ключевых слов vbCr (vbNewLine, vbCrLf) и vbTab.
Вставка текста с форматированием
Для форматирования отдельных участков текста необходимо указать диапазон символов, входящих в этот участок. Здесь нам также поможет объект Range, которому можно задать любой набор символов, содержащихся в документе Word.
Синтаксис присвоения диапазона символов объекту Range:
myDocument.Range(Start:=n, End:=m) ‘или без ключевых слов Start и End myDocument.Range(n, m) |
- myDocument – переменная;
- n – номер точки перед начальным символом;
- m – номер точки после конечного символа.
Счет точек вставки начинается с нуля. Знаки переноса строки, возврата каретки и табуляции учитываются как отдельные символы. 0 – это для объекта Word.Range виртуальная точка вставки на пустом документе, 1 – точка между первым и вторым символом, 2 – точка между вторым и третьим символом и т.д.
На пустом документе объекту Range можно присвоить только виртуальную точку вставки:
myDocument.Range(Start:=0, End:=0)
Первый символ в документе с текстом:
myDocument.Range(Start:=0, End:=1)
Диапазон с 11 по 20 символ:
myDocument.Range(Start:=10, End:=20)
Реальная точка вставки (курсор) принадлежит объекту Selection, который создается вручную или программно с помощью метода Select.
Вставка курсора в начало документа:
myDocument.Range(Start:=0, End:=0).Select
Эта строка вставит курсор между пятым и шестым символами:
myDocument.Range(Start:=5, End:=5).Select
Вставка курсора в конец документа:
myDocument.Range(.Range.Characters.Count - 1, .Range.Characters.Count - 1).Select
Ссылку на объект Range можно присвоить переменной, но при форматировании ее придется каждый раз переопределять и код получится длиннее. Пример присвоения ссылки объектной переменной:
Dim myRange As Word.Range Set myRange = myDocument.Range(Start:=0, End:=20) |
Для Range(Start:=0, End:=20)
в документе должно быть как минимум 20 символов.
Однострочные примеры редактирования и форматирования текста
Вставка дополнительного текста внутри имеющегося после заданной точки:
myDocument.Range(Start:=10, End:=10).InsertAfter "Вставляемый текст"
Новый абзац с красной строки (предыдущая строка должна заканчиваться символом возврата каретки или переноса строки):
myDocument.Range.InsertAfter vbTab & "Красная строка"
Присвоение шрифту заданного диапазона зеленого цвета:
myDocument.Range(Start:=10, End:=65).Font.ColorIndex = wdGreen
Меняем обычное начертание на курсив:
myDocument.Range(Start:=10, End:=65).Font.Italic = True
Указываем размер шрифта:
myDocument.Range(Start:=10, End:=65).Font.Size = 22
Применение стандартных стилей:
myDocument.Range(Start:=0, End:=16).Style = "Заголовок 1"
Если вас заинтересуют другие команды форматирования текста, запишите их макрорекордером в VBA Word и примените к объекту Range.
Пример 1
Добавление текста в новый документ без форматирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub Primer1() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument .Range.Text = «Заголовок по центру» & vbCr .Range(Start:=0, End:=19).ParagraphFormat.Alignment _ = wdAlignParagraphCenter .Range.InsertAfter _ vbTab & «Первый абзац с красной строки» & vbCr & _ «Второй абзац не с красной строки» & vbCr & _ vbTab & «Третий абзац с красной строки» End With Set myDocument = Nothing Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Пример 2
Добавление текста в новый документ с форматированием:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub Primer2() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument .Range.Text = «Заголовок по центру» & vbCr .Range(Start:=0, End:=19).Style = «Заголовок» .Range(Start:=0, End:=19).ParagraphFormat.Alignment _ = wdAlignParagraphCenter .Range.InsertAfter «Заголовок 1 не по центру» & vbCr .Range(Start:=20, End:=44).Style = «Заголовок 1» .Range.InsertAfter vbTab & «Шрифт по умолчанию « _ & «с красной строки» & vbCr .Range.InsertAfter «Зеленый курсив, размер 20» .Range(Start:=82, End:=107).Font.Italic = True .Range(Start:=82, End:=107).Font.Size = 20 .Range(Start:=82, End:=107).Font.ColorIndex = wdGreen End With Set myDocument = Nothing Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Вы можете запустить эти примеры в редакторе VBA Excel на своем компьютере и посмотреть результаты.
Содержание
- VBA PDF (бесплатные загрузки)
- Примеры Word VBA «Шпаргалка»
- Учебное пособие по макросам Word VBA
- Пример простого макроса Word
- Объект документа Word
- Документы
- Диапазон, выделение, абзацы
- Примеры макросов Word
Добро пожаловать в наше мега-руководство по Word VBA / макросам!
Эта страница содержит:
-
- Учебное пособие по Word VBA в формате PDF (бесплатная загрузка)
- Word VBA «Шпаргалка», содержащая список наиболее часто используемых фрагментов кода Word VBA.
- Полное руководство по Word VBA / Macro.
- Список всех наших руководств по макросам Word VBA с возможностью поиска
Возможно, вас заинтересует наше интерактивное руководство по VBA для Excel. Хотя некоторые из примеров / упражнений относятся к Excel VBA, большая часть содержимого является общим для всех VBA, и вам может быть полезно изучить такие концепции, как If, Loops, MessageBoxes и т. Д.
VBA PDF (бесплатные загрузки)
Загрузите наше бесплатное руководство по Microsoft Word VBA! Или учебники VBA для других программ Office!
Скачать
Ниже вы найдете простые примеры кода VBA для работы с Microsoft Word.
Выбрать / перейти к
ОписаниеКод VBABackspaceSelection.TypeBackspaceВыбрать весь документSelection.HomeKey Unit: = wdStory
Selection.ExtendКопироватьSelection.CopyУдалитьSelection.Delete Unit: = wdCharacter, Count: = 1Вставить послеSelection.InsertAfter «текст»Начало строкиSelection.HomeKey Unit: = wdLineКонец линииSelection.EndKey Unit: = wdLineВставитьSelection.PasteВыбрать всеSelection.WholeStoryВыбрать всю строкуSelection.EndKey Unit: = wdLine, Extend: = wdExtendВверх по абзацуSelection.MoveUp Unit: = wdParagraph, Count: = 1Переместить вправо на один символSelection.MoveRight Unit: = wdCharacter, Count: = 1Переместить вправо на одну ячейку в таблицеSelection.MoveRight Unit: = wdCellПерейти к началу документаSelection.HomeKey Unit: = wdStoryПерейти в конец документаSelection.EndKey Unit: = wdStoryПерейти на страницу 1Selection.GoTo What: = wdGoToPage, Which: = wdGoToNext, Name: = ”1 ″Перейти к началу страницыSelection.GoTo What: = wdGoToBookmark, Name: = ” Page”
Selection.MoveLeft Unit: = wdCharacter, Count: = 1
Return to Top
Закладки
ОписаниеКод VBAДобавлятьС ActiveDocument.Bookmarks
.Add Range: = Selection.Range, Name: = «Name».
.DefaultSorting = wdSortByName
.ShowHidden = Ложь
Конец сСчитатьDim n as Integer
n = ActiveDocument.Bookmarks.CountУдалитьActiveDocument.Bookmarks («Имя закладки»). УдалитьСуществуют?Если ActiveDocument.Bookmarks.Exists («BookmarkName») = True, то
‘Сделай что-нибудь
Конец, еслиПерейти кSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”ВыбиратьActiveDocument.Bookmarks («Имя закладки»). ВыберитеЗаменить текстSelection.GoTo What: = wdGoToBookmark, Name: = ”BookmarkName”
Selection.Delete Unit: = wdCharacter, Count: = 1
Selection.InsertAfter «Новый текст»
ActiveDocument.Bookmarks.Add Range: = Selection.Range, _
Name: = ”BookmarkName”
Return to Top
Документ
ОписаниеКод VBAАктивироватьДокументы («Example.doc»). АктивироватьДобавить в переменнуюDim doc As Document
Установить doc = Documents.AddДобавлятьDocuments.AddДобавить (из другого документа)Documents.Add Template: = ”C: Forms FormDoc.doc”, _
NewTemplate: = FalseЗакрыватьДокументы («Example.doc»). ЗакрытьЗакрыть — сохранить измененияДокументы («Example.doc»). Закройте SaveChanges: = wdSaveChangesЗакрыть — не сохранятьДокументы («Example.doc»). Закройте SaveChanges: = wdDoNotSaveChanges.Закрыть — запрос на сохранениеДокументы («Example.doc»). Закройте SaveChanges: = wdPromptToSaveChanges.
Return to Top
Столбцы
ОписаниеКод VBAСохранить какДокументы («Example.doc»). SaveAs («C: Example Example.doc»)СохранитьДокументы («Example.doc»). СохранитьЗащищатьДокументы («Example.doc»). Защитить пароль: = «пароль»Снять защитуДокументы («Example.doc»). Снять пароль: = «пароль»Число страницDim varNumberPages как вариант
varNumberPages = _
ActiveDocument.Content.Information (wdActiveEndAdjustedPageNumber)РаспечататьДокументы («Example.doc»). Распечатать
Return to Top
Устали искать примеры кода VBA? Попробуйте AutoMacro!
Шрифт
ОписаниеКод VBAРазмерSelection.Font.Size = 12ЖирныйSelection.Font.Bold = TrueКурсивSelection.Font.Italic = TrueПодчеркиваниеSelection.Font.Underline = wdUnderlineSingleВсе заглавные буквыSelection.Font.AllCaps = TrueЦветSelection.Font.TextColor = vbRedИмяSelection.Font.Name = «Абади»Нижний индексSelection.Font.Subscript = TrueSuperScriptSelection.Font.Superscript = TrueЦвет выделенияSelection.Range.HighlightColorIndex = wdYellowСтильSelection.Style = ActiveDocument.Styles («Нормальный»)
Return to Top
Вставлять
ОписаниеКод VBAВставить автотекстSelection.TypeText Текст: = ”a3 ″
Selection.Range.InsertAutoTextВставить код датыВставить файлSelection.InsertFile («C: Docs Something.doc»)Вставить разрыв страницыSelection.InsertBreak Тип: = wdPageBreakВставить символ абзацаSelection.TypeText Text: = Chr $ (182)Вставить вкладкуSelection.TypeText Текст: = vbTabВставить текстSelection.TypeText Text: = «Любой текст»Вставить абзац типаSelection.TypeParagraphВставить абзацSelection.InsertParagraph
Return to Top
Петли
ОписаниеКод VBAСделать до конца документаСделать до ActiveDocument.Bookmarks (« Sel») = ActiveDocument.Bookmarks (« EndOfDoc»)
‘Сделай что-нибудь
SubДля каждого документа в ДокументахDim doc As Document
Для каждого документа в документах
‘Сделай что-нибудь
Следующий документЦикл по абзацамПодпункты через абзацы
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
Далее я
Return to Top
Пункт
ОписаниеКод VBAKeepLinesTogetherSelection.ParagraphFormat.KeepTogether = TrueKeepWithNextSelection.ParagraphFormat.KeepWithNext = ИстинаПробел послеSelection.ParagraphFormat.SpaceAfter = 12Пространство доSelection.ParagraphFormat.SpaceBefore = 0Выровнять по центруSelection.ParagraphFormat.Alignment = wdAlignParagraphCenterВыровнять по правому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphRightВыровнять по левому краюSelection.ParagraphFormat.Alignment = wdAlignParagraphLeftЛевый отступSelection.ParagraphFormat.LeftIndent = InchesToPoints (3,75)Правый отступSelection.ParagraphFormat.RightIndent = InchesToPoints (1)Межстрочный интервалС Selection.ParagraphFormat
.LineSpacingRule = wdLineSpaceExactly
.LineSpacing = 12
Конец сПеребрать все абзацыПодпункты через абзацы
Dim i As Long, iParCount As Long
iParCount = ActiveDocument.Paragraphs.CountFori = 1 На iParCount
ActiveDocument.Paragraphs (i) .Alignment = wdAlignParagraphLeft
Далее я
Return to Top
Учебное пособие по макросам Word VBA
Это руководство по использованию VBA с Microsoft Word. Это руководство научит вас писать простой макрос и взаимодействовать с документами, диапазонами, выделениями и абзацами.
Примечание. Если вы новичок в Macros / VBA, вам также может быть полезна эта статья: Как писать макросы VBA с нуля.
VBA — это язык программирования, используемый для автоматизации программ Microsoft Office, включая Word, Excel, Outlook, PowerPoint и Access.
Макросы представляют собой блоки кода VBA, которые выполняют определенные задачи.
Когда ты Записать макрос, Word запишет код VBA в макрос, что позволит вам повторять ваши действия. Вы можете увидеть список всех доступных макросов из Просмотр> Макросы.
После записи макроса вы сможете редактировать макрос из списка макросов:
Когда вы нажимаете Редактировать, вы открываете Редактор VBA. Используя редактор VBA, вы можете редактировать записанные макросы или писать макрос Word с нуля. Для доступа к редактору VBA используйте ярлык ALT + F11 или щелкните Visual Basic от Лента разработчика.
Пример простого макроса Word
Это простой пример макроса Word VBA. Он выполняет следующие задачи:
- Открывает документ Word
- Записывает в документ
- Закрывает и сохраняет документ Word.
123456789101112131415 | Sub WordMacroExample ()’Открыть документ и назначить переменнойDim oDoc как документУстановите oDoc = Documents.Open («c: Users something NewDocument.docx»).’Написать в документSelection.TypeText «www.automateexcel.com»Selection.TypeParagraph’Сохранить и закрыть документoDoc.SaveoDoc.CloseКонец подписки |
Основы работы с макросами Word
Весь код VBA должен храниться в подобных процедурах. Чтобы создать процедуру в VBA, введите «Sub WordMacroExample» (где «WordMacroExample» — желаемое имя макроса) и нажмите ВХОДИТЬ. VBA автоматически добавит круглые скобки и End Sub.
Объект документа Word
При взаимодействии с Microsoft Word в VBA вы часто будете ссылаться на Word «Объекты». Наиболее распространенные объекты:
Объект приложения — сам Microsoft Word
Объект документа — документ Word
Объект диапазона — Часть документа Word
Объект выделения — Выбранный диапазон или положение курсора.
заявка
Приложение — это объект «верхнего уровня». Через него можно получить доступ ко всем остальным объектам Word.
Помимо доступа к другим объектам Word, можно применить настройки «уровня приложения»:
1 | Application.Options.AllowDragAndDrop = True |
Это пример доступа к «Выборке» в «Windows (1)» в Приложении:
1 | Application.Windows (1) .Selection.Characters.Count |
Однако к наиболее распространенным объектам Word можно получить доступ напрямую, без ввода полной иерархии. Поэтому вместо этого вы можете (и должны) просто ввести:
1 | Selection.Characters.Count |
Документы
ActiveDocument
Часто у вас есть два или более документов, открытых в Word, и вам нужно указать, с каким конкретным документом Word следует взаимодействовать. Один из способов указать, какой документ использовать ActiveDocument. Например:
1 | ActiveDocument.PrintOut |
… Напечатал бы ActiveDocument. ActiveDocument — это документ в Word, который «имеет фокус»
Чтобы переключить ActiveDocument, используйте команду Activate:
1 | Документы («Example.docx»). Активировать |
Этот документ
Вместо использования ActiveDocument для ссылки на активный документ вы можете использовать ThisDocument для ссылки на документ, в котором хранится макрос. Этот документ никогда не изменится.
Переменные документа
Однако для более сложных макросов может быть сложно отслеживать активный документ. Также может быть неприятно переключаться между документами.
Вместо этого вы можете использовать переменные документа.
Этот макрос назначит ActiveDocument переменной, а затем распечатает документ, используя переменную:
12345 | Sub VarExample ()Dim oDoc как документУстановите oDoc = ActiveDocumentoDoc.PrintOutКонец подписки |
Документ Методы
Открыть документ
Чтобы открыть документ Word:
1 | Documents.Open «c: Users SomeOne Desktop Test PM.docx» |
Мы рекомендуем всегда назначать документ переменной при его открытии:
12 | Dim oDoc как документУстановите oDoc = Documents.Open («c: Users SomeOne Desktop Test PM.docx»). |
Создать новый документ
Чтобы создать новый документ Word:
Мы можем указать Word создать новый документ на основе некоторого шаблона:
1 | Documents.Add Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx» |
Как всегда, присвоение документа переменной при создании или открытии помогает избавить от серьезных проблем:
12 | Dim oDoc как документУстановите oDoc = Documents.Add (Template: = «C: Program Files Microsoft Office Templates MyTemplate.dotx») |
Сохранить документ
Чтобы сохранить документ:
или Сохранить как:
1 | ActiveDocument.SaveAs FileName: = c: Users SomeOne Desktop test2.docx «, FileFormat: = wdFormatDocument |
Закрыть документ
Чтобы закрыть документ и сохранить изменения:
1 | ActiveDocument.Close wdSaveChanges |
или без сохранения изменений:
1 | ActiveDocument.Close wdDoNotSaveChanges |
Распечатать документ
Это напечатает активный документ:
1 | ActiveDocument.PrintOut |
Диапазон, выделение, абзацы
Диапазон а также Выбор являются, вероятно, наиболее важными объектами в Word VBA и, безусловно, наиболее часто используемыми.
Диапазон относится к некоторой части документа, обычно, но не обязательно, к тексту.
Выбор относится к выделенному тексту (или другому объекту, например изображениям) или, если ничего не выделено, к точке вставки.
Абзацы представляют абзацы в документе. Это менее важно, чем кажется, потому что у вас нет прямого доступа к тексту абзаца (вам нужно получить доступ к определенному диапазону абзацев, чтобы внести изменения).
Диапазон
Диапазон может быть любой частью документа, включая весь документ:
12 | Dim oRange As RangeУстановите oRange = ActiveDocument.Content |
или он может быть маленьким, как один символ.
Другой пример, этот диапазон будет относиться к первому слову в документе:
12 | Dim oRange As RangeУстановите oRange = ActiveDocument.Range.Words (1) |
Обычно вам нужно получить диапазон, который относится к определенной части документа, а затем изменить его.
В следующем примере мы выделим первое слово второго абзаца жирным шрифтом:
123 | Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Bold = True |
Установить текст диапазона
Чтобы установить текстовое значение диапазона:
123 | Dim oRange As RangeУстановите oRange = ActiveDocument.Paragraphs (2) .Range.Words (1)oRange.Text = «Привет» |
(Совет: обратите внимание на пробел после «Hello». Поскольку слово «объект» включает пробел после слова, просто «hello» мы получим «Hellonext word»)
С диапазонами можно делать сотни вещей. Всего несколько примеров (предполагается, что вы уже сделали объектную переменную апельсин относится к интересующему диапазону):
Изменить шрифт
1 | oRange.Font.Name = «Arial» |
Отображение в окне сообщения количества символов в определенном диапазоне
1 | MsgBox oRange.Characters.Count |
Вставьте текст перед ним
1 | oRange.InsertBefore «это вставленный текст» |
Добавить сноску к диапазону
12 | ActiveDocument.Footnotes.Add Диапазон: = oRange, _Text: = «Подробнее читайте на easyexcel.net.» |
Скопируйте в буфер обмена
1234 | oRange.CopyЧасто вам нужно перейти к конкретному диапазону. Итак, вы можете начать, начать и закончитьoRange.Start = 5oRange.End = 50 |
После приведенного выше кода oRange будет относиться к тексту, начинающемуся с пятого и заканчивающемуся 50-м символом в документе.
Выбор
Выбор используется даже шире, чем Диапазон, потому что с ним легче работать Выборы чем Диапазоны, ЕСЛИ ваш макрос взаимодействует ТОЛЬКО с ActiveDocument.
Сначала выберите желаемую часть вашего документа. Например, выберите второй абзац в активном документе:
1 | ActiveDocument.Paragraphs (2) .Range.Select |
Затем вы можете использовать объект выбора для ввода текста:
1 | Selection.TypeText «Какой-то текст» |
Мы можем ввести несколько абзацев ниже «Некоторый текст»:
12 | Selection.TypeText «Какой-то текст»Selection.TypeParagraph |
Часто необходимо знать, выделен ли какой-то текст или у нас есть только точка вставки:
12345 | Если Selection.Type wdSelectionIP ТогдаSelection.Font.Bold = TrueЕщеMsgBox «Вам нужно выделить текст».Конец, если |
При работе с объектом Selection мы хотим поместить точку вставки в определенное место и запускать команды, начиная с этой точки.
Начало документа:
1 | Selection.HomeKey Unit: = wdStory, Extend: = wdMove |
Начало текущей строки:
1 | Selection.HomeKey Unit: = wdLine, Extend: = wdMove |
Параметр Extend wdMove перемещает точку вставки. Вместо этого вы можете использовать wdExtend, который выделит весь текст между текущей точкой вставки.
1 | Selection.HomeKey Unit: = wdLine, Extend: = wdExtend |
Переместить выделение
Самый полезный метод изменения положения точки вставки — «Перемещение». Чтобы переместить выделение на два символа вперед:
1 | Selection.Move Unit: = wdCharacter, Count: = 2 |
чтобы переместить его назад, используйте отрицательное число для параметра Count:
1 | Selection.Move Unit: = wdCharacter, Count: = — 2 |
Параметр единицы измерения может быть wdCharacter, wdWord, wdLine или другим (используйте справку Word VBA, чтобы увидеть другие).
Чтобы вместо этого переместить слова:
1 | Selection.Move unit: = wdWord, Count: = 2 |
С выделением легче работать (по сравнению с диапазонами), потому что он похож на робота, использующего Word, имитирующего человека. Где находится точка вставки — какое-то действие произойдет. Но это означает, что вы должны позаботиться о том, где находится точка вставки! Это непросто после многих шагов в коде. В противном случае Word изменит текст в нежелательном месте.
Если вам нужно какое-то свойство или метод, недоступный в объекте Selection, вы всегда можете легко получить диапазон, связанный с выбором:
1 | Установите oRange = Selection.Range. |
СОВЕТ: Использование Выбор часто проще, чем использование диапазонов, но также и медленнее (важно, когда вы имеете дело с большими документами)
Абзацы
Вы не можете напрямую использовать объект Paragraphs для изменения текста:
1 | ActiveDocument.Paragraphs (1) .Text = «Нет, это не сработает» |
Выше не сработает (на самом деле выдаст ошибку). Вам нужно сначала получить диапазон, связанный с конкретным абзацем:
1 | ActiveDocument.Paragraphs (1) .Range.Text = «Теперь работает :)» |
Но вы можете напрямую изменить его стиль:
1 | ActiveDocument.Paragraphs (1) .Style = «Нормальный» |
или измените форматирование на уровне абзаца:
1 | ActiveDocument.Paragraphs (1) .LeftIndent = 10 |
или, может быть, вы хотите сохранить этот абзац на одной строке со следующим абзацем:
1 | ActiveDocument.Paragraphs (1) .KeepWithNext = True |
Сделайте абзац по центру:
1 | ActiveDocument.Paragraphs (1) .Alignment = wdAlignParagraphCenter |
ОЧЕНЬ полезно назначить конкретный абзац объектной переменной. Если мы присвоим переменной конкретный абзац, нам не нужно беспокоиться, станет ли первый абзац вторым, потому что мы вставили перед ним один абзац:
12 | dim oPara как абзацУстановите oPara = Selection.Paragraphs (1) ‘здесь мы присваиваем первый абзац текущего выделения переменной |
Вот пример, в котором мы вставляем абзац над первым абзацем, но мы все еще можем ссылаться на старый первый абзац, потому что он был назначен переменной:
1234567 | Sub ParagraphExample ()Dim oPara как абзацУстановить oPara = ActiveDocument.Paragraphs (1)MsgBox oPara.Range.TextoPara.Range.InsertParagraphBefore ‘Вставить абзацMsgBox oPara.Range.TextКонец подписки |
Объект абзаца очень часто используется в циклах:
123456789101112 | Sub LoopThroughParagraphs ()Dim oPara как абзацДля каждого параметра в ActiveDocument.Paragraphs«Сделай что-нибудь с этим. Мы просто покажем’текст абзаца, если его стиль — «Заголовок 4″Если oPara.Style = «Заголовок 4», тоMsgBox oPara.Range.TextКонец, еслиДалее oParaКонец подписки |
Word VBA Tutorial Заключение
В этом руководстве были рассмотрены основы Word VBA. Если вы новичок в VBA, вам также следует ознакомиться с нашим общим руководством по VBA, чтобы узнать больше о переменных, циклах, окнах сообщений, настройках, условной логике и многом другом.
Примеры макросов Word
Примеры макросов Word |
---|
Шаблоны |
Добавить новые документы |
Подсчет слов в выделенном фрагменте |
Текстовые поля |
Сохранить как PDF |
Закладки |
Таблицы |
Найти, найти и заменить |
Открытые документы |
Word VBA: часто задаваемые вопросы
Что такое макрос Word?
Макрос — это общий термин, обозначающий набор инструкций по программированию, которые автоматизируют задачи. Макросы Word автоматизируют задачи в Word с помощью языка программирования VBA.
Есть ли в слове VBA?
Да, в Microsoft Word есть редактор VBA. Доступ к нему можно получить, нажав клавиши ALT + F11 или перейдя в раздел «Разработчик»> «Visual Basic».
Как использовать VBA в Word?
1. Откройте редактор VBA (ALT + F11 или Разработчик> Visual Basic).
2. Выберите «Вставить»> «Модуль», чтобы создать модуль кода.
3. Введите «Sub HelloWorld» и нажмите Enter.
4. Между строками «Sub HelloWorld» и «End Sub» введите «MsgBox« Hello World! »
5. Вы создали макрос!
6. Теперь нажмите «F5», чтобы запустить макрос.
В длинном документе Word я бы хотел сделать следующее:
Найдите все абзацы стиля «Заголовок 2», и ЕСЛИ эти заголовки не имеют формулировки «Примечания», примените определенный стиль к следующему абзацу.
Вот мой код:
Dim oPara As Paragraph
For Each oPara In ActiveDocument.Paragraphs
If oPara.Style = "Heading 2" And oPara.Range.Text <> "Notes" Then
oPara.Range.Next(Unit:=wdParagraph, Count:=1).Select
Selection.Style = "Normal"
End If
Next oPara
Однако абзацы, обозначенные как «Примечания», не исключаются из процедуры, поэтому следующие за ними также преобразуются в стиль «Нормальный». Я даже не уверен, что oPara.Range.Text действительно извлекает текст абзаца.
Спасибо.
3 ответа
Лучший ответ
Я согласен с Тимоти. Следующее еще быстрее — и проще. Это также более надежно, поскольку код Тимоти соответствует «Notes» в любом месте абзаца, а не «Notes», являющемуся всем текстом абзаца.
Sub Demo()
Application.ScreenUpdating = False
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Style = ActiveDocument.Styles(wdStyleHeading2)
.Forward = True
.Format = True
.Wrap = wdFindStop
End With
Do While .Find.Execute = True
If .Text <> "Notes" & vbCr Then .Next(wdParagraph, 1).Style = wdStyleNormal
.Collapse wdCollapseEnd
Loop
End With
Application.ScreenUpdating = True
End Sub
0
macropod
23 Ноя 2020 в 09:55
Попробуйте вот так:
Dim oPara As Paragraph
For Each oPara In ActiveDocument.Paragraphs
If oPara.Style = "Heading 2" And Replace(oPara.Range.Text, Chr(13), "") <> "Notes" Then
oPara.Range.Next(Unit:=wdParagraph, Count:=1).Select
Selection.Style = "Normal"
End If
Next oPara
Кажется, что Word включает в себя возврат каретки Chr(13)
после текста заголовка, поэтому при проверке, является ли текст заголовка "Notes"
, возврат каретки должен быть удален.
0
sbgib
23 Ноя 2020 в 08:36
Самый эффективный способ найти все экземпляры «Заголовка 2» — использовать Find
. Затем вы можете протестировать текст найденного диапазона и, если он соответствует вашим критериям, применить стиль к следующему абзацу.
Sub FormatAfterHeading()
Dim findRange As Range
Set findRange = ActiveDocument.Content
With findRange.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Style = ActiveDocument.Styles(wdStyleHeading2)
.Forward = True
.Format = True
.Wrap = wdFindStop
Do While .Execute = True
If InStr(findRange.Text, "Notes") > 0 Then
'do nothing
Else
findRange.Next(wdParagraph, 1).Style = wdStyleNormal
End If
findRange.Collapse wdCollapseEnd
Loop
End With
End Sub
0
Timothy Rylatt
23 Ноя 2020 в 09:24
Форматирование объектов приложений MS Office 203
Другой пример — свойство Borders. Обычно, в нем содержится семейство границ объекта,
его Border-объектов. Зная, как настраивать свойства границ для документа Word, можно без большого напряжения “разобраться” с границами абзаца или диапазона ячеек на рабочем листе Excel. Словом, при всей сложности и при всем многообразии форматирующих свойств объектов в приложениях MS Office, в них выдержаны четкие, единые принципы и подходы, позволяющие пользователю примерно одними и теми же способами работать с различными видимыми объектами в разных приложениях Office.
Чтобы поближе познакомиться с этими принципами, давайте совершим небольшую экскурсию по некоему документу Word, применив к нему различные способы форматирования, и посмотрим, как это выглядит на практике.
Пример форматирования документа Word
Прежде всего, позаботимся о тексте. Поскольку речь идет о совершенно абстрактном документе, который требуется лишь для упражнений в форматировании, его содержимое не имеет никакого значения. Единственное требование, предъявляемое к этому документу состоит в том, чтобы он включал в себя различные структурные элементы — заголовок, обычный текст, список, подпись и т.д.
Форматирование абзаца
Сформируем его, например, следующим образом. Объявив предварительно строковую переменную MyText,
Dim MyText As String
наполним ее строкой, которая содержит в себе весь текст документа, разбитый на абзацы:
MyText = «Коммерческое предложение» + vbCr + _ «ООО Универсал» + vbCr + _
«ООО Универсал предлагает к реализации» + _ » неограниченные партии замечательного товара. » + _ «Товар предлагается в ассортименте из » + _
«трех наименований: » + vbCr + _ «Наименование товара 1» + vbCr + _ «Наименование товара 2» + vbCr + _ «Наименование товара 3» + vbCr + _ «С уважением, — И.И.Иванов» + vbCr
Использование константы vbCr
Конструкцию вида
«Строка… » + vbCr + _ «Строка… «
используют в случаях, когда необходимо получить строковое значение, состоящее из нескольких строк (константа vbCr — это символ конца строки). В случае документа Word символ vbCr рассматривается, как символ абзаца; поэтому, если сделать теперь переменную MyText содержимым документа Word, то такой документ будет состоять из нескольких абзацев. Первые два абзаца соответствуют заголовку сообщения и наименованию организации. Третий абзац в коде VBA формируется из нескольких строк, но, поскольку символ vbCr к ним не добавляется, все они вместе представляют один абзац — собственно текст сообщения. Далее следуют три абзаца, представляющие собой список из трех наименований. Наконец, завершает текст абзац-подпись.
204 Глава 8. VBA-программирование: примеры и иллюстрации
Использование метода InsertBefore
Чтобы содержащаяся в переменной MyText столь сложная строка стала содержимым документа Word (предполагается, что обсуждаемый код размещен в окне редактора Visual Basic, которое открыто из окна пустого документа Word), необходимо вызвать метод InsertBefore (“вставка вначале”):
ActiveDocument.Content.InsertBefore MyText
Свойство Content
Свойство Content активного документа представляет его текстовое содержимое. В результате такого присваивания сформированный в переменной MyText текст будет вставлен в документ Word, как семь абзацев (рис. 8.13).
Пусть это и будет та тот документ, который и будет подвержен форматированию при помощи VBA-кода. Как обращаться к абзацам документа, уже было описано в предыдущей главе.
см. в гл. 7 раздел “Семейства Paragraphs, Sentences, Words и Characters”.
Абзац, то есть объект типа Paragraph, обладает более чем сорока свойствами, и большинство из них имеют непосредственное отношение к форматированию. Кроме того, во многих свойствах абзаца содержатся объекты, которые сами обладают десятками свойств. Можно менять не только шрифт и все, связанные с ним параметры, но и границы, отступы, интервалы, выравнивание и переносы… это мог бы быть очень длинный список.
Свойство Style
К счастью, есть более простой способ справиться с форматированием абзаца. Как и многие другие объекты в среде Office, абзац обладает свойством Style, которое задает один из предопределенных стилей. Присвоив абзацу один из стандартных стилей, можно, тем самым, определите значение сразу множества его свойств.
Рис. 8.13. В пустой документ Word вставлен простой текст, никак не отформатированный
В локализованной русской версии Office стиль можно присвоить двумя способами: использовать стандартную константу, соответствующую стилю, или же указать просто русское имя стиля.
Заголовок сообщения
Например, присвоить абзацу стиль Заголовок сообщения можно при помощи оператора:
Форматирование объектов приложений MS Office 205
Абзац.Style = “Шапка”
Или использовать стандартный способ:
Абзац.Style = wdStyleMessageHeader
Будем придерживаться стандартного способа, поскольку он более универсален. Итак, сделаем первый абзац заголовком сообщения:
ActiveDocument.Paragraphs(1).Style = wdStyleMessageHeader
Второй абзац содержит наименование организации:
ActiveDocument.Paragraphs(2).Style = wdStyleCaption
Простой текст
Далее следует большой абзац, в котором содержится собственно текст сообщения. Ему присвоим стиль “простой текст”:
ActiveDocument.Paragraphs(3).Style = wdStylePlainText
Списки
Три абзаца подряд представляют собой список. Существует множество разновидностей списков. Пусть, например, это будет маркированный список 2-го вида:
ActiveDocument.Paragraphs(4).Style = wdStyleListBullet2 ActiveDocument.Paragraphs(5).Style = wdStyleListBullet2 ActiveDocument.Paragraphs(6).Style = wdStyleListBullet2
Подпись
Наконец, последний абзац представляет собой подпись автора под документом. На этот случай имеется стиль, который так и называется — “подпись”:
ActiveDocument.Paragraphs(7).Style = wdStyleSignature
Изменение размера шрифта
Чтобы сделать текст легко читаемым и лучше рассмотреть форматирование абзацев, увеличим шрифт во всем документе, обратившись к свойству Font, принадлежащему Range-объекту всего документа:
ActiveDocument.Range.Font.Size = 22
В результате всех этих действий документ преобразится примерно так, как показано на рис. 8.14.
206 Глава 8. VBA-программирование: примеры и иллюстрации
Рис. 8.14. К семи абзацам текста применены стандартные стили
Каждый из этих абзацев можно было бы отформатировать точно так же (или сотней других способов), изменяя многочисленные свойства абзаца, но лишь в редких случаях можно сэкономить массу времени, воспользовавшись стандартными стилями. Всего лишь несколько присваиваний, и документ приобрел вполне пристойный вид.
Общий вид документа: пример изменения границ документа (раздела)
Оставим пока в покое абзацы, и обратимся к общему виду страницы документа. Например, чтобы снабдить страницу границами, потребуется переменная типа Border, которую, конечно, необходимо объявить заранее:
Dim MyBorder As Border
У документа, как такового, нет семейства границ. Дело в том, что подобно колонтитулам, нумерации страниц и многому другому, границы являются принадлежностью раздела документа, а не самого документа (наверное, потому, что в каждом разделе все эти свойства могут быть определены отдельно). Поэтому, чтобы добраться до элементов форматирования страниц документа, потребуется обратиться к его первому (и, в данном случае, единственному) разделу. Общий принцип обращения к границам состоит в том, что элементы семейства Borders определяются индек- сом-константой. Не имеет значения, о границах чего идет речь — документа или абзаца, символа или текстового диапазона, столбца, ячейки или строки таблицы — в любом случае такое выражение, как, например, объект.Borders(wdBorderBottom) вернет нижнюю границу, а объ-
ект.Borders(wdBorderLeft) — левую.
Форматирование объектов приложений MS Office 207
Рис. 8.15. Страница документа снабжена границами
Пусть требуется изменить сразу все границы. Лучше всего, в этом случае, воспользоваться конструкцией For Each … Next, которая перебирает все границы (объекты семейства Border), без необходимости указывать индекс каждого объекта в отдельности. Вот код, который сразу изменяет все границы страниц первого раздела документа:
For Each MyBorder In ActiveDocument.Sections(1).Borders
MyBorder.ArtStyle = wdArtWoodwork
MyBorder.ArtWidth = 17
Next MyBorder
Свойство ArtStyle: художественный стиль границы
Свойство ArtStyle определяет “художественный стиль” границы (здесь использован “деревянный” стиль, всего же их существует несколько десятков).
Свойством ArtWidth: ширина границы
Свойством ArtWidth задается ширина границы в пунктах.
В результате документ будут снабжен художественной окантовкой, как изображено на рис. 8.15.
Границы абзаца
Продолжая разговор о границах, вернемся к абзацу. Предположим, нужно изменить вид первого абзаца, который отформатирован стандартным стилем “заголовок сообщения”. Изменим его нижнюю границу так, чтобы она как бы подчеркивала текст. Для этого обратимся к тому Border— объекту в семействе границ первого абзаца, который отвечает за нижнюю границу. Выше уже описывалось, как это сделать. Для нижней границы в качестве индекса следует использовать константу wdBorderBottom. Что именно предполагается изменить в свойствах нижней границы? Пусть линия этой границы станет тройной, вида “тонкая-толстая-тонкая с малым отступом”. Для этого необходимо загрузить соответствующую константу в свойство LineStyle Border— объекта. Вот, какое в результате получится выражение:
ActiveDocument.Paragraphs(1).Borders(wdBorderBottom).LineStyle = _
208 Глава 8. VBA-программирование: примеры и иллюстрации
wdLineStyleThinThickThinSmallGap
Рис. 8.16. Изменено форматирование первого абзаца — нижняя граница абзаца поменяла стиль и толщину линии, а интервал после абзаца увеличен
Свойство SpaceAfter: отступ снизу
Раз уж изменяется первый абзац, то освободим под ним место (оно потребуется позже), увеличив интервал после абзаца (свойство SpaceAfter):
ActiveDocument.Paragraphs(1).SpaceAfter = 31
Свойство Alignment: пример выравнивания абзаца слева
И зададим для текста в абзаце выравнивание по центру (свойство Alignment):
ActiveDocument.Paragraphs(1).Alignment = _
wdAlignParagraphCenter
Вид первого абзаца в результате, как показано на рис. 8.16, соответствующим образом изменился.
Форматирование графических объектов (семейство Shapes)
Пожалуй, самое время вспомнить, что кроме текстовых элементов, в объектах приложений Office встречается и графика различного рода. Добавим на страницу, в качестве украшения, автофигуру “вертикальный свиток”. Все автофигуры документа доступны через семейство Shapes.
Метод AddShape
Добавление автофигуры в семейство Shapes мало, чем отличается от добавления объектов в любое другое семейство — при этом используется метод AddShape — единственная особенность заключается в необходимости указать координаты и размеры новой автофигуры, а также ее тип:
ActiveDocument.Shapes.AddShape _
msoShapeVerticalScroll, 410, 110, 100, 30
Форматирование объектов приложений MS Office 209
Рис. 8.17. В интервал после первого абзаца помещена автофигура “вертикальный свиток” с надписью
Константа msoShapeVerticalScroll задает тип “вертикальный свиток”, а параметры, следующие за ним, — координаты и размеры автофигуры.
Надпись на автофигуре
Чтобы снабдить фигуру надписью, следует задать значение ее свойству
TextFrame.TextRange:
ActiveDocument.Shapes(1).TextFrame.TextRange = «Универсал»
В результате, как изображено на рис. 8.17, на странице появится своеобразная “эмблема фирмы”.
Форматирование документа посредством тем
Для режима просмотра документа Web-документ существует еще одна возможность, благодаря которой можно “одним махом” отформатировать документ, не вдаваясь ни в какие тонкости. Речь идет о темах, которые доступны по команде Формат | Тема, и которыми можно воспользоваться также из VBA-кода. Фактически, установленные на компьютере темы представляют собой подкаталоги в каталоге Program FilesCommon FilesMicrosoft SharedThemes. На-
звание (английское) каждого такого подкаталога — это и есть имя соответствующей темы. Это имя не соответствует русскому наименованию, которое доступно в диалоговом окне Òåìà.
210 Глава 8. VBA-программирование: примеры и иллюстрации
Рис. 8.18. К документу применена тема “Ива“
Метод ApplyTheme
Чтобы применить к документу какую-нибудь тему, и одним действием отформатировать документ, необходимо вызвать метод ApplyTheme. В качестве параметра следует указать строку, состоящую из имени темы (английского названия соответствующего подкаталога) и символов “111”. Например, для того чтобы применить тему “Ива” (оригинальное имя — Willow), необходим следующий оператор:
ActiveDocument.ApplyTheme «willow 111»
В результате окно Word автоматически перейдет в режим просмотра Web-документ, а все свойства выбранной темы будут применены к текущему документу (рис. 8.18).
Представление данных в MS Office
Вопросы форматирования видимых объектов — не более чем часть более глобальной темы, которую можно было бы назвать “представлением данных”. Одни и те же данные, например, таблицу числовых значений, можно представить множеством различных способов. “Сухие цифры” могут предстать перед пользователем в разном виде: как таблица, оформленная одним из десятков стилей; как диаграмма, построенная одним из десятков способов. И все это можно с легкостью реализовать в коде VBA для одного и того же набора числовых значений.
Для того чтобы проиллюстрировать различные подходы к проблеме отображения данных, используем небольшой условный пример, данные из которого попытаемся представить различными способами.
Подготовка табличных данных
Предположим, что речь идет о прямоугольной таблице, в которой собраны сведения об объемах продаж по нескольким сотрудникам за несколько месяцев. Например, выбрав строку, “Иванов”, можно увидеть, каков был уровень продаж по данному сотруднику в каждом месяце. А в столбце, например, “март”, отображены мартовские объемы продаж по всем сотрудникам. Такую
Представление данных в MS Office 211
табличку проще всего реализовать на рабочем листе Excel. Например, она может выглядеть подобно изображенной таблице на рис. 8.19.
Рис. 8.19. Простая прямоугольная таблица содержит сведения о продажах по сотрудникам за несколько месяцев текущего года
Не имеет значения, каким способом сформирована таблица — уже известно, что существует масса возможностей и помимо простого ввода цифровых данных вручную. В данном случае, интересно другое: каким образом можно отобразить эти данные, и как сделать это средствами VBA?
Условные форматы
Рассмотрим вначале возможности, связанные с самой таблицей, как она есть. Существует два направления, в которых можно было бы заняться ее усовершенствованием.
Постановка задачи
Если данные в таблице представляют собой просто цифры, введенные вручную, то все, что можно с ними сделать — это “украсить” таблицу, отформатировав ее, используя границы, заливки, шрифты и т.д. Если же процесс формирования таблицы автоматизирован, то можно сделать эту таблицу “умнее”. Пусть она не просто автоформатируется, но форматируется различными способами, в зависимости от данных, которые в нее попадают.
В рабочих книгах Excel для этого предусмотрены функции условного форматирования, которыми можно воспользоваться как при работе “вручную”, так и при помощи VBA-кода. Применим к подготовленной таблице несколько видов условного форматирования, которые позволят улучшить ее визуальное восприятие, и при этом останутся действовать для этой таблицы навсегда. Таким образом, когда цифровые данные в таблице будут изменятся, внешний вид каждой ячейки будет отражать произошедшие в ней изменения.
Определение диапазона условного форматирования
Диапазон, на который предполагается наложить условные форматы, можно описать выражением ActiveSheet.Range(«B2:H4»). Пусть это диапазон включает в себя только ячейки с цифровыми данными, оставляя за своими границами заголовки строк и столбцов таблицы.
Объект FormatCondition
Условные форматы каждой ячейки или диапазона содержатся в объектах FormatCondition, которые объединены в семейство FormatConditions данного диапазона. Для любого диапазона, то есть Range-объекта, условные форматы можно задавать, добавляя новые элементы в его
семейство FormatConditions при помощи метода Add. Пусть создаваемое условное форматирование различает три случая: “значение в ячейке меньше или равно $500”, “значение в ячейке от $500 до $1000” и “значение в ячейке равно или больше $1000”.
ПРИМЕЧАНИЕ
Здесь существует ограничение: для одной и той же ячейки нельзя определить более трех условных форматов. По этой причине приведенный ниже код, где для таблицы задается как раз три условных формата, можно выполнить только один раз — попытка повторного выполнения кода для того же самого диапазона на том же самом листе приведет к ошибке. Впрочем, условные форматы
212 Глава 8. VBA-программирование: примеры и иллюстрации
можно удалять при помощи метода Delete семейства FormatConditions или модифицировать при помощи метода Modify, принадлежащего конкретному FormatCondition-объекту.
Метод Add: добавление условного формата
Метод Add семейства FormatConditions при обращении к нему требует указать ряд параметров.
Первый параметр определяет, к чему должен относиться формат — к выражению в ячейке или к содержащемуся в ней значению. В данном примере речь должна идти о значении, определяемом константой xlCellValue.
Второй параметр задает оператор условия, то есть математическую операцию, которая выражает условие.
Далее следует формула, выражение или значение, которое играет роль второй “половинки” условия (в роли первой “половинки”, понятно, выступает само значение ячейки).
В случаях, когда требуется еще одно значение, добавляется четвертый параметр. Например, если требуется условие “значение ячейки равно 10”, то следует использовать параметры xlEqual
и 10.
Итак, чтобы наложить условный формат “значение в ячейке меньше или равно $500”, необходимо использовать параметры xlCellValue, xlLessEqual, 500. Вот как, в данном случае, выглядит добавление условного формата:
With ActiveSheet.Range(«B2:H4»).FormatConditions. _
Add(xlCellValue, xlGreaterEqual, 1000)
… задаются параметры форматирования для данного условия
End With
Форматирование данных удовлетворяющих условию
Каким образом можно будет изображать суммы, не превышающие $500? В данном случае можно полностью дать волю фантазии. Пусть, например, такие суммы будут заштрихованы 25%- ой штриховкой, и для их шрифта будут отменены признаки начертания курсив и полужирный. В результате получится следующая конструкция:
With ActiveSheet.Range(«B2:H4»).FormatConditions _
.Add(xlCellValue, xlLessEqual, 500)
With .Interior
.Pattern = xlPatternGray25
End With
With .Font
.Bold = False
.Italic = False
End With
End With
Добавление второго условного формата
Один условный формат наложен. К методу Add диапазона B2:H4 можно обратиться еще два раза, определив еще два условных формата для этих ячеек. Пусть для ячеек, значение которых больше или равно 1000, используется желтая сплошная заливка и полужирный шрифт черного цвета. Условие “больше или равно” задается константой xlGreaterEqual, а для определения
Соседние файлы в папке Книги
- #
31.05.201530.78 Кб77excel_vba.html
- #
- #
31.05.2015192.38 Кб65VBA.htm
- #
- #