Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к экзамену по дисциплине.doc
Скачиваний:
4
Добавлен:
24.08.2019
Размер:
712.19 Кб
Скачать

10.Вложенные конструкции для принятия решений.

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

Очень часто в программах надо выполнить определённые операторы несколько раз. Не логично записывать эту последовательность действий 20 или 50 раз подряд. В этих случаях организуют циклические вычисления. Алгоритм называется циклическим, если определенная последовательность шагов выполняется несколько раз в зависимости от заданной величины, которая называется параметром цикла.

Цикл For … Next

Общий вид алгоритма конструкции оператора For…Next, который позволяет выполнить группу операторов или один оператор заданное количество раз, следующий

11.Объявление одномерных массивов. Доступ к элементам одномерных массивов.

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

Массив позволяет сохранять и манипулировать многими элементами данных посредством единственной переменной. Обработку массивов значительно упрощает использование циклов.

Одномерные массивы

Одномерный массив - это самый простой вариант массива, использующий обыкновенный список данных. Например:

Вася, Петя, Коля, Миша, Ваня, Слава, Игорь, Юра, Саша, Вова

Это строковый массив, состоящий из 10 элементов. Дадим ему название My_Array.

12. Объявление многомерных массивов. Доступ к элементам многомерных массивов.

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

Dim ДвухММассив (Строки, Столбцы) As Тип Данных

Размер трехмерного массива будет определяться тремя числами и так далее:

Dim ТрехММассив (X, Y, Z) As ТипДанных

13.Инициализация массивов, функция Array

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

Аргумент функции Array список_аргументов — это разделенный запятыми

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

Удобным способом определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа Variant. Например,

Dim A As Variant

А = Array(10, 20, 30)

Обработку массивов значительно упрощает использование циклов.

14. Динамические массивы.

Массивы, не меняющие число своих элементов, называются статическими массивами. Примером такого массива может служить вышеприведенный массив My_Array, содержащий 10 элементов.

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

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

Динамические массивы создаются с помощью оператора Dim, Private, Public или Static, причем список размерностей опускается, затем их размер устанавливается с помощью оператора ReDim во время выполнения процедуры.

Оператор ReDim имеет следующий синтаксис:

ReDim [Preserve] varname (subscripts) [As type] [, varname (subscripts) [As type]],

где необязательное ключевое слово Preserve приводит к тому, что VBA сохраняет данные в имеющемся массиве, когда изменяется размер массива с помощью ReDim;

varname - имя существующего массива;

subscripts - измерения массива (синтаксис для оператора subscripts в операторе ReDim такой же, как для оператора Dim);

type - любой тип VBA или определенный пользователем тип.

15. Оператор цикла For-Next, примеры использования.

Если телом цикла является циклическая структура, то такие циклы называются вложенными. Цикл, содержащий в себе другой цикл, называют внешним, а цикл, содержащийся в теле другого цикла, называют внутренним.

Общий вид алгоритма конструкции сложного цикла For…Next следующий:

Синтаксис операторов вложенного цикла:

F or i = N1 To N2 For j = M1 To M2

P1

тело внутреннего тело внешнего

. цикла цикла

PN

Next

Next

 

При первом вхождении в цикл параметр внешнего цикла i принимает значение, равное N1 , и управление передаётся во внутренний цикл, в котором параметр цикла j принимает значение, равное M1 , и выполняется оператор (операторы), которые записаны во внутреннем цикле. Затем параметр внутреннего цикла j увеличивается на 1, и вновь выполняется тело цикла. Операторы P1, PN будут выполняться до тех пор, пока параметр цикла j не станет больше величины М2. Затем параметр внешнего цикла i увеличивается на 1, и вновь начинает свою работу внутренний цикл, в котором параметр цикла j будет изменяться от М1 до М2, и при каждом прохождении цикла будут выполняться операторы P1 и PN. Внешний цикл закончит свою работу, когда параметр цикла i станет больше величины N2.

Public Sub qwer()

Dim i As Integer

Dim n As Integer

Dim f As Long

n = InputBox(" Введите число больше 0")

f = 1

For i = 2 To n

f = f * i

Next

MsgBox f

End Sub

16.Оператор цикла For-Each-Next.

Обязателен в операторе For Each. Необязателен в операторе Next. Переменная. Используется для циклического прохода (итерации) элементов коллекции.

Цикл For Each...Next используется при необходимости повтора набора инструкций для каждого элемента коллекции или массива.

Visual Basic вычисляет коллекцию только один раз — перед началом цикла. Если в блоке операторов изменяется element или group, то эти изменения не оказывает влияния на повторение цикла.

Когда переменной element будут присвоены все элементы коллекции, цикл For Each остановится и управление будет передано оператору, следующему за оператором Next.

Если element не был объявлен вне цикла, то его нужно объявить в операторе For Each. Можно объявить тип element явным образом при помощи оператора As, или можно использовать определение типа для назначения типа. В этом случае областью действия element является основная часть цикла. В то же время нельзя определять element и внутри, и снаружи цикла.

Можно дополнительно указать element в инструкции Next. Это повышает удобочитаемость программы, особенно если в ней имеются вложенные циклы For Each. При этом следует указать ту же переменную, что и в соответствующем операторе For Each.

Можно избежать изменения значения element внутри цикла. Это может сделать его более сложным для чтения и отладку кода. Изменение значения group не влияет на коллекцию или ее элементы, которые были определены в начале цикла.

17.Операторы цикла Do-Loop с предусловием

Общий вид алгоритма конструкции аналогичен алгоритму цикла While.

Синтаксис оператора следующий:

 

Do {While | Until} <логическое выражение>

P1

P2

.

[Exit Do]

.

PN

Loop

 

