У вас вопросы?
У нас ответы:) SamZan.net

VB Excel Объекты свойства и методы

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 3.2.2025

Вопрос  14.  VBA Excel. Объекты, свойства и методы.

Одним из основных понятий VBA является объект. Объект – это то, чем вы управляете с помощью программы на языке VBA, например, форма, кнопка, рабочий лист или диапазон ячеек MS Excel. Каждый объект обладает некоторыми свойствами. Например, форма может быть видимой или невидимой  в данный момент на экране. Другой пример свойства объекта – шрифт для отображения информации в ячейке (объекте) рабочего листа.

Объект содержит также список методов, которые к нему применимы. Методы – это то, что вы можете делать с объектом. Например, показать форму на экране или убрать её можно с помощью методов Show и Hide.

Таким образом, объект – это программный элемент, который имеет свое отображение на экране, содержит некоторые переменные, определяющие его свойства, и некоторые методы для управления объектом. Например, в MS Excel имеется много встроенных объектов:

Range(“Адрес”)

- диапазон ячеек (может включать только одну ячейку).

Cells(i, j)

- ячейка, находящаяся на пересечении i-й строки и j-го столбца рабочего листа MS Excel (i и j – целые числа).

Rows(№ строки)

- строка с заданным номером.

Columns(№ столбца)

- столбец с заданным номером

Sheets(“Имя”)

- лист с указанным именем.

Sheets(№ листа)

- лист с указанным номером.

WorkSheet 

- рабочий лист.

Установка значений свойств – это один из способов управления объектами. Синтаксис установки значения свойства объекта следующий:

Объект. Свойство = Выражение

Основным свойством объектов Cells и Range, является Value (значение), которое, однако, можно не указывать. Например:

Range(“A5:A10”). Value = 0  или  Range(“A5:A10”) = 0 – в диапазон ячеек A5:A10 заносится значение 0.

Cells(2, 4). Value  = n   или  Cells(2, 4) = n – в ячейку, находящуюся на пересечении 2-й строки и 4-го столбца (ячейка с адресом “D2”), заносится значение переменной n.

Синтаксис чтения свойств объекта следующий:

Переменная = Объект. Свойство

Например:

Xn = Cells(1, 2).Value  или Xn = Range(“B1”).Value – переменной Xn присваивается значение  из ячейки B1 текущего рабочего листа.

Синтаксис применения методов к объекту:

Объект. Метод

Например:

Sheets(2).Activate – сделать активным лист с №2.

Sheets(“Диаграмма”).Delete – удалить лист с именем “Диаграмма”.

Range("A5:A10").Clear – очистить диапазон ячеек A5:A10.

Range("A2:B10").Select –  выделить диапазон ячеек A2:B10.

В MS Excel имеются объекты, которые содержат другие объекты. Например, рабочая книга содержит рабочие листы, рабочий лист содержит диапазон ячеек и т.д. Объектом самого высокого уровня является Application(приложение). Если вы изменяете его свойства или  вызываете его методы, то результат применяется к текущей работе MS Excel. Например:

Application.Quit -  завершение работы с Excel.

Отметим, что точка после имени объекта  может использоваться для перехода от одного объекта к другому. Например, следующее выражение очищает вторую строку рабочего листа Май в рабочей книге Отчет:

Application.Workbooks("Отчет").Worksheets("Май").Rows(2).Delete

Нужно отметить следующее:

  1.  Можно не писать имя объекта Application, так как это подразумевается по умолчанию.
  2.  При работе с подобъектом уже активизированного объекта нет необходимости указывать содержащий его объект.
  3.  VBA использует некоторые свойства и методы, которые возвращают объект к которому они относятся (это позволяет быстро указывать нужный объект). Примеры таких свойств: ActiveCell (активная ячейка), ActiveSheet (активный лист), ActiveWorkBook (активная рабочая книга). Так, установить значение активной ячейки можно следующим образом:

ActiveCell.Value = " Да".

Вопрос 15. VBA Excel. Ссылки на одиночные объекты и объекты семейств

Семейства объектов

Семейством (Collection) в VBA называется совокупность однотипных объектов. Например, в Excel семейство Worksheets является совокупностью всех рабочих листов — объектов Worksheet — в данной рабочей книге, а семейство Lines — совокупностью прямых линий, нарисованных на данном рабочем листе.

Составляющие семейство отдельные объекты называются элементами семейства. Можно ссылаться на отдельные элементы семейства, указывая в скобках имя конкретного объекта или его индекс — порядковый номер элемента в семействе. Например, оператор

Workbooks("ПОДПИСКА.xls").Close

закрывает рабочую книгу под именем ПОДПИСКА.xls.

А вот пример использования индекса элемента семейства. Оператор

ActiveSheet.Lines(1).Select

выделяет первую из имеющихся линий на активном рабочем листе.

Замечание Нумерация элементов в семействе при использовании индексов начинается с единицы.

Хотя семейства представляют собой группы объектов, сами семейства также являются одиночными объектами. Такой собирательный объект-семейство представляет собой всю совокупность входящих в семейство объектов, и имеет собственные свойства и методы, с помощью которых можно изменять разом состояние всех объектов семейства. Например, оператор

ActiveSheet.Lines.Delete

удаляет все нарисованные на активном рабочем листе прямые линии.

Как правило, индивидуальные объекты, являющиеся элементами семейств, имеют гораздо больше свойств и методов, чем соответствующий собирательный объект-семейство. Например, объект-семейство Workbooks в Excel имеет всего пять свойств (Application, Count, Creator, Item, Parent) и четыре метода (Add, Close, Open, OpenText), то время как объект Workbook имеет 59 свойств и 42 метода.

Не все объекты приложений могут группироваться в семейства — для некоторых индивидуальных объектов не существует соответствующих семейств.

Приведем краткий список наиболее часто используемых семейств.

Семейства объектов

Семейство

Описание

Семейства объектов Excel

Workbooks

Все открытые в настоящий момент рабочие книги. С помощью метода

Open

можно открыть еще одну рабочую книгу. Метод

Add

создает новую рабочую книгу.

Sheets

Включает в себя все листы рабочей книги — как обычные рабочие листы, так и листы диаграмм. Наиболее часто используемые методы —

Add

Copy,

Delete,

Select.

Worksheets

Все рабочие листы рабочей книги. Используются те же методы, что и для семейства

Sheets.

В общем случае свойства используются для доступа к содержимому , которое может включать в себя текст ,хранящийся в объекте ,или значение атрибута объекта, а методы - для доступа к функциональным возможностям , под которыми понимается все ,что разрешается делать с содержимым .Но такое различие существует не всегда : в любой модели объектов есть свойства и методы – исключения из данного правила .

