- •Н.Г.Куфтинова программирование в среде vba
- •Н.Г.Куфтинова программирование в среде vba
- •Оглавление
- •Введение
- •Разработка алгоритма. Блок-схема. Структуры алгоритмов
- •Понятие алгоритма. Структуры алгоритмов
- •3. Базовая структура цикл.
- •Контрольные вопросы
- •Представление данных в памяти,типы данных, идентификаторы, переменные, массивы
- •Программный способ записи алгоритмов
- •Представление данных в памяти
- •Типы данных
- •Идентификаторы, переменные, массивы
- •Операции, выражения, операторы
- •Контрольные вопросы
- •Структура программ на vba, операторы описания, присваивания
- •Структура программ на vba
- •Операторы описания
- •Oператоры присваивания
- •Контрольные вопросы
- •Понятие макроса, создание, отладка программы
- •Понятие макроса. Создание макроса
- •4.2. Отладка, использование среды для отладки программ
- •Средства отладки
- •Обработка ошибок выполнения
- •Перехват ошибок
- •4.6. Общие сведения о перехвате ошибок
- •Контрольные вопросы
- •Управляющие структуры vba
- •Конструкция If . . . Then
- •Конструкция If . . . Then . . . Else
- •Конструкция Select Case
- •Контрольные вопросы
- •Операторы цикла. Вложенные циклы
- •Операторы цикла
- •Вложенные циклы
- •Контрольные вопросы
- •Символьные данные. Операции и функции для работы с символьными данными
- •Символьные данные
- •Операции и функции для работы с символьным данными
- •Булевские вектора и операции для работы с ними
- •Контрольные вопросы
- •Подпрограмма-процедура
- •Общие процедуры
- •Создание новых процедур
- •Просмотр существующих процедур
- •9.4. Вызов процедур Sub
- •Процедуры в стандартных модулях
- •Подпрограмма-функция
- •10.1 Вызов процедур Function
- •10.2. Механизмы передачи параметров. Типы данных параметров. Передача параметров по значению
- •10.3. Передача параметров по ссылке
- •10.4. Неизвестное число параметров
- •10.5. Рекурсия
- •Контрольные вопросы
- •Использование объектов, их свойства и методы. Формы
- •Работа с объектами
- •Происхождение объектов. Основы работы с объектами
- •Установка значений свойств
- •Получение значений свойств
- •Использование методов в коде
- •Взаимосвязь объектов
- •Применение свойств и методов к членам наборов
- •Общие наборы в vba
- •Разработка формы. События и методы формы
- •Связь между объектами. Создание объектов. Использование и объявление переменных для объектов
- •Формы как объекты. Объект fso
- •Контрольные вопросы
- •12. Элементы управления в приложениях vba
- •12.1. Кнопки управления
- •12.2. Метки
- •12.3. Текстовые поля
- •12.4. Работа с текстом в текстовом поле
- •12.5. Флажки
- •12.6. Создание групп переключателей. Выбор переключателей
- •12.7. Комбинированные окна и списки
- •12.8. Полосы прокрутки как устройства ввода
- •12.9. Графическое окно в качестве контейнера
- •12.10. Элемент управления Image
- •12.11. Другие элементы управления
- •Контрольные вопросы
- •Литература
- •Приложение 1
- •2. Математические функции
- •4. Операторы циклов
- •Часть1. Обработка одномерного массива
- •Часть 2. Обработка двумерного массива
- •Приложение 2
12.9. Графическое окно в качестве контейнера
Графическое окно может также выполнять функции контейнера для других элементов управления. Как и в случае с рамкой (frame control) можно поместить другие элементы управления в графическое окно. Помещенные элементы управления будут перемещаться вместе с графическим окном, а их свойства тор и Left будут подчинены ему, а не форме,
Обыкновенно графическое окно в качестве контейнера используют для того, чтобы создать панель инструментов или строку состояния. Туда можно поместить элементы управления Image, чтобы они выступали в качестве кнопок, или добавить метки для отображения сообщений о состоянии. Устанавливая значение свойства Align (Выровнять) равным тор (Верх), Bottom (Низ), Left (Лево) или Right (Право) можно "прикрепить" графическое окно к соответствующему краю формы.
12.10. Элемент управления Image
Картинки загружаются в объект image: во время разработки - назначением имени файла и пути свойству picture, во Время выполнения - посредством функции LoadPicture.
При изменении размеров элементы управления Image и Picture ведут себя по-разному. Установка значения свойства Autosize объекта picture равным True приводит к тому, что размеры Графического окна изменяются в соответствии с размерами выводимой картинки; если значение этого свойства равно False, то картинка усекается (видна только ее часть). Объект Image не имеет свойства Autosize, а обладает свойством Stretch (Растягивание). Присвоение этому свойству значения False (значение по умолчанию) приводит к тому, что размеры элемента управления изменяются в соответствии с размерами картинки. Если свойство stretch равно True, то размеры картинки изменяются до размеров элемента управления Image, что может привести к искажению картинки при ее отображении.
Объект image распознает событие click, что предоставляет удобный способ создания кнопок с картинками вместо кнопок с надписями. Объединение нескольких элементов управления Image в горизонтальном направлении вверху экрана (обычно внутри графического окна) в группу позволяет создавать панели инструментов приложения.
12.11. Другие элементы управления
В Панель элементов управления VBA включены несколько других стандартных элементов управления. Некоторые из них полезны для работы с большим объемом данных, содержащихся во внешних базах данных. Другие полезны для доступа к файловой системе Windows. Третьи элементы управления не подходят ни под одну из категорий, однако достаточно полезны при разработке приложений.
В приложениях VBA можно использовать элементы управления АсtiveX, называвшихся ранее элементами управления OLE, точно таким же образом, как используются и стандартные элементами управления. В версии VB Professional и Enterprise включены некоторые элементы управления ActiveX, а также возможность построения собственных элементов управления программиста. Дополнительные элементы управления ActiveX для любых вообразимых целей можно приобрести у многочисленных поставщиков этого продукта.
В VBA также включены некоторые другие полезные элементы управления, которые, однако, не относятся ни к одной из рассмотренных выше групп;
- Элемент управления Timer (Таймер) можно использовать для создания в приложении события через повторяющийся интервал времени. Это удобно для выполнения кода без взаимодействия с пользователем.
- Элемент управления OLE Container (Контейнер OLE) обеспечивает легкий способ добавления в приложение возможностей связывания (linking) и внедрения (embedding). Посредством этого элемента управления можно обеспечить доступ к выполняемым функциям любого приложения, поддерживающего OLE технологию, например Microsoft Excel, Word и многих других.
- Элемент управления Common dialog (Общий диалог) добавляет в приложение встроенные диалоговые оюна (built-in dialog boxes) для выбора файлов, цветов, шрифтов, функций печати.
Объект, имеющий фокус, может получать вводимую пользователем с помощью мыши и клавиатуры информацию. В системе Microsoft Windows одновременно могут выполняться несколько приложений, но только у приложения, имеющего фокус, будет активный заголовок окна (active title bar) (выделен повышенной яркостью), и только оно может взаимодействовать с пользователем. На форме приложения VBA с несколькими полями ввода только поле ввода, имеющее фокус, будет отображать вводимый с клавиатуры текст.
Когда объект получает или теряет фокус, происходят соответственно события GotFocus и LostFocus. Формы и большинство элементов управления поддерживают эти события.
Объекту можно передать фокус несколькими способами:
- Выбрать объект с помощью мыши во время выполнения
- Выбрать объект с помощью клавиши доступа во время выполнения
- Из программного кода с помощью метода set Focus
Всегда можно определить, имеет ли объект фокус. Например, когда кнопка управления имеет фокус, обрамление ее надписи отображается с повышенной яркостью.
Объект может получить фокус, только если его свойства Enabled (Разрешено) и visible (Видимый) установлены в True. Свойство Enabled (Разрешено) позволяет объекту реагировать на инициированные пользователем события, например, ввод с клавиатуры и нажатие кнопок мыши. Свойство visible (Видимый) определяет, виден ли объект на экране.
Событие Validate элементов управления
Элементы управления имеют событие validate (Проверка достоверности), которое происходит перед тем, как элемент управления теряет фокус. Однако это событие возникает, только если свойство CausesValidation элемента управления перед получением фокуса имеет значение True. Событие Validate происходит перед потерей фокуса, поэтому во многих случаях оно более подходит для проверки достоверности данных (data validation), чем событие LostFocus.
Элементы управления, которые не могут получить фокус
Некоторые элементы управления не могут получать фокус. К ним относятся облегченные графические элементы управления:
- Frame (Рамка)
- Image (Изображение)
- Label (Метка)
Кроме этих элементов управления не могут получить фокус и неотображаемые элементы управления.
Установка последовательности перехода
Последовательность перехода (tab order) - это последовательность перехода от одного элемента управления к другому при нажатии клавиши ТаЬ. У каждой формы своя последовательность перехода. Обычно она соответствует последовательности создания элементов управления.
Пусть создаются два поля ввода, Textl и Text2, а затем - кнопка управления Commandl. При запуске приложения поле ввода Textl имеет фокус.
Нажатие клавиши Tab перемещает фокус между элементами управления в той последовательности, в которой они создавались.
Для изменения последовательности перехода необходимо установить свойство TabIndex элемента управления, которое определяет его позицию в последовательности перехода при нажатии клавиши Таb. По умолчанию значение свойства Tabindex элемента управления, созданного на форме первым, равно 0, элемента, созданного вторым - 1 и т. д. При изменении позиции элемента управления в последовательности переходов VBA автоматически перенумеровывает позиции других элементов управления, отражая вставку в другую позицию или удаление из последовательности перехода элемента управления. Например, если кнопка управления command1 в предыдущем примере становится первой в последовательности переходов, то значения свойства TabIndex других элементов управления автоматически перенумеровываются.
Наибольшее значение свойства Tabindex всегда на единицу меньше числа элементов в последовательности перехода, так как нумерация начинается с нуля. Даже если случайно значение свойства Tabindex окажется больше числа элементов управления, VBA переустановит это значение так, чтобы оно было на единицу меньше числа элементов управления.
Для организации Windows диалога следует проделать следующие действия:
1. Функция InputBox (для ввода строки текста в программу c помощью окна диалога Windows):
- формат вызова функции:
Dim s As String
S=InputBox («приглашение»,[«значение по умолчанию»])
- функции преобразования чисел в типы данных:
CInt(s) – Integer, CLng(s) – Long, CSng(s) – Single, CDbl(s) – Double, CDate(s) – Date, Cvar – Variant
2. Функция MsgBox (для организации диалога с пользователем):
- формат вызова функции:
response=MsgBox(«Текст сообщения»,флаги, «Заголовок»)
- аргументы функции:
- «Текст сообщения» – сообщение пользователю,
- флаги – комбинация системных констант VBA для вывода кнопок и пиктограммы к сообщению (vb…) (таблица 13.):
Системные константы
Таблица 13.
Константа |
Назначение |
vbOKOnly |
кнопка «ОК» |
vbOKCancel |
кнопки «ОК», «Отмена» |
VbAbortRetryIgnore |
кнопки «Отменить», «Повторить», «Игнорировать» |
VbYesNoCancel |
кнопки «Да», «Нет», «Отмена» |
VbYesNo |
кнопки «Да», «Нет» |
VbRetryCancel |
кнопки «Повторить», «Отмена» |
VbCritical |
пиктограмма |
VbQuestion |
пиктограмма |
VbExclamation |
пиктограмма |
vbInformation |
пиктограмма |
- при закрытии диалога в переменную response возвращается код нажатой кнопки (таблица 14.):
Коды кнопок
Таблица 14.
Кнопка |
Код |
«ОК» |
vbOK |
«Cancel» |
vbCancel |
«Отменить» |
vbAbort |
«Повторить» |
vbRetry |
«Игнорировать» |
vbIgnore |
«Да» |
vbYes |
«Нет» |
vbNo |
- ”Заголовок” – текст для заголовка окна (необязателен).
Пример 1. Функция MsgBox (рис 38.)
Сообщение в модуле - Insert / Module
Рисунок 38. Применение функции MsgBox.
Пример 2. Вычисление и вывод суммы (рис. 39.)
Рисунок 39. Применение функции MsgBox.
Пример 3. Функция InputBox (рис. 40.)
Рисунок 40. Применение функции IntBox.