где Do (выполнить), While (пока), Until (не раньше), Exit Do (выход из Do), Loop(петля) – зарезервированные слова, P1, P2, PN – операторы.

В данной конструкции требуется указание одного из ключевых слов: либо While, либо Until. При указании слова While – цикл выполняется до тех пор, пока условие истинно; смысл лова Until – цикл выполняется до тех пор, пока условие не станет истинным, то есть пока условие ложно.

Если логическое выражение после служебного слова While имеет значение True, то выполняются операторы P1, P2, PN , после чего проверка логического выражения повторяется. Если логическое выражение имеет значение False, то происходит выход из цикла. Если условие в заголовке цикла не является истинным с самого начала, цикл Do не выполняется ни разу.

Задание…

Стоимость звонка условно принимается постоянной величиной, например, 150 руб.

В теле цикла должны выдаваться 2 сообщения:

– в начале цикла:

«Денег на счете до звонка: » < СуммаДенег > «. Звонок разрешается!»

– в конце цикла:

«Остаток денег на счете после звонка: » < СуммаДенег >

При отсутствии денег на счете – выдается соответствующее сообщение:

«Денег больше нет. Задолженность:» < СуммаДенег >.

Public Sub A()

Dim x As Integer

Dim y As Integer

x = 500

y = 150

While x > 0

MsgBox "Денег до начаал звонка" & x

MsgBox "Звонить?"

x = x - y

MsgBox " Денег после звонка" & x

Wend

MsgBox "Нет денег на счете" & "Сумма Денег на счете-" & x

End Sub

18.Операторы цикла Do-Loop с постусловием

Цикл Do … While Loop (цикл с постусловием)

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

В остальном данная конструкция аналогична конструкции Do While … Loop.

Общий вид алгоритма конструкции следующий:

 

 

P1

 

 

 

P2

 

 

Pn

 

 

 

 

Лог. выражение

Да Нет

 

 

Синтаксис оператора следующий:

 

Do

P1

P2

.

[Exit Do]

.

PN

Loop {While | Until} <логическое выражение>

Пример с паролем

Public Sub asd()

Dim x As String

Dim i As Integer

Do

If i >= 3 Then

MsgBox "В доступе отказано"

Exit Do

End If

x = InputBox("введите пароль")

i = i + 1

Loop While x <> "www"

End Sub

19.Вложенные циклы.

Циклы можно помещать внутрь друг друга. Помещение одной структуры цикла в другую называется вложением циклов. Можно делать вложение структур циклов разного типа.

При вложении циклов надо соблюдать определенные правила:

При вложении циклов For..Next каждый цикл должен иметь свою уникальную переменную счетчика;

При вложении циклов For Each..Next каждый цикл должен иметь свою уникальную element-переменную;

Если используется оператор Exit For или Exit Do во вложенном цикле, этим оператором заканчивается только выполняемый в данный момент цикл. VBA продолжает выполнение следующего цикла более высокого уровня.

Если телом цикла является циклическая структура, то такие циклы называются вложенными. Цикл, содержащий в себе другой цикл, называют внешним, а цикл, содержащийся в теле другого цикла, называют внутренним.

Общий вид алгоритма конструкции сложного цикла For…Next следующий:

Синтаксис операторов вложенного цикла:

F or i = N1 To N2 For j = M1 To M2

P1

тело внутреннего тело внешнего

. цикла цикла

PN

Next

Next

 

При первом вхождении в цикл параметр внешнего цикла i принимает значение, равное N1 , и управление передаётся во внутренний цикл, в котором параметр цикла j принимает значение, равное M1 , и выполняется оператор (операторы), которые записаны во внутреннем цикле. Затем параметр внутреннего цикла j увеличивается на 1, и вновь выполняется тело цикла. Операторы P1, PN будут выполняться до тех пор, пока параметр цикла j не станет больше величины М2. Затем параметр внешнего цикла i увеличивается на 1, и вновь начинает свою работу внутренний цикл, в котором параметр цикла j будет изменяться от М1 до М2, и при каждом прохождении цикла будут выполняться операторы P1 и PN. Внешний цикл закончит свою работу, когда параметр цикла i станет больше величины N2.

20.Преждевременный выход из циклов.

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

If Логическое_выражение 1 Then Exit

21.Организация подпрограмм, передача данных в подпрограммы.

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

Общая процедура может входить в состав модуля экранной формы (в файл frm) или в состав стандартного модуля (в файл bas).

В Visual Basic есть три вида областей определения, характеризующих доступность переменной:

локальная: переменная доступна только в текущей процедуре;

контейнера: переменная доступна только в текущей форме, модуле или классе;

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

Переменные контейнера определяются в секции (General) (Declarations) с помощью оператора Dim и доступны только внутри соответствующего контейнера, т, е. формы, модуля или класса.

Глобальные переменные определяются в секции (General) (Declarations) модуля. При этом вместо оператора Dim используется Public. Глобальные переменные доступны во всех модулях и процедурах проекта.

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

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

Объявление переменной как статической производится оператором:

Static <Имя_переменной> [As <Тип_переменной>]

Чтобы объявить статическими все локальные переменные процедуры, следует записать ключевое слово Static в заголовке процедуры.

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

<ОбластьВидимости>] [Static] Sub <имяПроцедуры>

(<Списокпараметров>)

<Операторы>

End Sub

Область видимости — это одно из двух ключевых слов Public или Private. Они устанавливают, к какому классу принадлежит процедура: к классу локальных или классу глобальных процедур. Процедура локальная (Private), если она доступна (видна) только внутри данного модуля и не может быть вызвана из других модулей. Процедура глобальная (Public), если она доступна (видна) из других модулей.

