Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatics.doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.33 Mб
Скачать

2.3. Разветвление и циклы

Вместе со стандартными операторами IF ... THEN ... ELSE ...

END IF, FOR ... NEXT, WHILE ... WEND, DO ... LOOP, SELECT CASE в VBA есть еще цикл по перебору элементов группы или массива типа FOR EACH ... IN ... NEXT, как в следующем примере.

Пример 1. Элементам списка присваиваем случайный номер оче-реди: DIM x AS VARIANT, Names AS VARIANT, m AS INTEGER

Names =Array("Smith","Васин","Korn","Логинов","Самохин")

FOR EACH x IN Names

m = INT(1000*RND)

MsgBox(x & " имеет очередь " & m)

NEXT

В некоторых случаях оператор MsgBox полезно использовать как функцию выбора. В статусе функции MsgBox имеет своим аттри-бутом названия кнопок, выводимых на экран для реакции пользовате-ля, типа "Yes" - "да", "No" - "нет", "YesNo" - две кнопочки "Да" и "Нет", "YesNoCancel" - три кнопки "да", "нет", " отменить" и т.д. Это позволяет непосредственно реагировать на происходящие события.

Пример 2. Пусть требуется найти подходящее натуральное число,

для которого значение синуса по абсолютной величине меньше 10-4

(см. п. 1.7, пример 1).

DIM n AS LONG, m AS INTEGER, s AS SINGLE

CONST eps AS SINGLE = 0.0001

DO : m = 0 : DO : m = m + 1 : n = n + 1: s = sin(n)

LOOP UNTIL (m = 500) OR (ABS(s) < eps)

MsgBox "sin(n) = " & s & "при n = " & n

LOOP UNTIL MsgBox("Продолжать?", vbYesNo) = vbNO

Здесь после каждого внутреннего цикла программа спрашивает, про-должать ли итерации, при нажатии кнопки "Yes" итерации продолжат-

ся, "No" - процесс прекратится.

2.4. Работа с ячейками листа

Все объекты VBA имеют два типа взаимодействия: свойства и методы (они отделяются от объекта точкой). Свойства можно прог-раммно менять, использовать в условных операторах, присваивать пе-ременным и т.д. Методы побуждают ЭВМ к действиям в отношении указанных объектов, либо их взаимодействия с другими объектами. Часто некоторые свойства являются подобъектами (объектами следу-ющего уровня) и сами обладают свойствами. Например, объект Appli-cation обладает свойством иметь Command Bars (пульт управления), который в свою очередь может быть добавлен к рабочему листу или к форме (метод Add - добавить), имеет свойство быть видимым или не-видимым (Visible), может быть позиционирован на экране (Position), может иметь кнопки. Те, в свою очередь, могут иметь свое имя (Na-me), название (Caption), могут запускать какую-либо программу и т. д. Организацию такого объекта можно осуществить с помощью кода:

With Application.Command Bars.Add( параметры )

.Visible = True

.Position = msoBarRight

With .Controls

.Add(msoControlButton)

.Caption = "‹ название кнопки ›"

.OnAction = "‹ имя запускаемой программы ›"

End With

End With

Ячейка листа представляет собой, как правило, двухиндексный объект Cells(m, n) в Excel и Cell(m, n) в Word, где m - номер строки листа, n - номер столбца, имеет много свойств и методов (описанные ниже свойства реализованы в Excel; Word имеет свою специфику, не сильно, однако, отличающуюся от приведенной, поэтому дальше будет говориться преимущественно об объектах Excel). Часто исполь-зуемые свойства: Value (значение), Name (имя), Interior (внутренность) и др. Из методов выделим Activate, Select - выбор конкретной ячейки. К выбранной ячейке можно уже обращаться как к объекту ActiveCell или просто Selection, который обладает свойствами иметь размер (вы-соту, ширину), имя, цвет, шрифт, стиль заполнения и т. д.

Группа ячеек в Excel обычно описывается как объект Range( ), - в скобках указывается диапазон. Например, Range("A3 : C17") - пря-моугольная группа ячеек от А3 (в левом верхнем углу) до С17 (в пра-вом нижнем углу), либо Range(Cells(3, 1), Cells(17, 3)). Объект Range может содержать всего одну ячейку (в этом случае он отождествляется с Cells).

Кроме свойств, присущих Cells, объект Range имеет свойства Count (количество ячеек в объекте), Value (может принимать массив), Borders (фиксирует границу области), Font (шрифт), ColumnWidth (ши-рина столбца) и др. Из методов следует отметить Merge (объединение в одну ячейку по названию левой верхней), Unmerge (разъединение в первоначальное состояние), ClearContents (очистка), Calculate (пере-счет содержимого при изменении данных).

Пример 1. Необходимо выделить ячейки с С3 по F20, объединить

их, окаймляя границей, изменить в них цвет, шрифт и т. д.:

Dim x As Variant, ARB As Variant

ARB = Array(xlEdgeLeft, xlEdgeRight, xlEdgeTop, xlEdgeBottom) 'константы

Dim Rang As Range

Set Rang = Range("C3 : F20")

With Rang

.Select : .Merge : .Name = "Оплата"

With .Font : 'Выбор свойств шрифта

.Name = "Arial" : .Size = 14

.Shadow = True : .Underline = xlSingle

.Color = RGB(a, b, c)

End With

For Each x In ARB

With .Borders(x) : 'Выбор границы окаймления

.LineStyle = xlContinuous

.Weight = xlThick

.ColorIndex = 17

End With

Next

End With

(здесь RGB(a, b, c) - функция выбора цвета, a, b, c - целые числа от 0

до 255, соответственно доля красного, зеленого, синего цветов в сме-

си).

Пример 2. Пусть массив ячеек от А1 до Н20 заполнен числами. Нужно выбрать те ячейки, значения в которых больше значений сво-их ближайших соседей, выделить эти ячейки цветом и шрифтом.

DEFINT I-N : m = 20 : n = 8

Dim A as variant, x As Single, y As Single, Check As Boolean

A = Array(-1,-1, -1, 0, -1, 1, 0, 1, 1, 1, 1, 0, 1, -1, 0, -1)

' массив изменений координат ячейки

For i = 2 To m - 1 : For j = 2 To n - 1

x = Cells(i, j).Value : Check = True

For k = 0 To 15 Step 2 : i1 = i + A(k) : j1 = j + A(k + 1)

y = Cells(i1, j1). Value

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]