Вопрос 16. Объект Range. Назначение и особенности.

ОБЪЕКТ RANGE.

Range


(объект "Диапазон")

Этот объект позволяет изменять свойства диапазона ячеек, например, используемый шрифт, проверять или изменять содержимое ячеек, вырезать или копировать указанный диапазон, и многое другое. Это наиболее часто используемый в

Excel

объект. Принадлежащий к этому же классу объектов объект

ActiveCell - представляет собой активную в настоящий момент ячейку. Обратите внимание на то, что не существует такого объекта, как

Cell — отдельно взятая ячейка представляет собой частный случай объекта Range.

бъект Range (Диапазон)

Clear

Полностью очищает диапазон (в том числе и форматирование ячеек)

ClearContents

Очищает содержимое ячеек диапазона

ClearFormats

Очищает форматирование ячеек диапазона

Copy

Копирует диапазон в буфер обмена

Offset

Возвращает диапазон с указанным смещением относительно первоначального диапазона

Paste

Вставляет содержимое буфера обмена в диапазон

Select

Выделяет диапазон

Sort

Сортирует значения в диапазоне

Объект RANGE представляет отдельную ячейку, диапазон ячеек, целую строку, или колонку, несколько выделенных областей или трехмерный диапазон. Объект RANGE несколько необычен, поскольку может представлять как одну, так и множество ячеек. Для объекта RANGE не предусмотрен специальный объект-набор, и в зависимости от конкретной ситуации его можно считать либо отдельным объектом, либо набором.

Назначение:

  1.  если вам нужно ввести данные в ячейку или отформатировать ее, то вы должны получить объект Range, представляющий эту ячейку;
  2.  если вы хотите сделать что-то с выделенными вами ячейками, вам необходимо получить объект Range, представляющий выделение;
  3.  если вам нужно просто что-то сделать с группой ячеек, первое ваше действие — опять-таки получить объект Range, представляющий эту группу ячеек.

Пожалуй, самый естественный способ получения ссылки на объект Range — это метод Range. Имеются два вида синтаксиса для применения этого метода. Первый использует один аргумент:

объект.Range(интервал)

где:

объект — это объект типа Worksheet или Range, к которому применяется метод Range. Этот объект может быть опущен, и тогда предполагается, что метод Range применяется к активному рабочему листу — объекту ActiveSheet;

Range("A1:B10").ClearContents

Строка, описывающая диапазон, может содержать символы $, задающие абсолютный стиль ссылок, но эти символы игнорируются и никак не влияют на определение диапазона. Если метод применяется к объекту типа Worksheet, то получается абсолютная ссылка на указанный диапазон разделитель списка — запятая ","). Например, следующий оператор ссылается на диапазон A1:B10 активного рабочего листа и очищает его рабочего листа; если же метод применяется к объекту типа Range, то ссылка считается относительной. Например, если текущая активная ячейка — это ячейка B3, то оператор

Selection.Range("B1")

возвращает ячейку C3, поскольку ссылка B1 считается относительной для объекта Range (активной ячейки B3), возвращаемого свойством Selection. В то же время оператор

ActiveSheet.Range("B1")

всегда возвращает ячейку B1.

Если вы используете имена для диапазонов ячеек рабочего листа, то они также могут использоваться в качестве ссылки на диапазон, например, оператор

Range("Условия").Copy

копирует поименованный диапазон "Условия" в буфер обмена.

Другой синтаксис для метода Range использует два аргумента:

объект.Range(ячейка1,ячейка2)

Эти два аргумента представляют собой ссылки на ячейки, определяющие верхний левый и правый нижний углы прямоугольного диапазона ячеек. Такой синтаксис может быть особенно удобен при определении изменяющегося диапазона ячеек, поскольку позволяет независимо формировать координаты верхнего левого и правого нижнего угла.

Вопрос 17. VBA Excel. Использование иерархии объектов Excel

Взаимосвязь объектов ,составляющих приложение вкупе с тем ,как содержимое и функциональные возможности приложения распределяются между объектами, называют иерархией объектов,или моделью объектов.

Каждый объект в иерархии включает в себя не только объекты более низких уровней ,но и их содержимое и функциональность .Чем выше объект в иерархии, тем больше его содержимое и шире функциональные возможности . Например,объект APPLICATION содержит размер окна приложения и позволяет завершить работу приложения,объект WORKBOOK содержит имя файла и формат рабочей книги и позволяет сохранить ее,а объект WORKSHEET содержит имя рабочего листа и позволяет удалить рабочий лист .

Зачастую невозможно добраться до того,что кажется содержимым файла. Например, до значений на рабочем листе Microsoft Excel,пока не пройдешь несколько уровней иерархии объектов ; все дело в том , что это специфическая информация относится к конкретной части приложения .Иначе говоря ,значение в какой-либо ячейке рабочего листа относится только к этой ячейке ,а не ко всем ячейкам рабочего листа ,и поэтому его нельзя хранить непосредственно в объекте WORKSHEET .Таким образом,содержимое и функциональность ,заключенные в объекте ,ограничиваются сферой его действия .

Иерархия объектов VBA приложения Microsoft Excel 

Для того чтобы программно работать с объектами Excel, нужно иметь представление об объектной модели Microsoft Excel. Мы не будем здесь подробно описывать эту модель, поскольку она достаточно сложна, представим только ее основные объекты. 

  1.  Объект Application является экземпляром собственно Microsoft Excel. Применяя к этому объекту различные методы, можно воспользоваться практически любыми командами меню Excel. Объект Application обладает свойствами ActiveWorkbook и 

