- •Глава 1. Составление и решение алгоритмов
- •Типы алгоритмов
- •Глава 2. Среда для написания программ на vba
- •2.1. Элементы управления. Командная кнопка и текстовое окно
- •2.2. Список и поле со списком
- •2.3. Линейка прокрутки
- •2.4. Рисунок
- •Глава 3. Примеры программирования на vba
- •Глава 4. Свойства и методы объектов excel
- •Задание 4.2. Разработка бланка заказа
- •Задание 4.4. Разработка автоматизированного бланка
- •Задание 4.5. Изменение цвета объекта
- •Глава 5. Выполнение самостоятельной работы
- •Список литературы, рекомендуемой для чтения
- •Интернет-ресурсы
- •Программирование в microsoft excel
2.4. Рисунок
Элемент управления Рисунок (Image) служит контейнером для размещения рисунка. Свойство Picture определяет, какой рисунок вставлен в контейнер – рис. 2.18. Свойство PictureSizeMode позволяет устанавливать нужный размер рисунка. Значение этого свойства 1- fmPictureSizeModeStretch позволяет сохранить пропорции рисунка. Для помещения рисунка в контейнер используется метод LoadPicture. Пример записи:
Image1.Picture = LoadPicture("c:\Windows\Паркет.bmp")
В скобках, в кавычках, указывается полный путь к файлу и название файла с указанием расширения рисунка.
Будьте внимательны с указанием расширения рисунка - у разных типов рисунков оно разное. Например, в папке Windows хранятся рисунки для оформления Рабочего стола. Эти рисунки имеют расширения .bmp. Примеры расширений графических файлов: .TIFF; .PNG; .GIF; .BMP.
Для удаления рисунка используется программный код:
Image1.Picture = LoadPicture("")
Две кавычки означают, что рисунка в контейнере нет.
Рис. 2.18
Выполните упражнение. Создайте программный фрагмент, показанный на рис. 2.18. Запишите программные коды для командных кнопок для размещения и удаления картинки в контейнере Image.
Глава 3. Примеры программирования на vba
В этом разделе рассмотрим примеры, поясняющие возможности VBA. Первая задача – разобраться с работой операторов цикла. Цикл – это повторяющиеся действия. Циклы бывают разных типов: циклы с условием, циклы с предусловием, циклы с известным числом повторений. Цикл с условием выполняется, пока не наступит некоторое событие – например, некоторая переменная примет заданное значение. Цикл с известным числом повторений будет повторяться, пока некоторая переменная, называемая счетчиком, не «пробежит» заданный диапазон значений – от начального до конечного. Рассмотрим работу двух типов цикла.
Задание 3.1. Разработаем программный фрагмент следующего содержания. На рабочем листе располагается кнопка, при нажатии на которую происходит подсчет суммы всех чисел, начиная от 1 до 10 . На рис. 3.1 показан результат действия этой программы- после щелчка по кнопке появляется окно с сообщением о подсчитанной сумме.
Рис.3.1
Применим оператор цикла с известным числом повторений. Синтаксис этого цикла следующий:
For <i = начальное значение> To <конечное значение> Step
<группа операторов>
Next
Где i - переменная типа счетчик;
Step – шаг изменения переменной типа счетчик. Если шаг равен единице, то он не записывается в тексте программы;
<группа операторов> - это повторяющиеся действия;
Next – ключевое слово, после которого цикл снова идет к своему началу или завершается.
Для вывода на экран значения суммы будем использовать функцию MsgBox(), которая вызывает диалоговое окно с сообщением.
Создадим на листе кнопку и назовем ее Счет. Откроем редактор исходного кода и введем переменную для обозначения суммы (Sum) типа Integer. Ввод и описание переменных производится в особой области исходного кода General_Declarations (Рис.3.2). Dim – определить (ключевое слово Visual Basic), далее Sum – имя переменной, As Integer - определение типа данной переменной как целого числа.
Рис.3.2.
Для щелчка по кнопке Счет1 запишем программный код, показанный на рис. 3.3.
Рис.3.3.
Поясним эту запись:
Sum = 0’ переменной Sum присваиваем значение 0.
For i =1 To 10’ счетчик пробегает значения от 0 до 10;
Sum = Sum + i’ при каждом изменении счетчика сумма будет увеличиваться на значение равное i.
MsgBox(Sum) - для вывода значения на экран используется функция вывода окна с сообщением.
Задание 3.2. Использование оператора цикла с условием
Создадим следующий программный фрагмент. На рабочем листе располагаются две кнопки (Старт и Стоп). Также на листе располагается текстовое окно, в котором при щелчке по кнопке Старт начинает постоянно отображаться текущее время. После щелчка по кнопке Стоп постоянное обновление времени останавливается. На рис. 3.4. показан вид рабочего листа с необходимыми элементами управления.
Рис. 3.4.
Первый шаг – введем переменную (индикатор остановки обновления времени). Эта переменная должна быть известна как процедуре обработки щелчка по кнопке Старт, так и процедуре обработки щелчка по кнопке Стоп. Введем ее в области General, как и в предыдущем примере.
Dim s As Integer
Далее на рис. 3.5. приведена процедура обработки события – щелчка по кнопке Старт (CommandButton1).
Рис. 3.5.
Идея заключается в том, что переменной s присваивается начальное значение 0. Далее в цикле мы будем постоянно выводить текущее время в текстовое окно. При этом, если значение переменной s изменится (с 0 на 1), то вывод текущего времени прекращается. Это изменение происходит при щелчке по кнопке Стоп.
Но сначала о процедуре на рис. 3.5. Здесь выполняется цикл от строки While 2 > 1 до Wend. А именно, пока выполняется условие (While 2> 1), выполняются все строки программы до строки Wend (это ключевое слово помечает нижнюю границу цикла). Затем программа возвращается опять к строке While 2 > 1 .
Далее опять выполняются все строки программы до строки - Wend. И, так как условие всегда выполняется, то цикл может выполняться бесконечное число раз. В строке ТекстовоеОкно.Text = Now() происходит обращение к внутренней функции Visual Basic - Now(). Эта функция возвращает текущую дату и текущее время, которые затем присваиваются свойству Text объекта ТекстовоеОкно. Далее по рис.3.5 следует – DoEvents. Это функция Visual Basic, которая позволяет переключаться на обработку других событий (Events - события). В данном случае программа перейдет к обработке щелчка по кнопке Стоп. Далее в программном фрагменте располагается условие:
If s = 1 Then
Exit Sub
End If
Эта конструкция означает, что если s = 1, то выполняются все строки до End If. В нашей ситуации здесь одна строка Exit Sub, которая означает выход из процедуры. Значение s = 1 может установить только щелчок по кнопке Стоп (рис. 3.6).
Рис. 3.6.
После запуска (выхода из режима конструктора и щелчка по кнопке Старт) рабочий лист должен иметь вид, показанный на рис.3.4.
Задание 3.3. Рассмотрим программный пример с использованием элемента управления список (ListBox). На рис.3.7 показан вид рабочего листа программного фрагмента, который нам предстоит разработать.
Рис. 3.7.
Основные свойства и методы элемента список аналогичны свойствам и методам элемента поле со списком. Разместим на листе два списка. Дальнейшие шаги – заполнить список несколькими словами примерно поровну. При двойном щелчке мышкой на том или ином элементе этот элемент должен перемещаться в соседний список, а из текущего удаляться. Заполнение списков можно выполнить в предопределенной процедуре Worksheet_Activate(). Эта процедура всегда выполняется, когда происходит переключение на текущий лист с другого листа (щелчок по корешкам листов в нижней части Рабочего листа Excel).
На рис. 3.8. показан программный код для данной процедуры.
Рис. 3.8.
Здесь мы сначала очищаем списки, а затем заполняем их данными. Далее нам необходимо написать процедуры, которые будут автоматически выполняться при двойном щелчке по левому и правому списку. Тексты этих процедур приведены на рис.3.9 и рис.3.10.
Рис. 3.9.
Теперь программный фрагмент готов и Вы можете его протестировать. Отметить только важный момент. Заполнение списков происходит при событии – активизация листа. Это событие происходит тогда, когда производится переход на этот лист с другого листа. Поэтому для работы программы необходимо сначала активизировать какой-нибудь другой лист, а затем вернуться на рассматриваемый.
Рис. 3.10.
Задание 3.4. Рассмотрим теперь свойство, которое позволяет разрешать и запрещать доступ к элементам управления. У всех элементов управления есть свойство 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
Выйдите из режима конструктора, запустите программу на выполнение и пощелкайте по кнопкам.
Задание 3. 5. Рассмотрим еще один пример. Задача заключается в том, чтобы разместить на листе кнопку, и эта кнопка при попытке навести на нее курсор должна автоматически перемещаться на другое место на рабочем листе. Для этого перейдем в режим конструктора и далее в процедуру Кнопка1_MouseMove(). Эта процедура (рис. 3.11) автоматически выполняется при наведении курсора мыши на кнопку. В приведенном тексте используется внутренняя функция Visual Basic – rnd. Эта функция при обращении к ней выдает случайное число в интервале от 0 до 1. В результате при попадании курсора мыши на кнопку происходит вызов процедуры Кнопка1_MouseMove(). Итог выполнения данной процедуры -положение кнопки меняется (Left – левая граница кнопки, Top - смещение кнопки по вертикали).
Рис. 3.11.