Наличие или отсутствие ключевого слова Static говорит о статусе локальных переменных, т. ё. переменных, объявленных внутри этой процедуры. При наличии этого слова локальные переменные будут сохранять свои значения между Последовательными вызовами этой процедуры. При отсутствии слова Static — не будут.

В процедурах обработки событий набор параметров зависит от события и не может быть изменен разработчиком.

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

В Visual Basic параметры могут передаваться двумя способами:

как ссылки (ByRef);

как значение (ByVal).

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

По умолчанию параметры в Visual Basic передаются по ссылке, но можно указывать явно ключевое слово ByRef перед параметром в заголовке процедуры. Например,

Sub pr1(ByRef n As String)

22Создание функций.

Function <имяФункции> (<аргумент1>, <аргумент2>, …) [As

<типЗначение>]

<оператор1>

<оператор2>

<имяФункции>=<возвращаемоеЗначение>

End Function

Кроме того что ключевое слово Sub заменяется на Function, в теле функции обязательно присутствует оператор присваивания имени функции какого-нибудь значения. Это значение и возвращается функцией. В заголовке функции может быть описан тип возвращаемого значения. Если этот тип не указан, функция возвращает значение Variant.

23Использование списка поименованных аргументов

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

Например, метод Open объекта Workbooks в Microsoft Excel, открывающий рабочую книгу, принимает 13 аргументов. Если Вам нужно написать код, открывающий рабочую книгу Book2.xls и добавляющий ее в список последних открытых файлов, Вы могли бы использовать оператор:

Workbooks.Open "book2.xls" , , , , , , , , , , , , True

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

Workbooks.Open FileName:="books2.xls", AddToMru:=True

В этом случае, так как у каждого аргумента свое имя, можно присвоить значение аргументу, используя его имя и операцию :=. Работая с именованными аргументами, нет нужды запоминать порядок их следования. Скажем, в предыдущем операторе аргументы можно указать в обратном порядке:

Workbooks.Open AddToMru:=True, FileName:="books2.xls"

Вы вправе применять именованные аргументы и в своих процедурах. Visual Basic автоматически связывает имена аргументов с соответствующими процедурами. Допустим, Вы создали процедуру FormatList, которая принимает два обязательных и два необязательных аргумента:

Sub FormatList(startRow As Integer, startCol As Integer, _

Optional redText, Optional sortList)

Другая процедура (DoList) вызывает FormatList с передачей аргументов по именам:

Sub DoListO

FormatList redText :=True, startCol :=2, startRow:=2

End Sub

Здесь аргументы расставлены не в том порядке, в каком они объявлены, а один аргумент опущен.

24Локальные переменные в функциях. Статические переменные в функциях.

Локальная переменная — это переменная, объявленная в процедуре.

Локальные переменные могут использоваться только в процедуре, в которой они объявлены.

После выполнения процедуры переменная становится невостребованной, поэтому Excel освобождает соответствующую область памяти.

Если требуется сохранить значение переменной, объявите ее как static .

Чтобы объявить локальную переменную — вставьте оператор Dim между операторами Sub и End Sub .

Dim – сокращение от Dimension (Размерность). В старых версиях BASIC этот оператор использовался исключительно для объявления размерности массива.

Другой способ указания типа данных для переменной : язык VBA позволяет присоединить символ к названию, чтобы указать ее тип данных.

Пример, можно объявить переменную MyVar как целое число, добавив к ее названию символ %: Dim MyVar %

Символы объявления типов данных представлены для большинства типов данных VBA (отсутствующие в таблице типы данных не имеют собственного символа объявления типа).

Integer- %

Long &

Single !

Double #

Currency @

String S

Статичиские переменные-не меняющие переменные.

25.Аргументы подпрограмм по умолчанию.

Процедура Sub — это последовательность операторов Visual Basic, заключенных между операторами Sub и End Sub. Процедура Sub выполняет задачу и возвращает контроль коду вызова, но она не возвращает значения в код вызова.

При каждом вызове процедуры ее операторы выполняются, начиная с первого исполняемого оператора после оператора Sub и заканчивая первым из операторов End Sub, Exit Sub или Return.

Процедуру Sub можно определять в модулях, классах и структурах. По умолчанию она является Public, что означает, что ее можно вызывать из любого места в приложении, которое имеет доступ к модулю, классу или структуре, в котором она определена. Другими словами, method описывает процедуру Sub или Function, доступ к которой осуществляется вне модуля, класса или структуры, в которой определена эта процедура. Дополнительные сведения см. в разделе Процедуры в Visual Basic.

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

26.Организация преждевременного выхода из процедур и функций.

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

Процедуры и функции

В Visual Basic, как и во многих других языках программирования, большинство программ создается из блоков - процедур и функций. Весь программный код находится как бы внутри этих процедур. Если возникает необходимость в решении какой-либо задачи в любом месте программы, то вызывается процедура. В Visual Basic нельзя ввести код между процедурами. Код всегда должен находиться внутри процедуры.

Давайте разберёмся с понятиями, и определим, что будет называться процедурой, а что функцией.

Процедуры:

Процедура - это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом Sub и заканчивается End. Вот общий синтаксис процедуры:

[Private | Public | Friend] [Static] Sub name [(arglist)]

[здесь некий код]

[Exit Sub]

[здесь тоже может быть некий код]

End Sub

Функции:

Функция - это некий блок кода, который будет возвращать значение. Этим, и только этим функции отличаются от процедур. Общий синтаксис функции:

[Public | Private | Friend] [Static] Function имяфункции _

[(arglist)] [As type]

[здесь некий код]

[имяфункции = выражение]

[Exit Function]

[здесь тоже может быть некий код]

[имяфункции = выражение]

End Function

27.Ввод-вывод данных. Применение встроенных диалоговых окон.

InputBox(Сообщение[,Заголовок])