ActiveSheet, которые указывают на текущие объекты Workbook (рабочая книга) и Worksheet (рабочий лист). Можно указать Excel.Application в качестве значения аргумента <класс> функций CreateObject () и GetObjectO, а также в операторе Dim objPlMH As New <класс>. 

  1.  Основной объект Excel — Workbook (рабочая книга). С помощью этого объекта осуществляется доступ к свойствам и структуре рабочей книги Excel. Объекты workbook — это файлы, которые состоят из нескольких объектов, создаваемых Microsoft Excel: Worksheet (рабочий лист) и Chart (диаграмма). Объекты Worksheet и Chart содержатся В семействах Worksheets и Charts. 
  2.  Объекты Worksheet являются подчиненными по отношению к объекту Workbook и обеспечивают доступ к свойствам и структуре рабочих листов книги Excel. Основным объектом взаимодействия приложений Microsoft Access 2002 и Microsoft Excel 2002 является именно объект Worksheet. Имеется возможность перенести информацию из строк и столбцов объекта Recordset приложения Microsoft Access в ячейки объекта Worksheet приложения Microsoft Excel и наоборот. Если в качестве значения аргумента <класс> функции GetObject() либо в операторе Dim оbj Имя As New <класс> указать Excel.Sheet, то по умолчанию откроется первый объект семейства Worksheets — первый рабочий лист (ActiveSheet) объекта Workbook. 
  3.  Объекты sheet аналогичны объектам Worksheet, но они входят в семейство Sheets, которое включает в себя как объекты Worksheet, так и объекты Chart, представляющие листы диаграмм в рабочей книге. 
  4.  Объект Range — диапазон ячеек рабочего листа Excel. Это могут быть отдельная ячейка, строка, столбец, прямоугольная область рабочего листа или несвязанный (произвольный набор ячеек) или трехмерный диапазон ячеек, включающий ячейки на нескольких рабочих листах. Можно получить либо установить значения диапазона ячеек, определив объект Range. Таких объектов, как ячейка, строка, столбец просто не существует. Именно объект Range со своими свойствами и методами обеспечивает работу как с отдельной ячейкой, так и с их диапазоном. Для ссылки на необходимую группу ячеек можно использовать имя диапазона, состоящего из этих ячеек. Если именованные диапазоны отсутствуют на рабочем листе, можно использовать метод Cells объекта worksheet, чтобы задать координаты ячейки или группы ячеек. Ниже приводятся два способа изменения значения ячейки А1: 

ActiveSheet.Range ("Al").Value = 7 

ActiveSheet.Cells (1,1).Value = 7 

Microsoft Excel предоставляет также многие другие объекты для применения их в качестве объектов приложения сервера, но описанные выше типы являются наиболее часто используемыми в технологии автоматизации с помощью Access VBA. 

Вопрос 18. VBA Excel. Объекты Application, Workbook, Worksheet.

Объект

Описание

Application ( объект "Приложение")

Этот объект представляет собой само приложение Excel в целом. Он включает в себя глобальные устанавливаемые параметры, такие, например, как используемый стиль ссылок на ячейки или режим проведения вычислений. Кроме того, он включает в себя встроенные функции Excel.

Workbooks ( семейство
"Рабочие книги")

Объекты этого семейства определяют состояние рабочей книги, например: не является ли она доступной только для чтения; или какой из листов рабочей книги активен в настоящий момент. Принадлежащий к этому семейству объект ActiveWorkbook — это объект, который представляет собой активную в настоящий момент рабочую книгу.

Worksheets

(семейство
"Рабочие листы")

Объекты этого семейства используются при копировании или удалении рабочих листов, их скрытии или показе, проведении вычислений для формул рабочего листа. Принадлежащий к этому семейству объект

ActiveWorksheet - это объект, который представляет собой активный в настоящий момент рабочий лист.

ОБЪЕКТ APPLICATION.

Большинство свойств объекта APPLICATION управляет внешним видом окна Microsoft Excel или глобальными аспектами поведения этого приложения.Например, если видима строка формул, значение свойства DisplayFormulaBar равна True, а если отключено обновление экрана, то значение свойства ScreenUpdating равно False.

Свойства объекта APPLICATION обеспечивают доступ к "нижестоящим" объектам иерархии (к WINDOWS,WORKBOOKS ).Такие свойства называются аксессорами , они позволяют проходить по иерархии объектов от вершины (APPLICATION ) до объектов более низких уровней (WORKBOOKS и др.).

Некоторые свойства и методы, применимые к объекту APPLICATION, применимы и к объектам,расположенным на более низких уровнях иерархии.Использование подобных свойств или методов на уровне APPLICATION приводит к изменению всех открытых рабочих книг и листов.Например, метод Calculate применим к объектам APPLICATION,WORKBOOK и WORKSHEET. Выражение Application.Calculate приводит к пересчету данных на всех рабочих листах во всех открытых рабочих книгах, а применение этого метода к объектам WORKBOOK или WORCSHEET позволяет соответственно сузить масштабы пересчета.

ОБЪЕКТ WORKBOOK.

Открывая или сохраняя файл в Microsoft Excel, мы фактически открываем или сохраняем рабочую книгу. Поэтому для работы с файлами в Visual Basic используются методы объекта WORKBOOK или набора WORKBOOKS.

ОТКРЫТИЕ РАБОЧЕЙ КНИГИ .

Рабочая книга открывается методом Open. Он всегда применяется для набора WORKBOOKS, ссылку на который можно получить через свойство WORKBOOKS. Вот как выглядит код, открывающий файл Book1.xls(в текущем каталоге) и показывающий значение из ячейки A1 на первом листе данной книги:

 

Sub OpenBook1()

Set myBook=Workbooks.Open(Filename:="Book1.xls")

MsgBox myBook.Worksheets(1).Range("A1").Value

End Sub

Заметим, что метод Open возвращает объект WORKBOOK, соответствующий только что открытой книге.

Есть два сравнительно безопасных места хранения рабочих книг, которые можно открыть программно.Первое-папка, где хранится исполняемый файл Microsoft Excel.Второе-папка Library, создаваемая при установке автоматически; она находится на один уровень ниже той, где хранится исполняемый файл Microsoft Excel. Чтобы открыть книгу, хранящуюся в папке, где расположен исполняемый файл, можно использовать свойство Path-оно возвращает строку, определяющую путь к данной папке.

Другое сравнительно безопасное место хранения рабочей книги-папка Library.Чтобы получить строку с путем к этой папке, используйте вместо свойства Path свойства LibraryPath.

СОЗДАНИЕ И СОХРАНЕНИЕ РАБОЧЕЙ КНИГИ.

Создать книгу позволяет метод Add набора WORKBOOKS. Значение, возвращаемое этим методом, присваивают объектной переменной, и тогда мы сможем ссылаться на созданную рабочую книгу в своей программе. При первом сохранении новой книги применяют метод SaveAs, а последующем-метод Save.

ЗАКРЫТИЕ РАБОЧЕЙ КНИГИ.

Для закрытия книги предназначен метод Close объекта WORKBOOK.

Объект Worksheet

У объекта Worksheet — множество важных свойств и методов:

  1.  Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
  2.  EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
  3.  EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
  4.  Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
  5.  PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл -> Параметры страницы.
  6.  свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
  7.  QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
  8.  Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
  9.  Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
  10.  UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
  11.  Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).

