- •1. Введение
- •2. Среда для написания программы на vba
- •3. Примеры программирования на vba
- •4. Свойства и методы объектов excel
- •5. Пример - разработка бланка заказа
- •6. Разработка заявки на поступление товаров
- •7. Разработка автоматизированного бланка
- •‘Фамилия записывается во вторую колонку.
- •8. Изменение цвета объекта
- •9. Объект Image
- •8. Задания для самостоятельной работы
- •8.1. Задание 1
- •8.2. Задание 2
- •8.3 Задание 3
- •8.4. Задание 4
- •На первом рабочем введите необходимый текст и создайте элементы управления (рис.54):
- •Программирование в microsoft excel. Часть 1
3. Примеры программирования на vba
В этом разделе рассмотрим примеры, поясняющие возможности VBA. Первая задача – разобраться с работой операторов цикла. Цикл – это повторяющиеся действия. Циклы бывают разных типов: циклы с условием, циклы с предусловием, циклы с известным числом повторений. Цикл с условием выполняется, пока не наступит некоторое событие – например, некоторая переменная примет заданное значение. Цикл с известным числом повторений будет повторяться, пока некоторая переменная, называемая счетчиком, не «пробежит» заданный диапазон значений – от начального до конечного. Рассмотрим работу двух типов цикла.
Задание 4. Разработем программный фрагмент следующего содержания. На рабочем листе располагаются кнопка, при нажатии на которую происходит подсчет суммы всех чисел, начиная от 1 до 10 . На рис. 17 показан результат действия этой программы- после щелчка по кнопке появляется окно с сообщением о подсчитанной сумме.
Рис.17
Применим оператор цикла с известным числом повторений. Синтаксис этого цикла следующий:
For <i = начальное значение> To <конечное значение> Step
<группа операторов>
Next
Где i - переменная типа счетчик;
Step – шаг изменения переменной типа счетчик. Если шаг равен единице, то он не записывается в тексте программы;
<группа операторов> - это повторяющиеся действия;
Next – ключевое слово, после которого цикл снова идет к своему началу или завершается.
Для вывода на экран значения суммы будем использовать функцию MsgBox(), которая вызывает диалоговое окно с сообщением.
Создадим на листе кнопку и назовем ее Счет. Откроем редактор исходного кода и введем переменную для обозначения суммы (Sum) типа Integer. Ввод и описание переменных производится в особой области исходного кода General_Declarations (Рис.18). Dim – определить (ключевое слово Visual Basic), далее Sum – это имя переменной, As Integer - определение типа данной переменной как целой.
Рис.18
Для щелчка по кнопке Счет1 запишем программный код, показанный на рис. 19.
Рис.19
Поясним эту запись:
Sum = 0 переменной Sum присваиваем значение 0.
For i =1 To 9 счетчик пробегает значения от 0 до 10;
Sum = Sum + I при каждом изменении счетчика сумма будет увеличиваться на значение равное i.
MsgBox(Sum) - для вывода значения на экран используется функция вывода окна с сообщением.
Задание 5. Рассмотрим пример использования оператора цикла с условием (While-Wend).
Создадим следующий программный фрагмент. На рабочем листе располагаются две кнопки (Старт и Стоп). Также на листе располагается текстовое окно, в котором при щелчке по кнопке Старт начинает постоянно отображаться текущее время. После щелчка по кнопке Стоп постоянное обновление времени останавливается. На рис. 20 показан вид рабочего листа с необходимыми элементами управления.
Рис. 20.
Первый шаг – введем переменную (индикатор остановки обновления времени). Эта переменная должна быть известна как процедуре обработки щелчка по кнопке Старт, так и процедуре обработки щелчка по кнопке Стоп. Введем ее в области General, как и в предыдущем примере.
Dim s As Integer
Далее на рис. 21 приведена процедура обработки события – щелчка по кнопке Старт (CommandButton1).
Рис. 21.
Идея заключается в том, что переменной s присваивается начальное значение 0. Далее в цикле мы будем постоянно выводить текущее время в текстовое окно. При этом, если значение переменной s изменится (с 0 на 1), то вывод текущего времени прекращается. Это изменение происходит при щелчке по кнопке Стоп.
Но сначала о процедуре на рис. 21. Здесь выполняется цикл от строки While 2 > 1 до Wend. А именно, пока выполняется условие (While 2 > 1) выполняются все строки программы до строки Wend (это ключевое слово помечает нижнюю границу цикла). Затем программа возвращается опять к строке While 2 > 1 .
Далее опять выполняются все строки программы до строки - Wend. И, так как условие всегда выполняется, то цикл может выполняться бесконечное число раз. В строке ТекстовоеОкно.Text = Now() происходит обращение к внутренней функции Visual Basic - Now(). Эта функция возвращает текущую дату и текущее время, которые затем присваиваются свойству Text объекта ТекстовоеОкно. Далее по рис.20 следует – DoEvents. Это функция Visual Basic, которая позволяет переключаться на обработку других событий (Events - события). В данном случае программа перейдет к обработке щелчка по кнопке Стоп. Далее в программном фрагменте располагается условие:
If s = 1 Then
Exit Sub
End If
Эта конструкция означает, что если s = 1, то выполняются все строки до End If. В нашей ситуации здесь одна строка Exit Sub, которая означает выход из процедуры. Значение s = 1 может установить только щелчок по кнопке Стоп (рис. 22).
Рис. 22.
После запуска (выхода из режима конструктора и щелчка по кнопке Старт) рабочий лист должен иметь примерно следующий вид (рис. 18).
Задание 6. Рассмотрим программный пример с использованием элемента управления – список (ListBox). На рис.23 показан вид рабочего листа программного фрагмента, который нам предстоит разработать.
Рис. 23.
Основные свойства и методы элемента список аналогичны свойствам и методам элемента поле со списком. Разместим на листе два списка. Дальнейшие шаги – заполнить список несколькими словами примерно поровну. При двойном щелчке мышкой на том или ином элементе этот элемент должен перемещаться в соседний список, а из текущего удаляться. Заполнение списков можно выполнить в предопределенной процедуре Worksheet_Activate( ). Эта процедура всегда выполняется, когда происходит переключение на текущий лист с другого листа (щелчок по корешкам листов в нижней части Рабочего листа Excel).
На рис.24 как показан программный код для данной процедуры.
Рис. 24.
Здесь мы сначала очищаем списки, а затем заполняем их данными. Далее нам необходимо написать процедуры, которые будут автоматически выполняться при двойном щелчке по левому и правому списку. Тексты этих процедур приведены на рис.25 и рис.26.
Рис. 25.
Теперь программный фрагмент готов и Вы можете его протестировать. Отметить только важный момент. Заполнение списков происходит при событии – активизация листа. Это событие происходит тогда, когда производится переход на этот лист с другого листа. Поэтому для работы программы необходимо сначала активизировать какой-нибудь другой лист, а затем вернуться на рассматриваемый.
Рис. 26.
Рассмотрим теперь свойство, которое позволяет разрешать и запрещать доступ к элементам управления. У всех элементов управления есть свойство Enabled . Когда это свойство принимает значение True, то доступ к данному элементу управления разрешен. В противном случае (свойство принимает значение False) доступ к данному элементу запрещен. Наша задача – разместить на листе две кнопки. Далее щелчок по одной из кнопок приводит к тому, что эта кнопка становится недоступной, а к другой кнопке наоборот доступ разрешается. Поэтому введите следующие функции обработки событий – щелчков по кнопкам:
Private Sub Кнопка1_Click()
Кнопка1.Enabled = False
Кнопка2.Enabled = True
End Sub
Private Sub Кнопка2_Click()
Кнопка2.Enabled = False
Кнопка1.Enabled = True
End Sub
Выйдите из режима конструктора, запустите программу на выполнение и пощелкайте по кнопкам.
Теперь рассмотрим работу с линейкой прокрутки. Откройте новый лист, на котором расположите линейку прокрутки и текстовое окно (рис.27).
Рис. 27.
У линейки прокрутки имеются следующие свойства:
Value – значение, соответствующее положению ползунка на линейке прокрутки ;
Max - значение, соответствующее правому крайнему положению ползунка на линейке прокрутки;
Min - значение, соответствующее левому крайнему положению ползунка на линейке прокрутки;
SmallChange – значение, соответствующее изменению Value при щелчках по стрелкам линейки прокрутки;
LargeChange – значение, соответствующее изменению Value при щелчках по полосе линейки прокрутки.
Установим Min = 0, Max =100, SmallChange = 1, LargeChange = 5. Далее введите функцию, которая выполняется при передвижении движка линейки прокрутки:
Private Sub Линейка_Change()
ТекстовоеОкно.Text = Линейка.Value
End Sub
Выйдите из режима конструктора и посмотрите на результат работы программы. Рассмотрим еще один пример. Задача заключается в том, чтобы разместить на листе кнопку, и эта кнопка при попытке навести на нее курсор должна автоматически перемещаться на другое место на рабочем листе. Для этого перейдем в режим конструктора и далее в процедуру Кнопка1_MouseMove(). Эта процедура (рис.28) автоматически выполняется при наведении курсора мыши на кнопку. В приведенном тексте используется внутренняя функция Visual Basic – rnd. Эта функция при обращении к ней выдает случайное число в интервале от 0 до 1. В результате при попадании курсора мыши на кнопку происходит вызов процедуры Кнопка1_MouseMove(). Итог выполнения данной процедуры -положение кнопки меняется (Left – левая граница кнопки, Top - смещение кнопки по вертикали).
Рис. 28.