У этой функции первый слева аргумент обязательный, а все остальные – необязательные. Назначение аргументов:

сообщение – выражение типа String, отображаемое в диалоговом окне;

заголовок – выражение типа String, отображаемое в строке заголовка диалогового окна.

Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа String, содержащее текст, введенный в окне.

28.Ввод-вывод данных. Применение рабочих таблиц.

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

Объект Range содержится в объекте Worksheet и состоит из одной ячейки или диапазона ячеек на отдельном рабочем листе. В следующих разделах будут рассмотрены три способа задания ссылки на объекты Range в программе VB А.

¦ Свойство Range объекта класса Worksheet или Range .

¦ Свойство Cells объекта Worksheet .

¦ Свойство Offset объекта Range .

Другим способом сослаться на диапазон является использование свойства Cells . Как и Range , вы можете использовать свойство Cells в объектах Worksheet и Range . Справочная система указывает на три варианта синтаксиса свойства Cells :

объект. Cells ( номер_строки, номер_столбца) ;

объект. Cells ( номер_строки) ;

объект . Cells .

Проиллюстрируем на примерах особенности применения свойства Cells . Вначале в ячейку А1 листа Лист1 введите значение 9. В данном случае используется первый синтаксис, где аргументами являются номер строки (от 1 до 65536) и номер столбца (от 1 до 256):

29.Типы ошибок, возникающих при отладке и выполнении программ

Ошибки компиляции

Ошибки компиляции, также называемые ошибками компилятора, препятствуют запуску программы. При нажатии клавиши F5 для запуска программы Visual Basic компилирует код в двоичный язык, который понятен компьютеру. Если компилятор Visual Basic получает код, который он не понимает, он выдает ошибку компилятора.

Большинство ошибок компилятора вызваны ошибками при вводе кода. Например, может быть неправильно написано ключевое слово, пропущены некоторые необходимые знаки препинания или использован оператор End If без предварительного использования оператора If.

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

Ошибки во время выполнения

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

Примером такой недопустимой операции является деление на ноль. Предположим, что имеется следующий оператор.

Speed = Miles / Hours

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

Когда возникает ошибка во время выполнения, для определения ее причины можно использовать средства отладки в Visual Basic. О том, как найти и исправить ошибки во время выполнения, вы узнаете в занятии Это не работает! Поиск и устранение ошибок времени выполнения.

Логические ошибки

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

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

Логические ошибки труднее искать и устранять, но Visual Basic включает средства отладки, упрощающие это задание. О том, как найти и исправить логические ошибки, вы узнаете в занятии Что? Это не было запланировано! Поиск логических ошибок.

30.Пошаговое исполнение программ

Для выполнения программы в пошаговом режиме через меню <Debug> возможны четыре варианта.

Осуществление последовательной шаг за шагом отладки всей программы с заходом во все действующие процедуры, написанные при составлении программы. Для этого используется команда <Debug> => <Step Into> (Отладка, Шаг с заходом), либо кнопка <Step Into> (Шаг с заходом) на панели инструментов <Debug> (Отладка).

Осуществление последовательной шаг за шагом отладки всей программы, исключая заход во все действующие процедуры из числа стандартных (встроенных) процедур. Такие процедуры выполняются целиком. Для этого используется команда <Debug> => <Step Over> (Отладка, Шаг с обходом), либо кнопка <Step Over> (Шаг с обходом) на панели инструментов <Debug> (Отладка).

Осуществление последовательной шаг за шагом отладки с завершением выполнения текущей процедуры и выходом с остановкой на строку, следующую за строкой, вызывавшей процедуру. Для этого используется команда <Debug> => <Step Out> (Отладка, Шаг с выходом), либо кнопка <Step Out> (Шаг с выходом) на панели инструментов <Debug> (Отладка).

Выполнение программы до строки, на которой установлен курсор. Для этого используется команда <Debug> => <Run to Cursor> (Отладка, Выполнить до текущей позиции).

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

- диалоговое окно Watches (Контрольные значения);

- диалоговое окно Locals (Локальные переменные).

Вызов окна Watches осуществляется командой <View> => <Watches Window> (Вид, Окно контрольных значений) или нажатием кнопки <Watches Window> на панели инструментов <Debug>. Это окно позволяет просматривать значение (Value), тип (Type) и контекст (Context) для каждого используемого в программе выражения (Expression). Под контекстом понимается область, где выражение может иметь значение.

Для того чтобы проконтролировать значение какого-либо выражения отлаживаемой программы, необходимо использовать диалоговое окно <Add Watch> (Добавить контрольное значение). Вызов окна осуществляется командой <Debug> => <Add Watch> (Отладка, Добавить контрольное значение). Рассматриваемое окно содержит следующие элементы управления.

Поле Expression (Выражение), предназначенное для ввода выражения.

Раздел Context (Контекст), содержащий два раскрывающихся списка: Procedure (Процедура) и Module (Модуль). Первый предназначен для выбора процедуры, в контексте которой будет рассматриваться переменная. Второй список позволяет выбрать модуль, в контексте которого будет рассматриваться выражение.

Группа переключателей <Watch Type> (Тип контрольного значения), позволяющая установить один из режимов просмотра:

- просмотр выражения <Watch Expression> (контрольное выражение);

- режим остановки программы, если значение выражения истинно <Break When Value Is True>;

- режим остановки программы, если изменилось значение выражения <Break When Value Changes>.

Редактирование параметров контрольного выражения, а также удаление его из окна контрольных значений осуществляется с помощью диалогового окна <Edit Watch> (Изменение контрольного значения). Это окно вызывается командой <Debug> => <Edit Watch> (Отладка, Изменение контрольного значения). По набору элементов управления оно является полным аналогом окна <Add Watch>.