Некоторые важные методы объекта Worksheet:

  1.  методы Activate() , Calculate()Copy()Paste()Delete()Move()Evaluate()Select()SaveAs()PrintOut()PrintPreview()Protect()Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
  2.  метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
  3.  метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
  4.  SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — "водяной знак", иначе на его фоне будет трудно читать текст в ячейках).
  5.  ShowAllData() — показать все скрытые и отфильтрованные данные на листе.

Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.

У объекта Worksheet есть еще два очень удобных события (их сильно не хватает объекту Document в Word). Это — события BeforeRightClick() и BeforeDoubleClick(). Как понятно из названия, первое событие позволяет перехватывать щелчок правой кнопкой мыши по любому месту в листе, а второе — двойной щелчок мышью. При помощи этих событий вы можете назначить свою реакцию (открытие контекстных меню, выдачу предупреждающих сообщений, переход в другой режим работы и т.п.) на действия пользователя.

Вопрос 19. VBA Excel. Элементы управления. Свойства и назначения.

Элементы управления в приложениях VBA

Кнопки управления

Большинство приложений VBA имеет кнопки управления, простым нажатием которых пользователь может выполнять разнообразные действия. Когда пользователь нажимает кнопку, то не только выполняется соответствующее ей действие, но и она сама выглядит так, как будто ее вдавливают, а потом отпускают. При щелчке на кнопке вызывается событие click (Щелчок). Для выполнения определенных действий при щелчке на кнопке в процедуру обработки события click помещается соответствующий код.

Существует много способов "нажать" кнопку управления во время выполнения:

 Использовать мышь, щелкнув на кнопке

 Переместить фокус на кнопку, нажимая клавишу ТаЬ, и затем выбрать эту кнопку, нажав клавишу Spacebar (пробел) или Enter (ввод) .

 Нажать клавишу доступа (Аlt+<подчеркнутая буква в названии клавиши>) к данной для кнопки управления.

 Нажать кнопку управления программным путем, для чего любым способом (вручную с помощью окна свойств или с помощью оператора в программе) установить значение свойства value (Значение) кнопки управления равным True (Истина), а затем с помощью оператора в программе вызвать процедуру обраьотки события click для этой кнопки.

 Если кнопка управления является кнопкой управления по умолчанию , выбрать эту кнопку, нажав клавишу Enter даже если в фокусе в данный момент оказывается другой элемент управления.

 Если кнопка управления no умолчанию является кнопкой отказа (cancel button), то, где бы не находился фокус, выбрать эту кнопку можно, нажав клавишу Esc.

Все эти действия заставляют систему VBA вызывать процедуру обработки события click.

Элементы управления для отображения и ввода текста

Элементы управления Label (Метка) и TextBox (Текстовое поле) применяются для отображения или ввода текста. Метки используются для отображения текста на форме, а текстовые поля - когда необходимо предоставить пользователю возможность вводить текст. Текст в метках можно только читать, тогда как текст в текстовых полях можно редактировать. Назначение элементов управления поясняет табл.

Таблица. Назначение элементов управления для отображения и ввода текста

Элемент управления

Назначение

Текстовое поле (TextBox)

Ввод и отображение текста. Текст может редактироваться (изменяться) пользователем.

Метка (Label)

Отображение не редактируемого текста, например, для обозначения поля на форме или отображения инструкции пользователю

Метки

Элемент управления Label отображает текст, который пользователь не может изменять. Метки можно использовать для идентификации элементов управления, например, текстовых полей и полос прокрутки, не имеющих собственного свойства caption (Надпись). Текст, отображаемый в элементе Label (метка), задается свойством Caption этого элемента. Оно может быть установлено во время разработки в окне Properties или во время выполнения оператором присваивания в программном коде.

По умолчанию надпись - единственная видимая часть элемента управления Label. Однако, если значение свойства BorderStyle установлено равным 1 (это можно сделать во время разработки), то метка появляется вместе с границей, что придает ей вид, похожий на вид текстового поля. Изменить внешний вид метки можно установкой свойств BackColor (цвет фона), BackStyle (Стиль фона), ForeColor (цвет букв) и Font (Шрифт).

Подгонка размеров метки к ее содержимому

Однострочные надписи в метке можно задавать во время выполнения в окне Properties. Но что делать, если необходимо вывести более длинные надписи, или надпись будет меняться во время выполнения? Метки имеют два свойства, которые помогают подгонять их размер для отображения надписей переменной длины. Это свойства AutoSize (авторазмер) и Wordwrap (ПереносСлов).

Свойство AutoSize определяет, следует ли автоматически изменять размер элемента управления, чтобы он соответствовал выводимым данным. Если значение этого свойства равно True, то горизонтальный размер метки увеличивается, чтобы на ней поместилась надпись. Свойство wordwrap увеличивает высоту метки, при этом ее ширина не меняется.

Текстовые поля

Текстовые поля являются гибкими элементами управления и применяются как для получения вводимых пользователем данных, так и для отображения текста. Их не следует использовать для отображения текста, который пользователь не должен изменять, если только значение свойства Locked (Заблокирован) не установлено равным True.

Текст, отображаемый в текстовом поле, управляется свойством Text (Текст). Его можно установить тремя различными способами: во время разработки в окне Properties, во время выполнения из программного кода или во время выполнения на основании данных, введенных пользователем. Текущее содержимое текстового поля можно получить во время выполнения, считывая значение свойства Text.

Многострочные текстовые окна и перенос слов

По умолчанию в текстовом поле отображается одна строка текста, полосы прокрутки не отображаются. Если текст длиннее доступного пространства, будет видна только часть текста. Вид и поведение текстового поля можно изменить, установив значения свойств Multi-Line и scroliBars, которые доступны только во время разработки.

Примечание

Свойство ScrcllEars не следует путать с элементом управления Scroll Bar (Полоса прокрутки), который не присоединяется к текстовым полям и имеет свой собственный набор свойств.

Установка значения свойства MultiLine равным True позволяет текстовому полю принимать и отображать много строк текста во время выполнения. Так как в многострочном текстовом поле нет горизонтальной полосы прокрутки, то оно автоматически управляет переходом на новую строку, если текст не помещается. По умолчанию значение свойства ScroliBars равно None (Нет). Автоматический переход на новую строку избавляет пользователя от необходимости вводить в конце строк символ разрыва строки. Если строка текста длиннее строки текстового поля, то текстовое поле переносит вывод строки на следующую строку.

