- •Информатика Сборник лабораторных работ по программированию в среде Visual Basic for Applications
- •Содержание
- •Введение
- •Лабораторная работа №1. Vba. Основные понятия. Среда разработки. Основы пРоГраммирования. Переменные
- •Среда программирования vba
- •Основы программирования на vba
- •Переменные
- •Математические операторы
- •Лабораторная работа №2. Диалоговые окна
- •Контрольные вопросы
- •Лабораторная работа № 3. Разветвляющиеся алгоритмы
- •1. Операторы условия if...Then
- •1.1 Строчный оператор If…Then…Else
- •1.2 Блочный условный оператор
- •1.3 Вложенные операторы If
- •1.4 Логические операции
- •2. Безусловный переход GoTo
- •3. Оператор выбора – переключатель
- •5. Задачи для самостоятельного решения!
- •Лабораторная работа № 4. Циклы со счетчиком
- •Лабораторная работа № 5. Циклы с условием
- •1. Циклы с предусловием
- •2. Цикл с постусловием
- •3. Цикл For Each … Next
- •4. Задания к лабораторной работе
- •5. Контрольные вопросы
- •Лабораторная работа № 6. Работа с формами. Создание интерактивных программ.
- •Примеры создания программ для работы с объектами окна диалога
- •Кнопка на рабочем листе создается с помощью Панели инструментов Формы (Элементы управления). Макрос назначается двойным щелчком левой кнопки мыши или с помощью контекстного меню.
- •Варианты для самостоятельных работ:
- •Литература
3. Цикл For Each … Next
Этот цикл выполняет группу операторов для каждого элемента массива или семейства объектов (вместо того чтобы выполнять цикл заданное количество раз). Такой цикл удобно использовать, когда заранее неизвестно количество элементов в массиве или семействе объектов. Для реализации этого цикла используется оператор For Each … Next.
Синтаксис оператора:
For Each <элемент> In <группа>
Next [<элемент>]
<Элемент> – это переменная, которая используется для представления элементов массива или семейства объектов. На каждом проходе переменная цикла (<элемент>) будет содержать в себе очередной элемент массива или объект семейства. Доступ к свойствам и методам объекта при этом становится возможным через имя переменной цикла (<элемента>).
Для массивов <элемент> может быть только переменной типа Variant. Для семейств – переменной типов Variant, Object или переменной, представляющей любой конкретный объект.
<Группа> – это имя массива (за исключением массивов с пользовательскими типами) или семейства объектов.
Оператор Exit For позволяет выйти из цикла по какому-то условию.
Операторы тела цикла выполняются последовательно для всех элементов указанной <группы>, сначала для первого, затем для второго и т.д.
Допускается организация вложенных циклов For Each … Next, каждый <элемент> цикла при этом должен быть уникальным, т.е.<элемент>для внутреннего и <элемент> для внешнего циклов должны быть разными переменными.
Пример 3. Заменить все положительные числа в диапазоне А10:А20 на Листе1 знаком «+», а все отрицательные – знаком « - ».
Рис.15. Блок-схема к примеру 3
В нижеприведенной программе в качестве <элемента> используется переменная с типа Object. Через эту переменную в цикле происходит обращение к каждой из клеток семейства клеток А10:А20. При изменении свойств этой переменной меняются и аналогичные свойства соответствующих объектов-клеток.
Sub PR3( )
Dim c As Object
For Each c In Worksheets (”Лист1 ”).Range(”A10:A20”)
If c.Value>0 Then
c.Value=”+”
ElseIf c.Value<0 Then
c.Value=”-”
End If
Next c
End Sub
Пример 4. Создать функцию, подсчитывающую сумму кубов значений элементов числового массива. Использовать эту функцию для подсчета суммы кубов значений в клетках выделенного блока клеток рабочего листа активной книги Excel.
Sub Pr4()
Dim c, selectedrange As Object
Dim mas1() As Single
Dim n, i As Integer
’ Для присвоения значений переменным-объектам используется оператор Set
Set selectedrange = Selection
’ Определяем количество клеток в выделенном блоке клеток
For Each c In selectedrange
n = n + 1
Next c
ReDim mas1(n) ’ переопределяем размерность массива mas1
For Each c In selectedrange
i = i + 1
mas1(i) = c.Value
Next c
Cells(1, 1) = sum_kub(mas1)
End Sub
______________________________
Function sum_kub(mas As Variant) As Double
’ Если параметр функции передает значение массива, то он должен иметь тип Variant
Dim s As Variant
sum_kub = 0
For Each s In mas
sum_kub = sum_kub + s ^ 3
Next s
End Function
