Типы данных If...Then...Else Лабораторная работа №3

advertisement
1
Лабораторная работа №3
Введение в Visual Basic для Word
Типы данных
Типы данных: Byte, Boolean, Integer, Long, Currency (денежный), Decimal, Single
(вещественный одинарной точности), Double (вещественный двойной точности), Date
(время/дата), String, Object (встроенный объект Word), Variant (универсальный тип данных
– по умолчанию).
If...Then...Else
Условный оператор.
If condition Then [statements] [Else elsestatements]
Или, если вы не хотите писать все в одну строку, блочный вариант условного оператора:
If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements] ...
[Else
[elsestatements]]
End If
Часть
condition
Описание
Условие. Бывает двух типов:
Числовое выражение или строковое выражение, вычисляемое как True
или False. Если условие Null (невычисляемо), условие считается False.
Выражение вида TypeOf objectname Is objecttype. objectname – любой
объект и objecttype – любой тип объекта. Выражение True если
objectname – типа objecttype; иначе False.
statements
Операторы.
condition-n
Условия. Так же как condition.
elseifstatements Операторы.
elsestatements
Операторы.
Однострочная форма проще, но блочная форма более структурирована,
дополнительные возможности вложения, проще для отладки и чтения.
имеет
2
Для однострочной формы можно задать несколько операторов, разделив их двоеточиями.
If A > 10 Then A = A + 1 : B = B + A : C = C + B
Блочная форма If должна быть первой в строке. Строки Else, ElseIf, и End If могут
содержать дополнительно только номер строки или метку. Блочный If должен заканчиваться
на End If. Блочный If можно отличить от простого тем, что после слова Then нет никаких
других операторов в той же строке.
Блоки Else и ElseIf необязательны. Может быть много ElseIf в блочном If, но не после Else.
Внутрь блочного If может быть вложен другой If.
With
Выполняет серию операторов для одного объекта пользовательского типа.
With object
[statements]
End With
Часть
Описание
object
Имя целевого объекта.
statements
Операторы, исполняемые для object.
Блок With позволяет произвести серию операторов для специфического объекта без
постоянного указания имени объекта. Например, для изменения нескольких разных свойств
одного объекта, помещаем назначение свойств внутрь With структуры, ссылаясь на объект
только однажды вместо ссылки в каждом операторе. Пример ниже показывает
использование With.
With MyLabel
.Height = 2000
.Width = 2000
.Caption = "This is MyLabel"
End With
После открытия With, его объект нельзя поменять на другой. Можно вложить один With
внутрь другого With. Однако если имена членов объекта внешнего With совпадают с
именами внутреннего With объекта, придется использовать полную запись во внутреннем
With для обращению к объекту внешнего With. Не рекомендуется делать переход внутрь
With блока или из него.
For Each...Next
Повторяет группу операторов для каждого элемента массива или коллекции.
For Each element In group
[statements]
3
[Exit For]
[statements]
Next [element]
Часть
Описание
element
Имя текущего элемента коллекции/массива.
group
Имя коллекции/массива.
statements
Операторы, исполняемые для element.
Преждевременный выход из цикла – Exit For.
Можно вкладывать циклы For...Each...Next друг в друга, лишь бы были различны имена
element для каждого цикла. Для вложенных циклов важен порядок операторов Next, нужно
соблюдать вложенность при задании параметров element операторов Next.
Пример ниже использует For Each...Next для поиска в коллекции объекта со свойством Text
равным "Hello".
Dim Found, MyObject, MyCollection
Found = False
' Initialize variable.
For Each MyObject In MyCollection
' Iterate through each element.
If MyObject.Text = "Hello" Then
' If Text equals "Hello".
Found = True
' Set Found to True.
Exit For
' Exit loop.
End If
Next
Do...Loop
Цикл Do...Loop выполняет блок операторов неопределенное число раз.
Повтор пока условие истинно (While) с пред- и пост-условием
Sub ChkFirstWhile()
counter = 0
myNum = 20
Do While myNum > 10
myNum = myNum - 1
counter = counter + 1
Loop
MsgBox "The loop made " & counter & " repetitions."
End Sub
Sub ChkLastWhile()
counter = 0
myNum = 9
Do
myNum = myNum - 1
counter = counter + 1
Loop While myNum > 10
MsgBox "The loop made " & counter & " repetitions."
End Sub
4
Повтор пока условие не станет истинно (Until) с пред- и пост-условием
Sub ChkFirstUntil()
counter = 0
myNum = 20
Do Until myNum = 10
myNum = myNum - 1
counter = counter
Loop
MsgBox "The loop made
End Sub
Sub ChkLastUntil()
counter = 0
myNum = 1
Do
myNum = myNum + 1
counter = counter
Loop Until myNum = 10
MsgBox "The loop made
End Sub
+ 1
" & counter & " repetitions."
+ 1
" & counter & " repetitions."
Вы можете выйти из Do...Loop с помощью Exit Do, например чтобы закончить бесконечный
цикл.
Sub ExitExample()
counter = 0
myNum = 9
Do Until myNum = 10
myNum = myNum - 1
counter = counter + 1
If myNum < 10 Then Exit Do
Loop
MsgBox "The loop made " & counter & " repetitions."
End Sub
Sub и Function
Для вызова Sub процедуры нужны имя процедуры и значения для всех аргументов. Слово
Call необязательно, но если вы используете его, необходимы скобки.
Sub Main()
MultiBeep 56
Message
End Sub
Sub MultiBeep(numbeeps)
For counter = 1 To numbeeps
Beep
Next counter
End Sub
Sub Message()
MsgBox "Time to take a break!"
End Sub
Пример ниже показывает два способа вызова Sub процедуры.
Sub Main()
HouseCalc 99800, 43100
5
Call HouseCalc(380950, 49500)
End Sub
Sub HouseCalc(price As Single, wage As Single)
If 2.5 * wage <= 0.8 * price Then
MsgBox "You cannot afford this house."
Else
MsgBox "This house is affordable."
End If
End Sub
Если нужно использовать возвращаемое функцией значение, скобки вокруг параметров
обязательны:
Answer3 = MsgBox("Are you happy with your salary?", 4, "Question 3")
Иначе, скобки при вызове функции нужно опустить:
MsgBox "Task Completed!", 0, "Task Box"
Функции и процедуры могут получать свои параметры в произвольном порядке, если вы
будете явно указывать имена параметров. Именованный аргумент состоит из имени,
оператора (:=), и значения аргумента.
Например, вызов функции MsgBox.
MsgBox Title:="Task Box", Prompt:="Task Completed!"
Или:
answer3 = MsgBox(Title:="Question 3", _
Prompt:="Are you happy with your salary?", Buttons:=4)
Описание функции отличается от описания процедуры заданием типа возвращаемого
значения (необязательно, например – As Integer) и самого возвращаемого значения (через
присвоение имени функции).
Function MyFunc(num As Integer) As Integer
MyFunc = num * num
End Function
Объект Application
Это программа Word в целом, он содержит в себе все остальные объекты, например
ActiveDocument.
Пример:
MsgBox Application.UserName
MsgBox Application. ActiveDocument.Title
Многие часто используемые свойства и методы – например текущий документ
(ActiveDocument) – могут быть использованы без ссылки через объект Application.
Например, вместо того чтоб писать Application.ActiveDocument.PrintOut, можно
написать ActiveDocument.PrintOut. Такие свойства и методы (доступные без указания на
6
Application) глобальные для приложения в целом и существуют в единственном экземпляре.
Чтобы просмотреть глобальные свойства и методы в Object Browser-е, выбираем <globals>
в списке Classes.
Объект Options
Это опции приложения Word. Многие из свойств объекта Options доступны через диалог
Options (меню Tools). Пример ниже устанавливает опции Word.
With Options
.AllowDragAndDrop = True
.ConfirmConversions = False
.MeasurementUnit = wdPoints
End With
Объект Selection
Представляет выделенный фрагмент текста, или точку вставки, если ничего не выделено.
Объект Selection может быть только один.
Пример ниже убирает (коллапсирует) выделение и смещает курсор в конец текущей строки.
Selection.EndKey Unit:=wdLine, Extend:=wdMove
Пример ниже обновляет результаты полей выделенного фрагмента.
If Selection.Fields.Count >= 1 Then Selection.Fields.Update
Свойство Type задает тип выделения (блок или просто точка вставки). Пример ниже
выделяет текущий параграф если ничего другого не выделено (точка вставки).
If Selection.Type = wdSelectionIP Then
Selection.Paragraphs(1).Range.Select
End If
Свойство Information задает информацию о выделении. Если выделение – таблица, пример
ниже показывает число строк и столбцов в таблице.
If Selection.Information(wdWithInTable) = True Then
MsgBox "Columns = " _
& Selection.Information(wdMaximumNumberOfColumns) _
& vbCr & "Rows = " _
& Selection.Information(wdMaximumNumberOfRows)
End If
Метод Select выделяет нужную часть документа. Пример ниже выделяет первую ссылку в
активном документе и форматирует ее красным цветом.
If ActiveDocument.Bookmarks.Count >= 1 Then
ActiveDocument.Bookmarks(1).Select
Selection.Font.ColorIndex = wdRed
End If
7
Объект Selection содержит методы для расширения или перемещения существующего
выделения. Например, MoveDown с параметром Extend равным wdExtend. Пример ниже
выделяет следующие три абзаца после текущей позиции.
With Selection
.StartOf Unit:=wdParagraph, Extend:=wdMove
.MoveDown Unit:=wdParagraph, Count:=3, Extend:=wdExtend
End With
Используем свойство Range для получения объекта Range (диапазон) из объекта Selection.
Пример ниже определяет переменную myRange как диапазон выделения.
Set myRange = Selection.Range
Для автосохраненных макросов использование Selection порой чрезмерно. Пример ниже
применяет жирный формат к первым двум словам документа, и вставляет новый абзац.
Selection.HomeKey Unit:=wdStory
Selection.MoveRight Unit:=wdWord, Count:=2, Extend:=wdExtend
Selection.Font.Bold = wdToggle
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeParagraph
То же самое удобнее сделать без использования Selection.
Set myRange = ActiveDocument.Range(Start:=0, _
End:=ActiveDocument.Words(2).End)
myRange.Bold = True
myRange.InsertParagraphAfter
Объект Selection только один, однако, может быть много объектов Range в одном
документе. Объект Range представляет часть документа. Работая с объектами Range, можно
манипулировать документом без обновления экрана (что всегда происходит при выделении).
Объект Documents Collection
Коллекция всех открытых документов. Пример ниже показывает все открытые документы.
For Each aDoc In Application.Documents
aName = aName & aDoc.Name & vbCr
Next aDoc
MsgBox aName
Метод Add создает новый пустой документ и добавляет его в коллекцию Documents.
Пример ниже создает безымянный документ, основанный на шаблоне Normal.
Documents.Add
Метод Open создает документ из файла (в примере – "Sales.doc").
Documents.Open FileName:="C:\My Documents\Sales.doc"
Для выбора конкретного документа используют Documents(index), где index – имя документа
или номер в коллекции. Пример ниже закрывает документ с именем "Report.doc" без записи
изменений.
8
Documents("Report.doc").Close SaveChanges:=wdDoNotSaveChanges
Пример ниже активизирует первый документ в коллекции Documents.
Documents(1).Activate
Пример ниже просматривает коллекцию Documents на предмет поиска среди открытых
документа с именем "Report.doc". Если таковой открыт, он активизируется, иначе –
открывается.
For Each doc In Documents
If doc.Name = "Report.doc" Then found = True
Next doc
If found <> True Then
Documents.Open FileName:="C:\Documents\Report.doc"
Else
Documents("Report.doc").Activate
End If
Можно использовать свойство ActiveDocument для упрощения ссылок на текущий
документ. Пример ниже использует метод Activate для активации (делает текущим)
документа с именем "Document 1." Затем для текущего документа задается альбомная
ориентация страниц и документ печатается.
Documents("Document1").Activate
ActiveDocument.PageSetup.Orientation = wdOrientLandscape
ActiveDocument.PrintOut
Коллекция Dialogs
Коллекция встроенных диалогов Word-а. Вы не можете добавлять свои диалоги в эту
коллекцию. Обычно используют Dialogs(index), где index – одна из WdWordDialog констант
для идентификации диалога. Пример ниже вызывает диалог открытия файла.
dlgAnswer = Dialogs(wdDialogFileOpen).Show
Задание лабораторной работы
Создать в Word файл с несколькими абзацами текста (обычными и заголовками
нескольких уровней), несколькими таблицами. Написать макрос, выполняющий следующие
операции.
1) Просмотр всех абзацев с уровнем основного текста (не заголовки), единообразное
изменение их оформления. Изменяемые свойства выбираем самостоятельно.
2) Просмотр всех абзацев с уровнем выше основного текста (заголовки), единообразное
изменение их оформления. Изменяемые свойства выбираем самостоятельно, делаем
отличными от основного текста, и различными для абзацев разного уровня.
3) Просмотр всех таблиц, а в каждой таблице просмотр всех строк. Единообразно
оформляем все таблицы (отдельное оформление – для первой строки каждой таблицы).
Изменяемые свойства выбираем самостоятельно.
Создать в документе новую панель инструментов с кнопкой для вызова вашего
макроса.
Пример каркаса макроса:
9
Sub MyMacros()
Dim Par As Paragraph
Dim Table As Table
Dim Row As Row
For Each par In ActiveDocument.Paragraphs
If par.Format.OutlineLevel = wdOutlineLevelBodyText Then
' основной текст
par.Alignment = wdAlignParagraphJustify
End If
If par.Format.OutlineLevel = wdOutlineLevel1 Then
' заголовки 1 уровня
par.Alignment = wdAlignParagraphCenter
End If
If par.Format.OutlineLevel = wdOutlineLevel2 Then
' заголовки 2 уровня
par.Alignment = wdAlignParagraphLeft
End If
Next par
For Each Table In ActiveDocument.Tables
RowCount = 1
For Each Row In Table.Rows
If (RowCount = 1) Then
' первая строка
Else
' другие строки
End If
RowCount = RowCount + 1
Next Row
Next Table
End Sub
Download