Символ разрыва строки нельзя вводить в окне Properties во время разработки. В процедуре разрыв строки моделируется вводом символа возврата каретки, за которым следует символ перевода строки (символы с кодами ANSI 13 и 10 соответственно). Можно также использовать константу vbCrLf для ввода комбинации символов возврат каретки/перевод строки. Например, следующая процедура обработки события вводит две строки текста в многострочное текстовое поле (Textl) при загрузке формы:

Sub Fom_Load (}

Textl.Text = "Here are two lines" & vbCrLf & "in a text box" End Sub

Работа с текстом в текстовом поле

Управлять точкой ввода и поведением выделенного фрагмента (selection behavior) в текстовом поле можно с помощью свойств selstart, SelLength и SelText. Эти свойства доступны только во время выполнения.

Когда текстовое окно впервые получает фокус, по умолчанию точка ввода (положение курсора) в текстовом поле находится слева от текста, находящегося в поле. Пользователь может его изменить с клавиатуры или с помощью мыши. Если текстовое окно теряет и затем снова приобретает фокус, точка ввода будет находиться там, где пользователь установил ее в последний раз.

В некоторых случаях, например, в приложениях обработки текстов пользователь предполагает, что новые символы должны появляться после существующего текста. В приложениях ввода данных пользователь предполагает, что новые данные замещают существующие. Свойства SelStart и selLength позволяют модифицировать поведение текстового поля, приспосабливая его к конкретным целям.

Значением свойства selStart является число, которое указывает место вставки в строке текста, причем 0 соответствует крайней левой позиции. Если значением свойства selStart является число, равное или больше, чем число символов в текстовом окне, точка ввода находится сразу за последним символом.

Число, равное значению свойства SelLength, задает ширину точки ввода. Если это число больше 0, то равное ему количество символов, начиная от текущей точки ввода, выбирается и выделяется.

Если пользователь начинает печатать при выделенном блоке текста, то последний будет замещен вводимым текстом. При необходимости можно заменить выделенный текст новым с помощью команды Paste (Вставить) меню Edit (Правка). Значением свойства SelText является строка текста, кото рую можно присвоить во время выполнения и которая заменит выделенный текст. Если такового нет, то в текущую точку ввода будет помещено значение свойства SelText.

Элементы управления, организующие выбор пользователя

В большинстве приложений пользователю предоставляется возможность выбора, начиная от простейшего "да/нет", до сложного выбора из списка, состоящего из сотен возможностей. VBA содержит несколько стандартных элементов управления для организации выбора.

Таблица. Элементы управления для организации выбора

Элемент управления

Возможности

Check boxes (Флажки)

Небольшой набор возможностей выбора, из которых пользователь может выбрать одну или более

Option buttons

Небольшой набор возможностей, из которых пользователь может выбрать только одну

List box (Список)

Прокручиваемый список возможностей выбора, из которого пользователь может выбрать только одну возможность

Combo box (Комбинированное окно)

Прокручиваемый список возможностей выбора вместе с полем ввода. Пользователь может либо выбрать из списка, либо напечатать свой выбор в поле ввода

Флажки

Флажок показывает, включено или нет определенное условие. В приложении флажки используются, чтобы дать пользователю возможность выбора типа "правда/ложь" или "да/нет". Так как флажки работают независимо друг от друга, пользователь может установить любое их число одновременно.

Группирование возможностей с помощью переключателей

Переключатели предоставляют пользователю выбор из двух или более возможностей. В отличие от флажков, однако, они всегда работают как часть группы: выбор одного из них немедленно сбрасывает все другие переключатели группы. Объединение переключателей в группу означает для пользователя, что он может выбрать одну и только одну возможность из заданного набора.

Создание групп переключателей

Все переключатели, размещенные непосредственно на форме (т- е. не внутри рамки (frame) или графического окна (picture)), составляют одну группу. Если необходимо создать дополнительные группы переключателей, некоторые из них надо поместить внутрь рамок или графических окон.

Все переключатели внутри данной рамки составляют отдельную группу, то же само относится и к переключателям в графическом окне. При создании отдельной группы переключателей всегда сначала следует создать рамку или графическое окно, а затем поверх них- переключатели.

Пользователь может выбрать только один переключатель в группе внутри рамки.

Для группирования элементов управления с помощью рамки следует:

1. Выбрать элемент управления Frame (Рамка) на Панели элементов управления (Toolbox), нарисовать рамку и поместить ее на форму.

2. Выбрать переключатель на Панели элементов управления и нарисовать его внутри рамки.

3. Повторить шаг 2 для остальных переключателей, добавляемых в группу.

Соблюдение последовательности создания группы элементов управления (сначала рисуется рамка, а затем внутри нее рисуется каждый элемеш управления из группы) позволяет работать с ними как с группой. При перемещении рамки вместе с ней будут перемещаться и все элементы внутри нее. Если переместить существующий на форме элемент управления внутрь рамки, то он при перемещении рамки останется неподвижным, т. к. нарушена процедура создания группы.

Примечание

Чтобы сгруппировать существующие элементы управления, следует выбрать все элементы, которые будут составлять группу, вырезать их и вставить в рамку или графическое окно.

Контейнеры для элементов управления

Элементы управления являются независимыми объектами, однако между ними и формами существуют отношения подчиненности (parent and child relationships).

Для понимания идеи контейнеров необходимо четко осознавать, что все элементы управления являются подчиненными по отношению к форме, на которой они нарисованы. Фактически большинство элементов управления поддерживает свойство parent (Родитель) в режиме "только чтение" (readonly), т. е. значением этого свойства является форма, на которой расположен элемент управления, и это значение невозможно изменить. Положение элемента управления ограничено родительской формой, по отношению к которой он является подчиненным. Свойства Left и тор элемента управления связаны с родительской формой, и поэтому элемент управления нельзя переместить за границы этой формы. Перемещение контейнера также перемещает и элементы управления, и не изменяет значений свойств Left и тор элемента управления.

Выбор переключателей

Переключатель можно выбрать:

- Щелчком на нем кнопкой мыши во время выполнения

- Клавишей <ТаЬ> выбрать группу переключателей и затем клавишами со стрелками выбрать переключатель в группе

- Установив значение его свойства value равным True в программном коде: optChoice.Value = True

- С помощью клавиши быстрого доступа, определенной в надписи метки

Сделать переключатель в группе переключателем по умолчанию можно во время разработки. Для этого надо установить значение его свойства value равным True. Он остается выбранным, пока другой переключатель не будет выбран пользователем или программно.

Можно сделать переключатель недоступным, установив значение его свойства Enabled (Доступный) равным False. При выполнении программы такой переключатель выделен серым цветом, и это означает, что он не доступен пользователю.

