Задание 3.2. Использование оператора цикла с условием
Создадим следующий программный фрагмент. На рабочем листе располагаются две кнопки (Старт и Стоп). Также на листе располагается текстовое окно, в котором при щелчке по кнопке Старт начинает постоянно отображаться текущее время. После щелчка по кнопке Стоп постоянное обновление времени останавливается. На рис. 3.4. показан вид рабочего листа с необходимыми элементами управления.
Рис. 3.4.
Первый шаг – введем переменную (индикатор остановки обновления времени). Эта переменная должна быть известна как процедуре обработки щелчка по кнопке Старт, так и процедуре обработки щелчка по кнопке Стоп. Введем ее в области General, как и в предыдущем примере.
Dim s As Integer
Далее на рис. 3.5. приведена процедура обработки события – щелчка по кнопке Старт ( CommandButton 1).
Рис. 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.
ГЛАВА 4. СВОЙСТВА И МЕТОДЫ ОБЪЕКТОВ EXCEL
До настоящего времени мы рассматривали возможности Visual Basic без особой связи с информацией на рабочем листе. В этом разделе мы познакомимся с объектами VBA, которые позволяют работать с информацией в книгах Excel. Для работы с ячейками Excel в VBA существует объект Range – диапазон. Если установить в качестве параметра объекта Range значение А1, то тем самым мы выбираем объект – ячейка A 1. Для изменения содержимого этой ячейки у объекта Range есть свойство Value. Буквально оно означает значение ячейки ( или группы ячеек). Запись Range("A1"). Value = "Фамилия" позволяет программно внести в эту ячейку слово – Фамилия). Также, если в качестве параметра Range использовать обозначение другой ячейки, то можно обратиться и к ней.
Задание 4.1. ИЗМЕНЕНИЕ СВОЙСТВ ЯЧЕЕК
Наша задача – разработать на рабочем листе следующий программный фрагмент. Создадим командную кнопку (Имя - Ввод). При щелчке по кнопке на рабочем листе должны заполняться информацией следующие ячейки: A 1 - Фамилия, A 2 - Имя, A 3 - Адрес. Для этого в окне программного кода обработки щелчка по кнопке необходимо написать следующие строки:
Альтернативным способом работы с ячейками является объект Cells. Синтаксис использования этого объекта - Cells (номер строки, номер столбца). Так, ячейку A 2 можно выбрать двумя эквивалентными способами : Range (“ A 2”) или Cells (2,1) .
Как известно, рабочая книга – это совокупность рабочих листов. Для работы с листами можно использовать коллекцию объектов - листов текущей книги следующим образом: Worksheets ( номер листа в книге). В качестве примера напишем фрагмент, который устанавливает значения двух ячеек на разных листах( может выполняться по щелчку по кнопке):
Worksheets(3).Cells(5, 1).Value = 5
Worksheets(2).Range(“C5”).Value = “Строка”