- •Содержание
- •Раздел 1. Быстрый старт 2
- •Раздел 2. Редактор Visual Basic 11
- •Immediate Window (окно проверки) 15
- •Раздел 3. Переменные и типы данных 27
- •Раздел 4. Операторы управления 51
- •Раздел 5. Процедуры, подпрограммы и функции 66
- •Раздел 6. Объекты ms Excel 101
- •Раздел 7. Пользовательские формы 139
- •Immediate Window (окно проверки) 177
- •Введение
- •Раздел 1.Быстрый старт Использование макрорекордера
- •Запись макроса
- •Запуск макроса
- •Абсолютные и относительные ссылки Запись формулы на рабочем листе
- •Макрорекордер
- •Диалоговые окна для ввода/вывода данных
- •Функция InputBox
- •Функция MsgBox
- •Раздел 2.Редактор Visual Basic
- •Окна редактора vb
- •Project Window (окно проекта)
- •Properties Window (Окно свойств)
- •Code (окно программы)
- •Immediate Window (окно проверки)
- •Получение справки
- •Запись процедур
- •Режимы работы с программой
- •Ошибки и их обнаружение
- •Отладка
- •Меню и панели инструментов Visual Basic
- •Панели инструментов Стандартная панель инструментов
- •Панель инструментов отладки
- •Раздел 3.Переменные и типы данных Объявление переменных
- •Важность объявления переменных
- •Область видимости переменных
- •Время жизни переменных
- •Инициализация переменных
- •Операции с элементарными данными
- •Оператор присваивания
- •Выполнение операций
- •Арифметические операции
- •Операции сравнения
- •Оператор Like
- •Логические операции
- •Символьные операции
- •Приоритет операций
- •Операции с другими типами данных
- •Объектные переменные
- •Массивы
- •Динамические массивы
- •Пользовательский тип
- •Раздел 4.Операторы управления
- •Условный оператор If
- •Оператор выбора Select Case
- •Операторы цикла
- •Цикл For…Next
- •Цикл For Each…Next
- •Оператор Set
- •Цикл Do…Loop
- •Цикл While…Wend
- •Раздел 5.Процедуры, подпрограммы и функции
- •Классификация процедур
- •Структура и объявление процедуры
- •Синтаксис объявления процедуры общего типа
- •Синтаксис объявления функции
- •Вызов процедуры
- •Параметры и аргументы
- •Возврат значения функции
- •Использование процедур-функций на рабочем листе
- •Поименованные аргументы
- •Использование необязательных аргументов
- •Использование параметра ParamArray
- •Вызов процедур другого проекта
- •Автопроцедуры
- •Событийные процедуры
- •Рекурсивные процедуры
- •Встроенные функции Классы функций
- •Использование табличных функций
- •Организация интерфейса при помощи встроенных функций
- •Функция MsgBox
- •Функция InputBox
- •Строковые функции
- •Примеры на использование различных строковых функций Функция Format
- •Функция Val
- •Функции Len, Mid
- •Функция Left
- •Функция Instr
- •Функция Chr
- •Математические функции
- •Функции Int и Fix
- •Функция Log
- •Функции Randomize и Rnd
- •Функции даты и времени
- •Примеры функций даты и времени Функции Day, Month, Year, DateSerial
- •Функции Now, Time, Timer
- •Функция WeekDay
- •Функции Hour, Minute, Second
- •Раздел 6.Объекты ms Excel
- •Свойства объектов
- •Методы объектов
- •Модель объектов
- •Коллекции объектов
- •Обращение к объекту Контейнеры
- •Ссылка на объект
- •Оператор With
- •Использование объектных переменных
- •Объект Application
- •Активные объекты
- •Свойства, влияющие на высвечивание на экране Свойство DisplayAlerts (r/w Boolean)
- •Свойства DisplayFormulaBar (r/w Boolean), DisplayStatusBar (r/w Boolean)
- •Свойство ScreenUpdating (r/w Boolean)
- •Свойства Top, Left, Height, Width, UsableWidth, WindowState
- •Свойство Visible (r/w Boolean)
- •Другие свойства объекта Application
- •Методы Метод Calculate
- •Метод CheckSpelling
- •Метод OnTime
- •Метод Wait
- •Коллекции объектов
- •Объекты Workbooks и Workbook
- •Событийные процедуры
- •Объекты Sheets, WorkSheets и WorkSheet
- •Свойства Свойство Name (r/w String)
- •Свойство Type (r/o String)
- •Свойство UsedRange
- •Свойства Next и Previous
- •Свойство Parent
- •Свойство Visible (r/w Boolean)
- •Методы Метод Add
- •Методы Move и Select
- •Событийные процедуры
- •Объект Range
- •Свойства Cвойство Range
- •Свойство Cells
- •Свойство Offset
- •Метод Union и свойство Areas
- •Свойства Column и Row (r/o Integer)
- •Свойства Columns и Rows
- •Свойство CurrentRegion
- •Cвойства, связанные с шириной и высотой ячейки
- •Методы Методы Select и Activate
- •Метод Clear
- •Цветовое оформление объекта Range Свойство ColorIndex
- •Свойство Color
- •Раздел 7.Пользовательские формы
- •Режимы работы с формой
- •Режим конструктора
- •Элементы управления
- •Событийные процедуры
- •Режим выполнения
- •Объекты UserForm и Controls
- •Разработка приложения
- •Приложение 1
- •Конструирование начальной формы
- •Свойства формы и элементов управления
- •Создание событийных процедур
- •Конструирование формы для выбора рабочего листа
- •Создание событийных процедур
- •Элемент ListBox
- •Событийная процедура инициализации формы
- •Завершение разработки приложения
- •Связь формы с ячейками рабочего листа
- •Элемент TextBox
- •Элемент ListBox
- •Приложение 2
- •Конструирование форм
- •Процедуры
- •Приложение a. Справочная система Просмотр объектов, их свойств и методов (Object Browser)
- •Окно Object Browser
- •Панель инструментов Object Browser
- •Выход из Object Browser
- •Интерактивная подсказка
- •Приложение b. Инструментальные средства отладки программ
- •Контрольные точки или точки останова
- •Трассировка или пошаговое выполнение программы
- •Использование объекта Debug
- •Окна отладчика
- •Immediate Window (окно проверки)
- •Окно значения переменной
- •Locals Window (окно локальных переменных)
- •Окно контрольных значений (Watches)
- •Приложение c. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Процедуры
Так как в начальной форме el_watch_custom пользователь устанавливает цвет электронных часов и определяет способ отсчета времени (вперед или назад), которые используются в вызываемой форме, то в стандартном модуле Module1 неоходимо объявить
Public up_down As Boolean 'порядок отсчета Public p As Long 'номер цвета |
две глобальные переменные up_down и p. Процедура el_watch расположена в модуле Module1 и вызывает начальную форму. |
Public Sub el_watch() el_watch_custom.Show End Sub |
На процедурном листе формы el_watch_custom разместим событийные процедуры.
Private Sub UserForm_Initialize() theColors.ColumnCount = 2 theColors.AddItem "red" theColors.List(0, 1) = RGB(255, 0, 0) theColors.AddItem "yellow" theColors.List(1, 1) = vbYellow theColors.AddItem "blue" theColors.List(2, 1) = RGB(0, 0, 255) theColors.AddItem "green" theColors.List(3, 1) = RGB(0, 255, 0) theColors.AddItem "magenta" theColors.List(4, 1) = vbMagenta theColors.AddItem "cyan" theColors.List(5, 1) = vbCyan p = 0 Frame1.ControlTipText = "Вперед или назад" End Sub |
Процедура выполняется при инициализации формы. Список цветов theColors формируется методом AddItem. Список состоит из двух столбцов: первый столбец – название цвета, второй – число, определяющее цвет. Нумерация строк и столбцов списка начинается с нуля |
Метод AddItem устанавливает только значение первого столбца добавляемой строки. Значение второго столбца этой строки – цвет, устанавливается при помощи функции RGB (возможно использование констант vb).
Элемент управления Frame1 служит для объединения в группу двух переключателей Count_Up и Count_Down. Помещенные в рамку, они автоматически становятся взаимоисключающими, т. е. при выборе одного из них (Value=True) другой сразу же получает значение False и отключается.
Заголовок на верхней границе рамки Frame1 задается свойством Caption. Cвойство ControlTipText, установленное для рамки Frame1, при наведении курсора на рамку вызывает появление краткой подсказки "Вперед или назад".
Private Sub Cmd_exit_Click() Unload el_watch_custom End Sub
|
Процедура Cmd_exit_Click выполняется при нажатии на кнопку Exit. Активная форма выгружается и приложение завершается. |
Private Sub Count_Down_Click() up_down = Count_Up.Value Count_Down.Value = False Frame1.Caption = "Down" ew.Show End Sub |
Процедура Count_Down_Click выполняется при нажатии на переключатель Count_Down. |
После выбора переключателя Count_Down переключатель Count_Up равен False и поэтому глобальная переменная up_down получает значение False.
Далее в процедуре переключатель Count_Down получает значение False, надпись на рамке Frame1 устанавливается в Down и загружается и высвечивается вторая форма ew.
Private Sub Count_Up_Click() up_down = Count_Up.Value Count_Up.Value = False Frame1.Caption = "Up" ew.Show End Sub |
Процедура Count_Up_Click выполняется при нажатии на переключатель Count_Up. |
В процедуре глобальная переменная up_down получает значение True, надпись на рамке Frame1 устанавливается в Up. Далее переключатель Count_Up получает значение False и загружается и высвечивается вторая форма ew.
Private Sub theColors_Click() If theColors.ListIndex > -1 Then p = theColors.List(theColors.ListIndex, 1) Else p = RGB(255, 255, 255) End If End Sub |
Процедура theColors_Click выполняется при щелчке на список theColors.
|
Если выбрана некоторая строка из списка цветов, то переменная p устанавливается в число, соответствующее выбранному из списка цвету (столбец с индексом 1 выбранной строки списка). В противном случае переменная p получает значение, соответствующее черному цвету.
На процедурном листе формы ew разместите событийные процедуры и общую процедуру e_watch.
Public Sub e_watch() Dim n As Integer Dim startTime As Date, stopTime As Date cmd_Go.Visible = False watch.Visible = True watch.BackColor = p left_but.Visible = True right_but.Visible = True startTime = Time stopTime = TimeSerial(Hour(startTime), Minute(startTime), Second(startTime) + sec.Value+1) n = 1 Do If up_down Then watch.Caption = TimeSerial(Hour(startTime), Minute(startTime), Second(startTime) + n) Else watch.Caption = TimeSerial(Hour(stopTime), Minute(stopTime), Second(stopTime) – n) End If ew.Repaint Application.Wait TimeSerial(Hour(Time), Minute(Time), Second(Time) + 1) n = n + 1 Loop While Time < stopTime cmd_Go.Visible = True watch.Visible = False End Sub
|
Процедура e_watch вызывается из событийных процедур нажатия на кнопку Start или нажатия на свободное пространство формы ew. Процедура делает невидимой кнопку старта, делает видимыми область для высвечивания времени, командную кнопку выбора новых установок и выключатели, устанавливает начальное время и рассчитывает конечное время. Цвет фона часов устанавливается в значение глобальной переменной p. В цикле обновляется время, увеличиваясь или уменьшаясь на секунду, и модифицируется форма. По окончании процедуры кнопка старта становится видимой, а часы отключаются. |
Цикл выполняется до тех пор, пока время не превысит расчетное при отсчете времени вперед или не станет меньше начального при отсчете назад. Направление отсчета зависит от значения глобальной переменной up_down. |
|
Private Sub UserForm_Initialize() left_but.Visible = False right_but.Visible = False watch.Visible = False cmd_Go.SetFocus sec = 5 ew.Top = 250 ew.Left = 250 End Sub |
Процедура инициализации формы делает невидимыми часы и выключатели, устанавливает фокус на кнопку старта, чтобы пользователь мог воспользоваться клавишей Enter для пуска часов. |
Свойства Top и Left устанавливают смещение диалогового окна таким образом, чтобы при работе были видны обе загруженные формы. По умолчанию для хода часов устанавливается 5 секунд. |
|
Private Sub cmd_new_select_Click() 'Me.Hide ew.Hide End Sub |
Процедура cmd_new_select скрывает форму ew на время установки новых настроек пользователя. |
Private Sub cmd_GO_Click() e_watch End Sub
Private Sub UserForm_Click() e_watch End Sub
|
Процедуры cmd_GO_Click и UserForm_Click вызывают общую процедуру e_watch, запускающую часы. |
Private Sub left_but_Click() up_down = False e_watch End Sub
Private Sub right_but_Click() up_down = True e_watch End Sub
|
Процедуры left_but_Click и right_but_Click обрабатывают события нажатия на выключатели. Включен или выключен элемент ToggleButton определяется положением кнопки: "нажата" или "отжата". |
В форме оба выключателя снабжены стрелками, обозначающими отсчет назад (стрелка влево) или отсчет вперед (стрелка вправо). При нажатии стрелки влево выполняется процедура left_but_Click, в которой глобальная переменная up_down устанавливается в False, а при нажатии стрелки вправо выполняется процедура right _but_Click, в которой глобальная переменная up_down устанавливается в True. В обоих процедурах вызывается общая процедура e_watch, запускающая часы.
Рис. 7.16. Формы приложения 2 в режиме выполнения