VBA. Лабораторна робота 3
Копирование текста
'Текстовый буфер задается обычной строкой
Public TextBuffer As String
Public Sub CopyText()
'Этот макрос копирует выделенный текст в буфер
TextBuffer = Selection.Text
End Sub
Public Sub PasteText()
'Этот макрос выполняет операцию, обратную копированию
'Текст из буфера вставляется в точку, заданную курсором
Selection.Text = TextBuffer
End Sub
Копирование текста и шрифта
'Буфер, сохраняющий текст и шрифт
Public Type TextAndFont
BufText As String
BufFont As Font
End Type
Public TaFBuffer As TextAndFont
Public Sub CopyTextAndFont()
'Этот макрос копирует выделенный текст и шрифт в буфер
Set TaFBuffer.BufFont = Selection.Font
TaFBuffer.BufText = Selection.Text
End Sub
Public Sub PasteTextAndFont()
'Этот макрос выполняет операцию, обратную копированию

Selection.Font.Name = TaFBuffer.BufFont.Name
Selection.Font.Bold = TaFBuffer.BufFont.Bold
Selection.Font.Italic = TaFBuffer.BufFont.Italic
Selection.Font.Size = TaFBuffer.BufFont.Size
'Текст из буфера с указанными параметрами шрифта
'вставляется в точку, заданную курсором.
Selection.Text = TaFBuffer.BufText
End Sub
Копирование объекта
'Буфер, позволяющий сохранять объект
Public ObjectBuffer As Range
Public Sub CopyObject()
'Этот макрос копирует выделенный объект в буфер
Set ObjectBuffer = Selection.Range
End Sub
Public Sub PasteObject()
'используется техника копирования через стандартный буфер!
ObjectBuffer.Copy
Selection.PasteSpecial