Комбинированные окна и списки

Списки и комбинированные окна предоставляют пользователю список возможных вариантов выбора, по умолчанию отображаемых вертикально в одну колонку, хотя возможно отображение и в несколько колонок. Если число элементов превышает возможности отображения в комбинированном окне или списке, автоматически появляется полоса прокрутки. Пользователь в этом случае может просматривать список элементов, прокручивая его вверх и вниз или влево и вправо.

Комбинированное окно совмещает возможности списка и текстового поля. В этом элементе управления пользователь может производить выбор либо вводом текста в поле ввода комбинированного списка, либо выбором элемента из его списка.

По сравнению с другими элементами управления, которые содержат одно значение, например, значение свойства caption метки или значение свойства Text текстового поля, списки и комбинированные окна содержат набор значений. Для них существуют встроенные методы добавления, удаления и получения значений из этого набора во время выполнения. Программный код для добавления нескольких элементов в список с именем Listi мог бы выглядеть следующим образом:

Listl.Addltem "Paris" Listl.AddItem "New York" Listl.AddICem "San Francisco"

Списки и комбинированные окна - это эффективный способ представления большого числа вариантов выбора для пользователя в ограниченном пространстве на форме.

Полосы прокрутки как устройства ввода

В основном полосы прокрутки используются в текстовых полях или окнах, но иногда их применяют в качестве устройств ввода. Полосы прокрутки показывают текущую позицию на масштабной линейке, поэтому их можно использовать самостоятельно для управления вводом в программу, например, регулировать цветовую палитру в картинке или уровень громкости. Элементы управления HScrollBar (Горизонтальная полоса прокрутки) и VScrollBar (Вертикальная полоса прокрутки) функционируют независимо от других элементов управления и имеют собственные наборы событий, свойств и методов. Элементы управления "Полоса прокрутки" - это не то же самое, что встроенные полосы прокрутки, присоединяемые к текстовым полям, спискам, комбинированным окнам.

Руководящие принципы построения интерфейса Windows теперь предлагают применять полосы-регуляторы (slider controls) вместо полос прокрутки (scroll bars). Примеры регуляторов можно увидеть в панели управления Windows 95. Элемент управления "Регулятор" в стиле Windows 95 включен в версии VBA Professional и Enterprise.

Графические элементы управления. Отображение картинок и графики

В состав VBA включен объект для работу с графикой: image (Изображение).

Примечание

Объекты Form также имеют свойство Picture, которое можно установить для отображения картинки непосредственно в виде фона (заднего плана) формы.

Для отображения или замены картинки во время выполнения следует установить значение свойства picture при помощи функции LoadPicture. Ей передается только имя (с необязательным путем) файла картинки, и далее эта функция управляет деталями загрузки и отображения картинки:

picMain.Picture = LoadPicture("VAHGOSH.BMP")

Объект picture имеет свойство AutoSize, которое, если его значение равно True, автоматически изменяет размеры окна вывода картинки, чтобы оно соответствовало размерам выводимой картинки. Следует быть очень внимательным при разработке формы, если ее свойство AutoSize равно True. Размеры окна вывода картинки изменяются независимо от других элементов управления на форме. В результате картинка может, например, закрыть другие элементы управления. Во время разработки следует протестировать вывод каждой картинки, которую предполагается использовать в приложении.

Графическое окно в качестве контейнера

Графическое окно может также выполнять функции контейнера для других элементов управления. Как и в случае с рамкой (frame control) можно поместить другие элементы управления в графическое окно. Помещенные элементы управления будут перемещаться вместе с графическим окном, а их свойства тор и Left будут подчинены ему, а не форме,

Обыкновенно графическое окно в качестве контейнера используют для того, чтобы создать панель инструментов или строку состояния. Туда можно поместить элементы управления Image, чтобы они выступали в качестве кнопок, или добавить метки для отображения сообщений о состоянии. Устанавливая значение свойства Align (Выровнять) равным тор (Верх), Bottom (Низ), Left (Лево) или Right (Право) можно "прикрепить" графическое окно к соответствующему краю формы.

Элемент управления Image

Картинки загружаются в объект image: во время разработки - назначением имени файла и пути свойству picture, во Время выполнения - посредством функции LoadPicture.

При изменении размеров элементы управления Image и Picture ведут себя по-разному. Установка значения свойства Autosize объекта picture равным True приводит к тому, что размеры Графического окна изменяются в соответствии с размерами выводимой картинки; если значение этого свойства равно False, то картинка усекается (видна только ее часть). Объект Image не имеет свойства Autosize, а обладает свойством Stretch (Растягивание). Присвоение этому свойству значения False (значение по умолчанию) приводит к тому, что размеры элемента управления изменяются в соответствии с размерами картинки. Если свойство stretch равно True, то размеры картинки изменяются до размеров элемента управления Image, что может привести к искажению картинки при ее отображении.

Создание кнопок

Объект image распознает событие click, что предоставляет удобный способ создания кнопок с картинками вместо кнопок с надписями. Объединение нескольких элементов управления Image в горизонтальном направлении вверху экрана (обычно внут ри графического окна) в группу позволяет создавать панели инструментов приложения.

Примечание

В отличие от кнопок управления, элементы управления image не вдавливаются, если на них выполняется щелчок.

Другие элементы управления

В Панель элементов управления 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 переустановит это значение так, чтобы оно было на единицу меньше числа элементов управления.

Примечание

Элементы управления, которые не могут получить фокус, как и недоступные и невидимые элементы управления, не имеют свойства Tabindex и не могут быть включены в последовательность перехода. Когда пользователь нажимает клавишу <ТаЬ>, эти элементы управления пропускаются.

Удаление элемента управления из последовательности перехода

Обычно последовательное нажатие клавиши Таb во время выполнения выбирает каждый элемент управления из заданной последовательности перехода. Можно убрать элемент управления из последовательности перехода, установив значение его свойства TabStop равным False (или 0).

Элемент управления, свойство TabStop которого равно False, сохраняет свою позицию в последовательности перехода, хотя при переходе от одного элемента управления к другому по клавише Таb он пропускается.

Примечание

Группа переключателей имеет один табуляторный ограничитель (tab stop) Для выбранной кнопки, т.е. кнопки, значение свойства Value которой равно True, значение свойства TabStop автоматически равно True, тогда как значение этого свойства для других кнопок равно False.

Вопрос 20. VBA Excel. Управляющие структуры языка

Управляющие конструкции