Для быстрого просмотра значения выражения, выбранного в окне программы или в окне отладки, или для добавления контрольного значения предназначено диалоговое окно <Quick Watch>. Вызов этого окна осуществляется нажатием кнопки <Quick Watch> (Контрольное значение) на панели инструментов <Debug>.

Для просмотра значений переменных текущей процедуры предназначено окно локальных переменных <Locals Window>. Перед вызовом этого окна необходимо приостановить выполнение программы, а затем выполнить команду <View> => <Locals Window> (Вид, Окно локальных переменных) или воспользоваться кнопкой <Locals Window> панели инструментов <Debug>. В окне локальных переменных автоматически выводятся имена, текущие значения и типы всех переменных и объектов текущей процедуры. Это окно отображает переменные только в режиме прерывания программы. При каждом прерывании программы происходит обновление всех отображаемых в окне переменных.

Быстрая проверка выполнения той или иной инструкции программы может быть осуществлена посредством окна проверки <Immediate Window>. Это окно позволяет вводить инструкцию и тут же выполнить её путем нажатия клавиши <Enter>. При этом инструкция должна быть записана в одну строку.

Пример: <s = 0: For I = 1 to 5: s = s + I^2: Next I: MsgBox s >.

31.Возможности просмотра значений при отладке программы

Проанализируем полученный результат. Что изменилось после того, как мы вставили функцию Val? Теперь мы знаем что переменным paramA, paramB и paramC в любом случае присвоится число. Но вот какое число? Ведь если мы введём в поля нули, то и переменные будут содержать нули! Также, если в поля мы введём !буквы!, то переменные также будут содержать нули. Значит нужно сделать проверку на содержание в переменных нулей. Запустите программу и введите в поля нули (или буквы) и нажмите кнопку. Visual Basic выдаст окно:

Нажимаем Debug и вот что видим:

Причина ошибка заключается в невозможности деления на 0, а paramA у нас как раз и равен 0. К тому при нулевых коэффициентах квадратное уравнение решается гораздо проще (например, если c=0, то x вынесем за скобку, ну а дальше всё просто). Избавимся от этого недоразумения. Для этого, вставим после присвоения значения свойства Text переменным ещё одну проверку - проверку на содержание нулей в переменных:

If paramA = 0 Or paramB = 0 Or paramC = 0 Then

MsgBox "Нули в качестве коэффициентов не допускаются!", _

vbCritical

Exit Sub

End If

32.Основные свойства и методы объекта Range

Встроенные в Excel команды и методы позволяют эффективно работать с диапазоном: заполнять его элементами по образцу, сортировать, фильтровать и консолидировать данные, строить итоговую таблицу и создавать сценарии, решать нелинейное уравнение с одной переменной.

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

Value Возвращает значение из ячейки или в ячейки диапазона. В данном примере переменной х присваивается значение из ячейки c1:

Name Возвращает имя диапазона. В данном примере диапазону а1:в2 присваивается имя «итоги»:

Count Возвращает число объектов в наборе. В данном примере переменной х присваивается значение, равное числу строк диапазона а1:в2:

ColumnWidth, RowHeight Возвращает ширину столбцов и высоту строк диапазона

CurrentRegion Возвращает число строк текущего диапазона. Текущим является диапазон, ограниченный пустыми строками и столбцами и содержащий данный элемент. В следующем примере переменной у присваивается значение, равное числу строк в текущем диапазоне, содержащем ячейку a1:

WrapText Позволяет переносить текст при вводе в диапазон. Допустимые значения True и False. В следующем примере в ячейку в2 вводится текст «длинный текст», и в этой ячейке устанавливается режим ввода текста с переносом:

EntireColumn, EntireRow Возвращает столбец и строку соответственно. В данном примере очищается содержимое строки и выделяется столбец с активной ячейкой:

Comment Возвращает объект comment (примечание), который связан с левым верхним углом диапазона при отображении на экране.

Vertical Alignment Вертикальное выравнивание. Допустимые значения: xlBottom (выравнивание по нижнему краю);

xlCenter (выравнивание по центру);

xlJustify (выравнивание по высоте);

Orientation Ориентация. Допускается либо угол поворота текста в градусах от -90° до 90°

ShrinkToFi Допустимые значения: True (автоматическое изменение шрифта так, чтобы текст помещался в ячейку) и False (в противном случае)

Font Возвращает объект Font (шрифт). Объект Font имеет следующие свойства:

Horizontal Alignment Горизонтальное выравнивание. Допустимые значения:

Методы объекта Range

AutoFit Автоматически настраивает ширину столбца и высоту строки

Clear,

Метод clear очищает диапазон. В следующем примере очищается диапазон A1:G37.

Insert Вставка ячейки или диапазона ячеек. В следующем примере вставляется новая строка перед четвертой строкой рабочего листа Лист1:

Select Выделение диапазона

ClearNotes Комментарии, содержание, форматы и примечания соответственно

Copy Копирует диапазон в другой диапазон или в буфер

Delete Удаляет диапазон

AddComment Добавляет примечание к диапазону. Синтаксис: AddComment (Text)

Address Возвращает адрес ячейки. Синтаксис: Address(rowAbsolute, columnAbsolute, referenceStyle, external, relativeTo)

Cut Копирует диапазон с удалением в указанный диапазон

Columns, Rows Возвращают соответственно семейства столбцов и строк, из которых состоит диапазон. В следующем примере переменным i и j присваиваются значения, равные количеству столбцов и строк в выделенном диапазоне соответственно:

i=Selection.Columns.Count

j == Selection.Rows.Count

33.Способы создания формы и размещения на ней элементов управления

Создание форм VBA, свойства форм, методы Show(), Hide(), команда Unload, событие Initialize()