End Sub
Коллекции объекта Document
Bookmarks
Characters (Range)
CommandBars
Comments
DocumentProperties
Endnotes
Fields
Footnotes
FormFields
Frames
Hyperlinks
Indexes
InlineShapes
HorizontalLineFormat
ListParagraphs
Lists
ListParagraphs
Range
ListTemplates
ListLevels
Font
Paragraphs
ProofreadingErrors (Range)
Revisions
ReadabilityStatistics
Scripts
Sections
Sentences (Range)
Shapes
StoryRanges (Range
Styles
Subdocuments
Tables
TablesOfAuthoritiesCategories (TableOfAuthoritiesCategory)
TablesOfAuthorities (TableOfAuthorities)
TablesOfContents (TableOfContents)
TablesOfFigures (TableOfFigures)
Variables
Versions
Windows
Words (Range)

‘заголовок окна Word задается свойством Caption этого объекта
Application.Caption = “My caption ”
Application.ActiveWindow.WindowState = wdWindowStateMaximize
Application.ActiveDocument.Save
MsgBox Application.ActivePrinter
Application.CommandBars.LargeButtons = True
Application.DisplayScrollBars = False
Application.DisplayStatusBar = False
Application.Options.AllowDragAndDrop = True
Application.Options.SaveInterval = 10
Application.StatusBar = "Run macros, please wait..."
Application.Quit wdSaveChanges
Dim MyDoc As Document
Set MyDoc = Documents.Add("C:\MSOffice\Templates\My.dot")
Set MyDoc = Documents.Open("C:\My documents\MyDoc1.doc")
Documents(“Документ1”).Close
Documents(4).Activate
ActiveDocument.PrintOut
Options.SendMailAttach = True
ThisDocument.SendMail
Documents.Close wdPromptToSaveChanges
ActiveDocument.Close wdDoNotSaveChanges
ActiveDocument.Save
ActiveDocument.SaveAs "C:\Мои документы\MyDoc2.doc"
Операції із виділеним текстом
ActiveDocument.Range(Start:=0, End:=9).Bold = True
ActiveDocument.Range(Start:=0, End:=0).InsertBefore "АБВГД"
Перевірка правопису
If Not CheckSpelling(ActiveDocument.Sections(1).Range) Then
MsgBox "Обнаружена ошибка!"
End If
Встановлення верхнього колонтитула
ActiveDocument.Sections(2).Headers(wdHeaderFooterFirstPage).Range = “Глава 2”
Paragraphs, Sentences, Words та Characters
Семейство Paragraphs представляет все абзацы документа, семейство Sentences — все
предложения, в семействе Words содержатся слова, а в семействе Characters — символы до-
кумента. Все эти семейства устроены одинаковым образом.
Властивості First і Last
К их членам можно обращаться по номерам, свойства First и Last указывают на, соответст-
венно, первый и последний элементы.
Властивість Count
Свойстве Count содержится число элементов в семействе. И для всех этих семейств в любом
случае в результате возвращается объект типа Range.
Alignment
Задать выравнивание по правому краю для первого абзаца:
ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphRight
Створити навколо абзацу рамку заданого стилю
Заключить первый абзац в рамку стиля 3D:
ActiveDocument.Paragraphs.First.Borders.OutsideLineStyle = wdLineSyleEmboss3D
Вставить текст после последнего абзаца:
ActiveDocument.Paragraphs.Last.Range.InsertAfter "Конец."
Зміна фона абзацу
Задать для пятого абзаца штриховку (узор) 15%:
ActiveDocument.Paragraphs(5).Shading.Texture = wdTexture15Percent
Зміна стиля абзаца
Задать стиль 1-го абзаца Заголовок 1:
ActiveDocument.Paragraphs.First.Style = "Заголовок 1"
Выбрать для первого предложения шрифт Arial:
ActiveDocument.Sentences(1).Font.Name = "Arial"
Переміщення по тексту
Задать смещение вверх на три пункта для символов первого предложения и вниз на три пункта для второго:
ActiveDocument.Sentences(1).Font.Position = 3
ActiveDocument.Sentences(2).Font.Position = - 3
Метод Delete
Удалить последнее предложение:
ActiveDocument.Sentences.Last.Delete
Перетворення символів у верхеій регістр
Преобразовать символы первого предложения в верхний регистр:
ActiveDocument.Sentences(1).Case = wdUpperCase
Выделить первое слово полужирным начертанием:
ActiveDocument.Words.First.Bold = True
StoryRanges
Семейство StoryRanges также возвращает Range-объект, — оно обеспечивает доступ к различным структурным компонентам текста, таким, как основной текст, примечания, сноски, колонтитулы и др. Выбор нужного компонента осуществляется посредством соответствующей константы. Например, задать шрифт Arial для основного текста документа (не затронув при этом все остальное, как случилось бы при обращении к свойству ActiveDocument.Range), можно при помощи следующего кода:
ActiveDocument.StoryRanges(wdMainTextStory).Font.Name = "Arial"
Выделить полужирным нижний колонтитул 1-й страницы:
ActiveDocument.StoryRanges(wdFirstPageFooterStory).Bold = True
Списки та таблиці.
Word-таблиці
Таблицы в документе Word представлены объектами типа Table, доступными через семейство Tables. Каждая таблица — объект Table — состоит из строк (объекты типа Row, объединенные в семейство Rows) и столбцов (объекты типа Column, объединенные в семейство Rows). Кроме того, таблицу можно рассматривать, как набор ячеек (объектов типа Cell, объединенных в семейство Cells).
Управління границями таблиць
Разрешить отображение границ для первой таблицы документа:
ActiveDocument.Tables(1).Borders.Enable = True
Видалення стовпчика таблиці
Удалить первый столбец в первой таблице:
ActiveDocument.Tables(1).Columns(1).Delete
Зміна фона таблиці
Выделить первую строку первой таблицы штриховкой 15%:
ActiveDocument.Tables(1).Rows(1).Shading.Texture = wdTexture15Percent
Створення таблиці
Создать новую таблицу с заданными параметрами и заменить ею фрагмент, определенный вы-
деленной в документе областью (объект Selection):
ActiveDocument.Tables.Add Selection.Range, 4, 3
Автоформат таблиці
Отформатировать таблицу с применением автоформата Ñïèñîê1:
ActiveDocument.Tables(1).AutoFormat wdTableFormatList1
Запис в комірки таблиці данних
К ячейкам таблицы можно обращаться по номеру строки и столбца, при этом содержимое
ячейки представлено Range-объектом. Например, записать в ячейку первого столбца и первой
строки строку “Первая ячейка” можно при помощи следующего кода:
ActiveDocument.Tables(1).Cell(1, 1).Range = "Первая ячейка"
Зміна ширини стовпчиків таблиці
Задать для всех столбцов первой таблицы ширину, равную 33 пунктам:
For N = 1 To ActiveDocument.Tables(1).Columns.Count
ActiveDocument.Tables(1).Columns(N).Width = 33
Next N
Выровнять все столбцы по ширине:
ActiveDocument.Tables(1).Columns.DistributeWidth
Вирівнювання текста в таблиці
Задать для первой строки выравнивание текста по центру:
ActiveDocument.Tables(1).Rows(1).Alignment = wdAlignRowCenter
Додавання заголовків таблиці
Сделать первую строку заглавной:
ActiveDocument.Tables(1).Rows(1).HeadingFormat = True
Автосумування комірок таблиці
Вставить в ячейку (2, 3) поле автосуммирования, которое будет отображать сумму значений в
ячейках выше или левее:
ActiveDocument.Tables(1).Cell(2, 3).AutoSum
Розбиття комірок таблиці
Разбить ячейку (2, 3) на 4 ячейки:
ActiveDocument.Tables(1).Cell(2, 3).Split 2, 2
Word-списки
Списки в документе Word устроены несколько иным образом. Такого объекта, как список, не
существует. Абзацы, составляющие список, являются обычными абзацами документа, и когда
речь идет о списке, то имеется в виду форматирование ряда абзацев.
Об’єкт ListFormat
Форматирование для каждого абзаца списка определяется объектом ListFormat, который
доступен в качестве свойства текстового диапазона.
Чтобы отформатировать некоторый фрагмент текста, как список, необходимо, прежде всего,
определить Range-объект, заключающий в себе этот диапазон. Например, для того чтобы отфор-
матировать как список абзацы с 5-го по 10-й, можно создать переменную MyRange типа Range,
которой следует присвоить в качестве значения необходимый диапазон — диапазон с начала 5-го
абзаца по конец 10-го:
Dim MyRange As Range
...
Set MyRange = ActiveDocument.Range( Start:= ActiveDocument.Paragraphs(5).Range.Start, _
End:= ActiveDocument.Paragraphs(10).Range.End)
Затем можно будет воспользоваться свойством ListFormat заданного при помощи перемен-
ной MyRange диапазона, чтобы отформатировать абзацы 5-10, как маркированный список:
MyRange.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdBulletGallery) .ListTemplates(1)
Обратная задача, то есть обращение к списку с целью получить входящие в него абзацы доку-
мента, решается при помощи свойства ListParagraphs. Например, выделить полужирным па-
раграф, являющийся первым элементом второго списка документа, можно при помощи оператора:
ActiveDocument.Lists(2).ListParagraphs(1).Range.Bold = True
Форматування документа
Dim MyText As String
MyText = "Коммерческое предложение" + vbCr + _
"ООО Универсал" + vbCr + _
"ООО Универсал предлагает к реализации" + _
" неограниченные партии замечательного товара. " + _
"Товар предлагается в ассортименте из " + _
"трех наименований: " + vbCr + _
"Наименование товара 1" + vbCr + _
"Наименование товара 2" + vbCr + _
"Наименование товара 3" + vbCr + _
"Сув ажением, - И.И.Иванов" + vbCr
InsertBefore
ActiveDocument.Content.InsertBefore MyText
Styles
Заголовок сообщения
Сделаем первый абзац заголовком сообщения:
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
Чтобы сделать текст легко читаемым и лучше рассмотреть форматирование абзацев, увеличим
шрифт во всем документе, обратившись к свойству Font, принадлежащему Range-объекту всего
документа:
ActiveDocument.Range.Font.Size = 22
Border
For Each MyBorder In ActiveDocument.Sections(1).Borders
MyBorder.ArtStyle = wdArtWoodwork
MyBorder.ArtWidth = 17
Next MyBorder
ActiveDocument.Paragraphs(1).Borders(wdBorderBottom).LineStyle = wdLineStyleThinThickThinSmallGap
SpaceAfter: відступ знизу
увеличим интервал после абзаца (свойство SpaceAfter):
ActiveDocument.Paragraphs(1).SpaceAfter = 31
Alignment: вирівнювання абзацу
ActiveDocument.Paragraphs(1).Alignment = wdAlignParagraphCenter
Shapes.форматування графічних об’єктів
Add Shape.
ActiveDocument.Shapes.AddShape msoShapeVerticalScroll, 410, 110, 100, 30
ActiveDocument.Shapes(1).TextFrame.TextRange = "Универсал"
Теми.
Фактически, установленные на компьютере темы представляют собой подкаталоги в каталоге Program Files\Common Files\Microsoft Shared\Themes.
ActiveDocument.ApplyTheme "willow 111"
В качестве параметра следует указать строку, состоящую из имени темы (английского названия соответствующего подкаталога) и символов “111”.







