- •Содержание
- •Раздел 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. Основные формы записи алгоритмов
- •Понятие "алгоритм"
- •Классификация алгоритмов
- •Способы записи алгоритмов
- •Запись на естественном языке
- •Изображение алгоритма в виде графических символов
- •Представление основных типов алгоритмов в виде блок-схем
Событийная процедура инициализации формы
Процедура инициализации формы запускается при загрузке формы, но перед ее высвечиванием. Обычно в подобной процедуре устанавливаются начальные значения свойств различных элементов управления и, в том числе, создаются списки.
Список можно создать различными способами. Список может быть подготовлен методами объекта Listbox, может содержать значения элементов массива или значения ячеек интервала рабочего листа. Разберем разные способы создания списка.
Первый способ создает список, используя метод AddItem для добавления элемента в объект ListBox.
Private Sub UserForm_Initialize() ' список заполняется методом AddItem Dim p As Object lst_Sheet.Clear 'очистка списка For Each p In Worksheets lst_Sheet.AddItem p.Name 'добавление элемента списка Next p End Sub |
Список очищается и для каждого рабочего листа в список добавляется элемент, значение которого определяется именем листа. В процедуре использован цикл объектного типа. |
Второй способ создает список из двумерного массива.
Private Sub UserForm_Initialize() 'создать список из массива названий листов Dim wSheets As Integer Dim i As Integer Dim Arr() As Variant wSheets = Worksheets.Count lst_Sheet.Clear ReDim Arr(1 To wSheets, 0) For i = 1 To wSheets Arr(i, 0) = Worksheets(i).Name Next i lst_Sheet.List() = Arr() End Sub |
Динамический массив Arr имеет тип Variant. После подсчета количества рабочих листов в книге массив Arr переопределяется как двумерный массив с одним столбцом и с количеством строк, равным количеству рабочих листов. Нумерация строк массива Arr начинается с единицы, а столбцов – с нуля. |
В цикле элементам массива присваиваются имена рабочих листов. Последний оператор процедуры присваивает массиву элементов списка значения массива Arr. Поскольку массив Arr описан как локальная переменная, по окончании процедуры инициализации формы эта переменная теряет свое значение.
Запустив форму Act_Sheet, можно активизировать любой рабочий лист.
Рис. 7.13. Список рабочих листов
На рисунке показан список рабочих листов, созданный при запуске формы Act_Sheet. Лист диаграмм отсутствует в этом списке.
Завершение разработки приложения
После завершения разработки формы для выбора и активизации рабочего листа изменим событийную процедуру нажатия на кнопку Sel_Sheet основной формы Str_An.
Процедура Sel_Sheet_Click должна вызывать форму Act_Sheet и после выбора и активизации рабочего листа должна разбивать введенную в Inp_Box строку текста на слова, записывая их в ячейки активного рабочего листа.
Public Sub word_recording() a = Trim(Inp_Box) & " " n = Len(a) i = 1 m = 2 Do j = InStr(i, a, " ") 'поиск очередного пробела в строке m = m + 1 Cells(m, 1) = Mid(a, i, j – i) If j = n Then 'достигнут конец строки Exit Sub Else i = j + 1 End If Loop End Sub
Private Sub Sel_Sheet_Click() Act_Sheet.Show word_recording End Sub |
Общая процедура word_recording разбивает введенный текст на слова подобно ранее разобранной процедуре Text_Analysis, но не высвечивает полученные слова, а записывает их на активный рабочий лист в столбец A, начиная с ячейки A3. Событийная процедура нажатия на кнопку Sel_Sheet высвечивает форму выбора рабочего листа и запускает процедуру разбивки текста и сохранения слов в ячейках рабочего листа. |
Рис. 7.14. Формы приложения 1 в режиме выполнения