Как и во всех других языках программирования, в VBA имеются различные управляющие конструкции, позволяющие изменять порядок выполнения программы. Если управляющие конструкции не используются, происходит последовательное выполнение операторов языка программирования, начиная с самого первого и кончая последним. Хотя в некоторых самых простых случаях этого и бывает достаточно, обычно все-таки требуется изменять порядок исполнения операторов при выполнении определенных условий, либо пропуская выполнение некоторых операторов, либо, наоборот, многократно повторяя их. Оказывается, для реализации любых алгоритмов достаточно иметь только два вида конструкций управления: ветвления и циклы.

Ветвления

Управляющие конструкции ветвления позволяют проверить некоторое условие и, в зависимости от результатов этой проверки, выполнить ту или иную группу операторов. Для организации ветвлений в VBA используются различные формы оператора ветвления If и-оператор выбора Select Case.

Простейшая, краткая форма оператора if используется для проверки одного условия, а затем либо выполнения, либо пропуска одного оператора или блока из не скольких операторов. Краткая форма оператора ветвления if может иметь как однострочную, так и блочную форму. В одну строку краткая форма If может быть записана так:

If <условие> Then <оператор>

В блочной форме краткое ветвление выглядит следующим образом:

If <условие> Then

<оператор1>

<оператор2>

End If

В качестве условия можно использовать логическое выражение, возвращающее значение True или False, или любое арифметическое выражение. Если применяется арифметическое выражение, то нулевое значение этого выражения эквивалентно логическому значению False, а любое ненулевое выражение эквивалентно True. В том случае, когда условие возвращает значение False, оператор или блок операторов, заключенных между ключевыми словами Then и End if и составляющих тело краткого оператора ветвления, не будет выполняться.

Замечание
Обратите внимание, что при записи краткого оператора ветвления в одну строку ключевые слова End if не используются.

Полная форма оператора if используется в тех случаях, когда имеются два различных блока операторов и по результатам проверки условия нужно выполнить один из них. Такая форма if не может записываться в одну строку и всегда имеет блочную форму записи:

If <условие> Then

<блокОператоров1> Else

<блокОператоров2>

End If

Если условие истинно, выполняется первый блок операторов, заключенный между ключевыми словами Then иElse, а в противном случае – второй блок, заключенный между ключевыми словами Else и End If.

Совет
Для того чтобы текст вашей процедуры был понятным и удобным для восприятия, рекомендуется делать отступы для групп операторов так, как это указано при описании их синтаксиса. В VBA предусмотрено удобное средство изменения отступов – нажатие на клавишу Таb увеличивает отступ вправо, нажатие комбинации клавиш SHIFT + Tab уменьшает этот отступ.

Иногда приходится делать выбор одного действия из целой группы действий на основе проверки нескольких различных условий. Для этого можно использовать цепочку операторов ветвления If…Then… Elseif:

If <условие1> Then

<блокОператоров1>

Elseif <условие2> Then

<блокОператоров2>

Elseif <условие3> Then

<блокОператоров3>

Elseif <условиеN> Then

<блокОператоровN> Else

<блокОператоров_Еlsе>

End If

Такие цепочки операторов If…Then…Elseif обладают большой гибкостью и позволяют решить все проблемы, однако если выбор одной из нескольких возможностей все время основан на различных значениях одного и того же выражения, гораздо удобнее использовать специально предназначенный для этого оператор выбора Select Case, имеющий следующий синтаксис:

Select Case <проверяемоеВыражение>

Case <списокЗначений1>

<блокОператоров1>

Case <списокЗначений2>

<блокОператоров2>

Case <списокЗначени3>

<блокОператоров3>

Case Else

<блокОператоровЕlsе>

End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа, например логическое, числовое или строковое.

Список выражений представляет собой одно или несколько выражений, разделенных запятой. При выполнении оператора проверяется, соответствует ли хотя бы один из элементов этого списка проверяемому выражению.

Эти элементы списка выражений могут иметь одну из следующих форм:

  1.  <выражение> в данном случае проверяется, совпадает ли значение проверяемого выражения с этим выражением;
  2.  <выражение1> То <выражение2> в этом случае проверяется, находится ли значение проверяемого выражения в указанном диапазоне значений;
  3.  Is <логическийОператор> <выражение> в третьем случае проверяемое выражение сравнивается с указанным значением с помощью заданного логического оператора; например, условие is >= 10 считается выполненным, если проверяемое значение не меньше 10.

Если хотя бы один из элементов списка соответствует проверяемому выражению, то выполняется соответствующая группа операторов и на этом выполнение оператора Select Case заканчивается, а остальные списки выражений не проверяются, т. е. отыскивается только первый подходящий элемент списков выражений. Если же ни один из элементов всех этих списков не соответствует значению проверяемого выражения, выполняются операторы группы Else, если таковая присутствует.

Циклы

В VBA имеется богатый выбор средств организации циклов, которые можно разделить на две основные группы –циклы с условием Do… Loop и циклы с перечислением For…Next.

Циклы типа Do… Loop используются в тех случаях, когда заранее неизвестно, сколько раз должно быть повторено выполнение блока операторов, составляющего тело цикла. Такой цикл продолжает свою работу до тех пор, пока не будет выполнено определенное условие. Существуют четыре вида циклов Do…Loop, которые различаются типом проверяемого условия и временем выполнения этой проверки. В табл. 13.2 приводится синтаксис этих четырех конструкций.

Таблица 13.2. Синтаксис операторов цикла Do

Конструкция

Описание

Do While <условие> <блокОператоров> Loop

Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие выполняется (то есть имеет значение True), иными словами, в этой конструкции указывается условие продолжения работы цикла

Do Until <условие> <блокОператоров> Loop

Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, если это условие еще не выполнено, и прекращает работу, когда оно станет истинным, иными словами, в этой конструкции указывается условие прекращения работы цикла

Do <блокОператоров> Loop Until <условие>

Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл продолжает свою работу, если это условие еще не выполнено, а когда оно станет истинным, цикл прекращает работу, иными словами, в этой конструкции указывается условие прекращения работы цикла

Do <блокОператоров> Loop While <условие>

Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл продолжает свою работу, пока это условие остается истинным, иными словами, в этой конструкции указывается условие продолжения работы цикла

Имеется также две разновидности оператора цикла с перечислением For…Next. Очень часто при обработке массивов, а также в тех случаях, когда требуется повторить выполнение некоторой группы операторов заданное число раз, используется цикл For…Next со счетчиком. В отличие от циклов Do…Loop, данный тип цикла использует специальную переменную, называемую счетчиком, значение которой увеличивается или уменьшается при каждом выполнении тела цикла на определенную величину. Когда значение этой переменной достигает заданного значения, выполнение цикла заканчивается.