Завдання
Створити макрос який задає параметри сторінки та проставляє нумерацію
Створити макрос який задає параметри сторінки та задає відповідні колонтитули
Створити макрос який задає параметри сторінки та задає відповідний міжряковий інтервал (1; 1,5; 2; довільний)
Створити макрос який задає параметри для абзацу поточного документа.
Створити макрос який обєднує в таблиці комірки і вирівнює текст по центру комірки
Створити макрос який переводить всі букви в великі, малі, перша буква велика решта маленькі, перша буква велика решта маленькі в реченні
Створити макрос який виводить всю інформацію про автора та додаткову інформацію про файл (кількість символів, кількість пробілів)
Створити макрос який демонструє роботу з друком
Створити макрос який демонструє роботу зі списками
Створити макрос який проводить вставку і заміну заданої букви.
Створити макрос який демонструє роботу з таблицями
Створити макрос який виводить на сторінці задане слово всіма шрифтами які встановлені в системі
Створити макрос який автоматизовує вставку ключових слів в текст
Створити макрос який автоматизовує розбивку на колонки, задає відповідні розміри

PageNumbers
With ActiveDocument.Sections(1)
.Footers(wdHeaderFooterPrimary).PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberLeft, _
FirstPage:=False
End With
DocumentProperty
Dim Prop As DocumentProperty
For Each Prop In ActiveDocument.BuiltinDocumentProperties
On Error Resume Next
Debug.Print Prop.name & " = " & CStr(Prop.Value)
Next