Создать форму очень просто: для этого достаточно в редакторе Visual Basic щелкнуть правой кнопкой мыши на проекте (т. е. на имени документа) в окне Project Explorer и в контекстном меню выбрать Insert | UserForm. Откроется окно дизайнера форм (Form designer), в котором будет представлено пустое серое окно формы (по умолчанию она называется UserForm1) и рядом Toolbox — панель с набором элементов управления (рис. 1).

Рис. 1. Все готово для работы с формой

Если у вас включен показ окна свойств Properties (он включается по клавише <F4>), то в этом окне будут представлены свойства формы. Переход к редактору кода для этой формы (по умолчанию открывается событие Click) выполняется по клавише <F7>, возврат обратно в окно дизайнера форм — по <Shift>+<F7>.

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

Некоторые самые важные свойства форм (кроме ShowModal все они применимы и для других элементов управления) приведены далее.

Name — это свойство определяет имя формы. Пользователь вашей программы, скорее всего, его никогда не увидит. Имя формы используется только программистом в коде для этой формы (и в окнах редактора Visual Basic). После создания формы ее имя, предлагаемое по умолчанию (UserForm1), рекомендуется заменить на что-нибудь более значимое, чтобы было проще ориентироваться в программе (это относится ко всем элементам управления).

Caption — определяет заголовок формы (по умолчанию совпадает с именем формы). Рекомендуется ввести строку, которая будет напоминать пользователю о назначении формы (например, "Выбор типа отчета").

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

ShowModal — если свойство установлено в True (по умолчанию), то пользователь не может перейти к другим формам или вернуться в документ, пока не закроет эту форму (так называемый "модальный" режим работы).

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

Самые важные методы форм перечислены в следующем списке.

В процессе редактирования формы (из окна редактора Visual Basic) ее можно запускать по нажатию клавиши <F5>. После того, как форма будет готова, вы должны обеспечить ее запуск в документе. Для запуска формы нужно воспользоваться методом Show():

UserForm1.Show

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

• из обычного макроса, привязанного к кнопке или клавиатурной комбинации;

• из автозапускаемого макроса (макроса с названием AutoExec для Word);

• из кода для элемента управления, расположенного в самом документе (например, CommandButton) или на другой форме (для перехода между формами);

• поместить его в обработчик события Open для документа Word или книги Excel, чтобы форма открывалась автоматически при открытии документа.

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

• спрятать форму (использовать метод Hide()), например:

UserForm1.Hide

Форма будет убрана с экрана, но останется в памяти. Потом при помощи метода Show() можно будет опять ее вызвать в том же состоянии, в каком она была на момент "прятанья", а можно, например, пока она спрятана, программно изменять ее и расположенные на ней элементы управления. Окончательно форма удалится из памяти при закрытии документа;

• если форма больше точно не потребуется, можно ее удалить из памяти при помощи команды Unload:

Unload UserForm1

Остальные методы относятся либо к обмену данными через буфер обмена (Copy(), Cut(), Paste()), либо к служебным возможностям формы (PrintForm(), Repaint(), Scroll()).

Важнейшая концепция VBA — события. Событие (event) — это то, что происходит с программой и может быть ею распознано. Например, к событиям относятся щелчки мышью, нажатия на клавиши, открытие и закрытие форм, перемещение формы по экрану и т. п. VBA построен таким образом, чтобы можно было создавать на нем программы, управляемые событиями (event driven). Такие программы противопоставляются устаревшему процедурному программированию.

Самые важные события форм приведены далее.

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

Click (выбирается по умолчанию) и DblClick — реакция на одиночный и двойной щелчок мыши соответственно. Для формы эти события используются не так часто. Обычно обработчики щелчков применяются для кнопок (элементов управления CommandButton).

Error — это событие используется при возникновении ошибки в форме, предоставляя пользователю возможность исправить сделанную им ошибку.

Terminate — используется при нормальном завершении работы формы и выгрузке ее из памяти (например, по команде Unload). Обычно применяется для разрыва открытых соединений с базой данных, освобождения ресурсов, протоколирования и т. п. Если работа формы завершается аварийно (например, запустившее форму приложение выдало команду End), то это событие не возникает.

Остальные события связаны либо с изменением размера окна формы, либо с нажатиями клавиш, либо с активизацией (получением фокуса) или деактивизацией (потерей фокуса).

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

Нужно отметить некоторые моменты, связанные с созданием и редактированием форм:

иногда для обсуждения форму удобно распечатать. Для этого предусмотрено специальное диалоговое окно, которое можно вызвать по нажатию клавиш <Ctrl>+<P> (при выбранной форме в дизайнере);

если все нужные вам элементы управления трудно уместить на одной форме (даже большого размера), в вашем распоряжении два варианта: воспользоваться двумя формами (осуществляя переход между ними при помощи методов Show() и Hide(), подвязанных к элементам управления) или воспользоваться несколькими вкладками для формы. Для этой цели в вашем распоряжении — специальный элемент управления Multipage.

34.Элементы управления Label

Это самый простой элемент управления. Надпись (Label) — это просто область формы, в которой выводится какой-то текст (рис. 2).

Рис. 2. Элемент управления Label на форме

Пользователь не может изменять этот текст. Чаще всего элемент управления Label используется как строка состояния с объяснением того, что сейчас произошло, или происходит, или должен сделать пользователь, и т. п. Этот элемент управления может использоваться и как пояснение для других элементов управления, таких как ползунок.

Главное свойство элемента управления Label — это Caption, тот текст, который будет выводиться на форме. Большая часть остальных свойств относится к форматированию этого текста или настройке внешнего вида этого элемента управления.

Несмотря на то, что для этого элемента управления предусмотрен набор событий (Click, Error и т. п.), использовать их не принято: пользователю обычно не приходит в голову, что по надписи нужно щелкнуть мышью.