Синтаксис этого вида цикла выглядит, следующим образом (в квадратные скобки заключены необязательные элементы синтаксической конструкции):

For <счетчик> = <начальноеЗначение>

То <конечноеЗначение>

[Step <приращение>]

<блокОператоров> Next [<счетчик>]

Несколько пояснений к приведенному описанию:

  1.  <приращение> – может быть как положительным, так и отрицательным числом. Если использовать отрицательное приращение, то конечное значение должно быть меньше либо равно начальному значению для того, чтобы тело цикла выполнилось хотя бы один раз;
  2.  после завершения работы цикла For…Next переменная, которая использовалась в качестве счетчика, получает значение, обязательно превосходящее конечное значение в том случае, если приращение положительно, и строго меньшее конечного значения, если приращение отрицательно;
  3.  если начальное и конечное значения совпадают, тело цикла выполняется лишь один раз.

ассмотрим еще одну разновидность цикла For…Next, часто использующуюся в VBA при обработке объектов, составляющих массив или семейство однородных объектов. В этой разновидности цикла счетчик отсутствует, а тело цикла выполняется для каждого элемента массива или семейства объектов. Вот синтаксис такого цикла:

For Each <элемент> In <совокупность>

<блокОператоров>

Next [<элемент>]

Где:

  1.  <элемент> – это переменная, используемая для ссылки на элементы семейства объектов;
  2.  <совокупность> – это имя массива или семейства.

Приведем пример использования подобного цикла. Следующая процедура предназначается для выдачи на печать списка всех полей для всех таблиц текущей открытой базы данных:

Public Sub EnumerateAllFields()

Dim MyBase As Database

Dim tdf As TableDef, fid As Field

Set MyBase = CurrentDb()

For Each tdf In MyBase.TableDefs

Debug.Print "Таблица: " & tdf.Name

For Each fid In tdf.Fields

Debug.Print " Поле: " & fid.Name Next fid

Next tdf

Set MyBase = Nothing

End Sub

Итак, в операторах Dim мы объявили переменную MyBase как объект "база данных DАО", переменные tdf и fid – как определение таблицы и поле таблицы, соответственно. Оператор Set назначает переменной MyBase текущую открытую базу данных. Далее для каждого определения таблицы выполняется вывод на печать названия таблицы, а затем вложенный цикл такого же типа печатает названия всех ее полей.

Приведем еще один пример использования подобного оператора цикла For Each…Next для обработки всех элементов многомерного массива. Пусть у нас имеется трехмерный числовой массив из 1000 элементов (размерами 10x10x10), который мы хотим заполнить случайными вещественными числами в диапазоне от 0 до 1. Если бы мы применяли обычные циклы For…Next со счетчиками, используя счетчики в качестве индексов элементов массива, то для решения этой задачи потребовалось бы написать три вложенных цикла For… Next:

Dim tArray{9, 9, 9) As Single

Dim i%, j%, k%

Randomize

For i=0 To 9

For j=0 To 9

For k=0 To 9

tArray(i, j, k) = Rnd()

Next k

Next j

Next i

На самом же деле достаточно всего одного цикла, если вместо циклов со счетчиками воспользоваться циклом For Each… Next:

Dim tArray(9, 9, 9) As Single

Dim elem As Variant

Randomize

For Each elem In tArray

elem = Rnd()

Next

Еще раз порекомендуем использовать отступы при записи циклов, так же, как и при записи операторов ветвления.

Выход из циклов и процедур

Обычно выполнение процедуры заканчивается после выполнения ее последнего оператора, а выполнение цикла – после нескольких выполнений тела цикла, когда достигнуто условие завершения его работы. Однако в некоторых случаях бывает нужно прекратить выполнение процедуры или цикла досрочно, избежав выполнения лишних операторов процедуры или лишних повторений цикла. Например, если при выполнении процедуры произошла ошибка, которая делает продолжение ее работы бессмысленным, можно выполнить команду немедленного выхода из процедуры. Другой пример: если цикл For…Next используется для поиска нужного значения в массиве, то после того, как нужный элемент массива найден, нет смысла продолжать дальнейший перебор элементов массива.

Досрочный выход из управляющей конструкции можно осуществить с помощью одного из операторов Exit. Для досрочного выхода из циклов Do…Loop используется оператор Exit Do, а для выхода из циклов For – оператор Exit For. Для досрочного выхода из процедур и функций применяются операторы Exit Sub и Exit Function соответственно. Следует, однако, отметить, что хотя использование оператора Exit может быть вполне оправданным, необходимо избегать излишнего употребления этого оператора, прибегая к нему только в крайних случаях. Излишне частое употребление данного оператора затрудняет понимание написанного текста программы и его отладку.

Например, в следующем цикле поиска For…Next используется оператор Exit For:

ub = Ubound(dArray)

fFound = False

For i=LBound(dArray) To ub

If dArray(i) = searchValue Then

fFound = True

Exit For

End If Next

Однако такого применения оператора Exit вполне можно избежать. Вот пример подобного же цикла поиска, но без использования Exit:

i = Lbound(dArray)

ub = Ubound(dArray)

fFound = False Do

If dArray(i) = searchValue

Then fFound = True

i = i + 1

Loop Until (i > ub) Or fFound

На этом мы заканчиваем краткое знакомство с основными понятиями языка VBA. Если читателю требуется более подробное и строгое изложение синтаксиса языка, то лучше обратиться к специальным книгам, посвященным этому языку. В других разделах настоящей главы, а также в последующих главах мы покажем, как VBA используется при разработке приложений, и познакомим с теми его особенностями, которые специфичны именно для Access. Это касается в первую очередь объектов Access и объектов данных.




1. Туристическая репрезентация городского пространства
2. Убеждение и внушение как методы психологического воздействия влияния руководителя на подчинённых
3. Великобритания стала первой страной где сформировалась политическая культура в рамках которой начали эфф
4. Характеристика политического экономического и культурного развития в России в первой половине XIX века.html
5. ВИРОБНИЧИЙ ЦИКЛ Сутність і види циклів
6. Реферат- Инновационные методики обучения- pro et contra
7. На тему- организация как объект исследования
8. Безопасность жизнедеятельности (Безпека життєдіяльності)
9. Тема- Microsoft Word Внедрение рисунков и рисование схем
10. Метаболічні зміни в органах щурів за умов свинцево-кадмієвих токсикозів та їх корекція гепатопротекторами