35.Элементы управления TextBox

Текстовое поле (TextBox) — один из самых часто используемых элементов управления (рис. 3).

Рис. .3. Текстовое поле (элемент управления TextBox) на форме

Текстовое поле используется:

для приема каких-либо текстовых данных, вводимых пользователем (например, для отправки по почте, для занесения в базу данных и т. п.);

для вывода пользователю текстовых данных с возможностью их редактирования (из базы данных, листа Excel и т. п.);

для вывода пользователю текстовых данных с возможностью копирования и печати, но без возможности изменения (классический пример — текст лицензионного соглашения).

Далее приведены некоторые важные свойства этого элемента управления.

Value (или Text, эти два свойства для текстового поля идентичны) — то текстовое значение, которое содержится в этом поле. Используется для занесения исходного значения и для приема значения, введенного пользователем, в строковую переменную.

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

ControlSource — ссылка на источник текстовых данных для поля. Может ссылаться, например, на ячейку в Excel, на поле в объекте Recordset и т. п. При изменении пользователем данных в текстовом поле автоматически изменится значение на источнике, определенном в ControlSource.

ControlTipText — текст всплывающей подсказки, которая появляется, когда пользователь наводит указатель мыши на элемент управления. Рекомендуется к заполнению для всех элементов управления (для самой формы это свойство не предусмотрено).

Enabled — если установить в False, то текст в поле станет серым и с содержимым поля ничего нельзя будет сделать (ни ввести текст, ни выделить, ни удалить). Обычно это свойство используется, чтобы показать пользователю, что этот элемент управления отключен до выполнения каких-либо условий (это относится ко всем элементам управления).

Locked — поле будет выглядеть как обычно, пользователь сможет выделять и копировать данные из него, но не изменять их. Используется для показа неизменяемых данных типа лицензионных соглашений, сгенерированных значений и т. п.

MaxLength — максимальная длина значения, которое можно ввести в поле.

Иногда можно использовать свойство AutoTab — при достижении определенного количества символов управление автоматически передается другому элементу управления.

MultiLine — определяет, можно ли использовать в текстовом поле несколько строк или только одну. Если вам нужно текстовое поле для приема одного короткого значения, подумайте, нельзя ли вместо элемента управления обойтись функцией InputBox().

PasswordChar — позволяет указать, за каким символом будут "прятаться" вводимые пользователем значения. Используется, конечно, при вводе пароля.

ScrollBars — определяет, будут ли показаны горизонтальная и вертикальная полосы прокрутки (в любом сочетании). Если текст будет длинным, без них не обойтись.

WordWrap — настоятельно рекомендуется включать в тех ситуациях, когда значение MultiLine установлено в True. В этом случае будет производиться автоматический переход на новую строку при достижении границы текстового поля.

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

Главное событие для текстового поля — это событие Change (т. е. изменение содержания поля). Обычно на это событие привязывается проверка вводимых пользователем значений или синхронизация введенного значения с другими элементами управления (например, сделать доступной кнопку, изменить текст надписи и т. п.)

36.Элементы управления OptionButton

Если CheckBox предназначен для выбора невзаимоисключающих вариантов, то переключатель (OptionButton) используется как раз для выбора варианта в ситуации "или/или" (рис. 7).

Рис. 7. Переключатели (2 объекта OptionButton) в рамке (объект Frame)

Классический пример, при помощи которого можно проиллюстрировать работу OptionButton, — выбор радиостанции на радиоприемнике: сразу две радиостанции слушать нельзя (поэтому иногда этот элемент управления называют RadioButton).

Главных свойств у этого элемента управления два.

Caption — надпись для переключателя.

Value — установлен переключатель или нет (только два состояния — True или False).

Главное событие тоже стандартное — Change.

Конечно, использовать один переключатель бессмысленно. Выбор должен предоставляться хотя бы из двух вариантов, и при выборе одного из них другой автоматически снимается. Однако в некоторых ситуациях нам необходимо выбрать из нескольких наборов вариантов (например, отчет за месяц/квартал/год, тип отчета, нужный филиал и т. п.). Решение простое — переключатели нужно сгруппировать.

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

37.Элементы управления CheckBox

Флажки (CheckBox) (пользователи часто называют их "галками" или "птичками") и кнопки с фиксацией (ToggleButton) используются для выбора невзаимоисключающих вариантов (если этих вариантов немного). Они представлены на рис. 6.

Рис. 6. Флажки (элементы управления CheckBox) и кнопки с фиксацией (ToggleButton)

Для CheckBox предусмотрено три главных свойства.

Caption — надпись справа от флажка, которая объясняет, что выбирается этим флажком.

TripleState — если это свойство установлено в False (по умолчанию), то флажок может принимать только два состояния: установлен или нет. Если для TripleState установить значение True, то появляется третье значение Null, когда установлен "серый" флажок. Такое значение часто используется, например, при выборе компонентов программы при установке, когда выбраны не все компоненты, а лишь некоторые.

Value — само состояние флажка. Может принимать значения True (флажок установлен), False (снят) и Null — "серый" флажок (когда свойство TripleState установлено в True).

Главное событие элемента CheckBox — Change.

38.Элементы управления ListBox

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

ˆв нем нельзя открыть список значений по кнопке. Все значения видны сразу в поле, аналогичном текстовому, и поэтому большое количество позиций в нем уместить трудно;

пользователь не может вводить свои значения — только выбирать из готовых.

Пример этого элемента управления представлен на рис. 5.

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

Обычно ListBox используется:

как промежуточное средство отображения введенных или выбранных пользователем через ComboBox значений (или любых других списков, например, для списка выбранных файлов);

как средство редактирования списка значений, сформированных вышеуказанным образом или полученных из базы данных (для этого можно рядом с ListBox разместить кнопки Удалить или Изменить).

Рис. 5. Список (элемент управления ListBox) на форме

Основные свойства, методы и события у ListBox — те же, что и у ComboBox.

Главное отличие — это свойство MultiSelect, которое позволяет пользователю выбирать несколько значений. По умолчанию это свойство отключено.

39.Элементы управления ComboBox

Комбинированный список (ComboBox) также используется очень часто. Этот элемент управления позволяет пользователю выбирать "готовые" значения из списка, так и вводить значения самостоятельно (хотя это можно запретить).

Пример элемента управления ComboBox представлен на рис. 4.

Рис. 4. Комбинированный список (элемент управления ComboBox) на форме

Обычно ComboBox используется в двух ситуациях:

когда пользователю необходимо выбрать одно или несколько значений из списка размером от 4-х до нескольких десятков позиций. Если позиций меньше, то проще использовать переключатель (OptionButton), если больше — то ориентироваться в списке становится неудобно и необходимо использовать специальные приемы, когда пользователь вводит первые буквы нужного слова и в списке остаются только значения, которые начинаются с этих букв;

когда список позиций для выбора необходимо формировать динамически на основании данных из источника (базы данных, листа Excel и т. п.).

К сожалению, через окно свойств заполнить список позициями не получится — для этой цели придется использовать специальный метод AddItem().

Обычно он помещается в обработчик события Initialize для формы. Применение его может выглядеть так:

Private Sub UserForm_Initialize()

ComboBox1.AddItem "Санкт-Петербург"

ComboBox1.AddItem "Ленинградская область"

ComboBox1.AddItem "Москва"

ComboBox1.AddItem "Московская область"

End Sub

Второй параметр varIndex (необязательный) этого метода может использоваться для определения положения элемента в списке, но он не может превышать значения свойства ListCount и поэтому для начальной загрузки ComboBox не подходит.

Самые важные свойства комбинированного списка представлены далее.

ColumnCount, ColumnWidth, BoundColumn, ColumnHeads, RowSource — свойства которые применяются при работе со списками из нескольких столбцов. Пользователи не любят такие списки, и поэтому к использованию они не рекомендуются (гораздо проще сделать несколько комбинированных списков).

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

MatchRequired — определяет, разрешается ли пользователю вводить то значение, которого нет в списке. По умолчанию False, т. е. разрешено.

Value (или Text) — позволяет программным способом установить выбранное значение в списке или получить в переменную выбранное или введенное пользователем значение.

Остальные свойства (AutoSize, Enabled, Locked, ControlText, ControlTipText,

MaxLength) применяются точно так же, как и для TextBox.

Главное событие для комбинированного списка — Change, то же, что и для TextBox. Обычно в обработчике этого события проверяются введенные пользователем значения, эти значения переносятся в текстовое поле или в ListBox (если нужно дать пользователю возможность выбрать несколько значений, поскольку свойства MultiSelect у ComboBox нет) и т. п.

40.Элементы управления ScrollBar

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

Полосы прокрутки (ScrollBars) чаще всего встречаются в текстовых полях, когда введенный текст полностью на экране не помещается. Однако ничего не мешает вам использовать ScrollBar как отдельный элемент управления (пользователи часто называют его "ползунок") для выбора какого-то значения из диапазона (рис. 9). Обычно такой элемент управления используется для выбора плавно меняющихся значений, например: уровня громкости, яркости, сжатия, приоритета и т. п.

Рис. 9. Полоса прокрутки (ScrollBar) и счетчик (SpinButton)

Главное событие для ScrollBar — уже знакомое нам Change.

Главные свойства этого элемента управления представлены далее.

Max и Min — максимальное и минимальное значения, которые можно задать при помощи этого элемента управления. Возможный диапазон — от −32 767 до +32 767. При этом максимальное значение может быть и меньше минимального — просто ползунок придется тянуть в обратную сторону.

LargeChange и SmallChange — определяют, какими шагами будет двигаться ползунок при перемещении его пользователем (путем щелчка на полосе около ползунка или при нажатии на одну из кнопок направления соответственно).

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

ProportionalThumb — определяет размер ползунка: будет ли он пропорционален размеру полосы прокрутки (по умолчанию) или будет фиксированного размера.

Value — главное свойство этого элемента управления. Определяет положение ползунка и то значение, которое будет возвращать этот элемент управления программе.

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

Private Sub ScrollBar1_Change()

Label1.Caption = ScrollBar1.Value

End Sub

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

41.Элементы управления MultiPage

Элемент управления MultiPage (набор страниц) реализует многостраничные диалоговые окна. Заголовки страниц отображаются на вкладках. Переход от страницы к странице осуществляется выбором вкладки посредством щелчка кнопкой мыши.

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

Объект MultiPage содержит в себе семейство Pages, являющееся набором всех страниц, входящих в этот объект.

MultiRow

Допустимые значения:

True (если ярлыки не помещаются в одну строку, то они выводятся в несколько строк)

False (если ярлыки не помещаются в одну строку, то появляется полоса прокрутки, позволяющая переходить от страницы к странице)

SelectedItem

Возвращает выбранную страницу

Value BoundValue

Возвращает номер активной страницы. Нумерация производится с нуля.

42.Элементы управления TabStrip

Заметим, что TabStrip - не контейнер: если добавить его к пользовательской форме и затем поместить во внутреннюю область, например, кнопку, эта кнопка не будет перемещаться вместе с TabStrip. Следовательно, самого по себе TabStrip недостаточно, чтобы обеспечить вывод нужной страницы при щелчке по закладке. Для этого необходим еще один элемент управления, являющийся контейнером.

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