Расчетно-пояснительная записка состоит из следующих разделов.




Массивы

Массив – совокупность однотипных элементов данных (чисел, логических данных, символов), которой при обработке присвоено определенное имя. Массивы бывают статические и динамические. Статическими называются массивы, количество элементов в которых заранее известно и не изменяется в ходе выполнения программы. Динамические массивы – массивы, в которых либо не известно начальное количество элементов, либо размерность массива (количество элементов) изменяется при выполнении программы.

Описание массивов:

1) одномерный статический массив

Dim <имя массива> ( <начальное значение индекса > To <конечное значение индекса> ) [ As <тип элементов массива >]

или

Dim <имя массива> ( <количество элементов массива > ) [ As <тип элементов массива >];

2) двумерный статический массив

Dim <имя массива > ( <начальное значение индекса по строкам> To <конечное значение индекса по строкам >, < начальное значение индекса по столбцам > To < конечное значение индекса по столбцам> ) [ As <тип элементов массива> ]

или

Dim <имя массива> ( <количество строк>, <количество столбцов> ) [ As <тип элементов массива>].

Первый способ отличается от второго тем, что в первом случае указывается индекс первого и последнего элементов, во втором же – только количество элементов, нумерация которых может начинаться как с 0, так и с 1. Это зависит от опции Base (задает базовый индекс). Если опция не указана, то нумерация элементов массива начинается с нуля. Для изменения базового индекса в начале листа модуля необходимо написать Option Base 1.

Пример:

а) Dim А(1 To 10) As Integer – массив А состоит из 10 элементов целого типа, индексы которых 1, 2, …, 10;

б) Dim А(10) As Integer – массив состоит из 10 значений целого типа. Индексация зависит от опции Base. Если опция не указана, то номера элементов - от 0 до 9, если же указана (т.е. вначале модуля записано Option Base 1), то номера элементов изменяются от 1 до 10;

3) динамический массив:

Dim <имя массива> () [ As <тип элементов массива>].

После определения количества элементов массива выполняется его переопределение:

ReDim <имя массива> ( <задается размерность массива (одномерного/двумерного > ).

Пример:

Dim А() As Single–динамический массив А вещественных элементов

n=7

ReDim A(1 To n) – переопределение одномерного массива из n значений

ReDim A(5,n) – переопределение двумерного динамического массива, состоящего из 5 сток и n столбцов (начало индексации элементов определяется по опции Base)

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

Пример. Определить сумму положительных элементов массива A5×8.

Public Sub prog4() Dim a(1 To 5, 1 To 8) As Integer Dim s As Integer s = 0 For i = 1 To 5 For j = 1 To 8 a(i,j)=Worksheets(1).Cells(i,j)   If a(i, j) > 0 Then s = s + a(i, j) End If Next j Next I Worksheets(1).Range("A12")= s End Sub   Описание целочисленного массива из 5 строк и 8 столбцов Обнуление переменной s Цикл по строкам (номер строки от 1 до 5) Цикл по столбцам (номер столбца от 1 до 8) Ввод элементов массива с листа Excel (номера строк изменяются от 1 до 5, столбцов – от 1 до 8) Сравнение элементов массива с нулем Добавление положительного элемента к текущей сумме положительных элементов Прибавление шага (в данном случае 1) к счетчику j Прибавление шага (в данном случае 1) к счетчику i Вывод результата в ячейку А12

 
 

Рисунок 10 - Блок-схема программы prog4

Пример. В одномерном динамическом массиве определить максимальный элемент и поменять его местами с первым.

Public Sub prog5() Dim b() As Double   Dim max As Double, m As Double n=CInt(InputBox("Введите размерность массива")) ReDim b(1 To n) For i = 1 To n b(i) = CDbl(InputBox("Введите " & i & "-ый элемент массива")) Next i max = b(1): m = 1     For i = 2 To n If b(i) > max Then max = b(i) m = i End If Next i t = b(1) b(1) = b(m) b(m) = t   For i = 1 To n Worksheets(1).Range("D"& i)=b(i) Next i End Sub Описание динамического массива вещественных значений   Ввод размерности массива (вводимое значение преобразуется к целому типу) Переопределение массива Цикл с параметром используется для ввода элементов массива через окно ввода     Переменной max присваивается значение первого элемента массива (считается первый элемент максимальным) и присваивается переменной m его номер Начиная со второго элемента, просматриваются все элементы массива Каждый элемент сравнивается с максимальным на данный момент элементом: если текущий (i-ый) элемент оказался больше максимального, то значение переменной max изменяется на это значение и запоминается его номер в переменной m С помощью промежуточной переменной t меняются значения двух переменных С помощью цикла с параметром выводится массив (элементы массива) на лист1 в столбец D, начиная с первой строки

 
 

Рисунок 11 - Блок-схема программы prog5

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

При решении сложной задачи, ее разделяют на более простые и обозримые подзадачи.

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

Таблица 15

  Подпрограмма-процедура Подпрограмма-функция
Описание Sub <имя процедуры> ([<список параметров>]) <операторы> [Exit Sub] <операторы> End Sub Function <имя функции> [(<список параметров>]) [As <тип функции>] <операторы> [Exit Function] <операторы> <имя функции> = <выражение> End Function
Вызов в основной программе 1) <имя процедуры> <список аргументов>; 2) Call <имя процедуры> [(<список аргументов>)]   <имя функции> (<список аргументов>)  

<Список параметров> отличается от < списка аргументов > тем, что первый указывается при описании подпрограммы, второй – при ее вызове в основной программе.

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

[ ByRef | ByVal ] <имя параметра1> [ As <Тип>], [ ByRef | ByVal ] <имя параметра2> [ As <Тип>], [ ByRef | ByVal ] <имя параметра3> [ As <Тип>], …

< Тип > позволяет явно задать тип передаваемых значений. Если тип опущен, то по умолчанию принимает значение Variant.

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

<Список аргументов> перечисляется через запятую. Количество и типы параметров и аргументов должны соответствовать. Аргументы, сответсвующие параметрам с ключевывым словом ByRef (или по умолчанию), должны быть переменными.

Для выхода из подпрограммы и возврата в основную программу, опуская оставшиеся операторы, используется Exit Sub (в процедурах) и Exit Function (в функциях).

Пример. Вычислить сумму членов ряда , где i! – факториал числа i (произведение натуральных чисел от 1 до i).

Public Sub prog6() Dim i As Integer, n As Integer Dim s As Double n = CInt(InputBox("Введите n")) For i = 1 To n s = s + 1 / faktor(i) Next MsgBox s End Sub   Public Function faktor(x As Integer) As Long faktor = 1 For i = 1 To x faktor = faktor * i Next i End Function   При вычислении искомой суммы производится вызов функции factor и передается ее аргумент i     При описании функции типу ее результата присваивается тип длинный целый (Long), т.к., например, 10!=40320, что выходит за диапазон типа Integer. При выполнении функции результат присваивается ее имени

 

 
 

Рисунок 12 - Блок-схема программы prog6 (а) и подпрограммы Faktor (б)

Пример. Построить график функции на отрезке [a;b] с шагом h. Построение графика организовать процедурой.

Public Sub prog7() Dim a As Double, b As Double Dim h As Double Worksheets(1).Range("A:B").Select   Selection.Clear Worksheets(1).ChartObjects.Delete a = CDbl (InputBox("Введите a")) b = CDbl (InputBox("Введите b")) h = CDbl (InputBox("Введите h")) j = 1 For i = a To b Step h Worksheets(1).Range("A" & j) = i Worksheets(1).Range("B" & j) = Sin(i) / (i ^ 2 + 1) j = j + 1 Next i график End Sub   Sub график() n=Application.CountA(Worksheets (1).Range("A:A")) Range("A1:B" & CStr(n)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A1:B" & CStr(n)), PlotBy:= xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1" End Sub   Выделение двух столбцов (А и В) первого листа Очистка от данных выделенного диапазона Удаление с листа имеющихся диаграмм     j используется для задания номера строки при выводе данных В цикле For…Next выводятся на лист Excel данных для построения диаграммы (в столбец А – значения аргумента, в столбец В – значения функции для соответствующего аргумента)   Вызывается процедура график     При создании процедуры график() вначале был создан макрос в Excel, а затем полученный макрос отредактирован. В частности, первая команда в данной процедуре определяет количество заполненных строк на листе в столбце А и это значение присваивается переменной n.  

 
 

Рисунок 13 - Блок-схема программы prog7

Блок-схема макроса не изображается.

5 Обработка строк

Строка — упорядоченная последовательность символов. Каждый символ строковой величины занимает 1 байт памяти (код АSСII). Количество символов в строке называется ее длиной.

Строковая константа — последовательность символов, заключенных в кавычки. Например: “это строковая константа”, “272”. Две следующих друг за другом кавычки (“”) обозначают “пустую строку”, т.е. строку нулевой длины.

Строковая переменная описывается в разделе описания переменных:

Dim <идентификатор> As String

 

Например:

Dim Name As String

Операции над строками.

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

Пример: “Мама”&” мыла”&“ раму”. В результате получится строка: “Мама мыла раму”. Длина результирующей строки не должна превышать 255.

Операции отношения: =, <, >, <=, >=, <> позволяют произвести сравнение двух строк, в результате чего получается логическое значение (true или false). Операция отношения имеет приоритет более низкий, чем операция сцепления. Сравнение строк производится слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в таблице символьной кодировки. Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная. Строки равны, если они полностью совпадают по длине и содержат одни и те же символы.

Пример.

Выражение Результат
“True1”<”True2” True
“Mother”>”MOTHER” True
“Мама” <> “ Мама” True
“Cat”=”Cat” True

Функция Left(S, N) выделяет из строки S подстроку длиной N символов, начиная с левого края строки.

Пример.

Значение S Выражение Результат
“Мама мыла раму” Left (S, 4) “Мама”
“Маша ела кашу” Left (S,8) “Маша ела”

Функция Len (S) определяет текущую длину строки S. Результат — значение целого типа.

Пример.

Значение S Выражение Результат
“test-5” Len(S)  
“(А+В)*С” Len(S)  

Функция InStr(N,S1,S2) обнаруживает первое появление в строке S2 подстроки S1. Поиск начинается с позиции N, этот аргумент необязателен. Результат — целое число, равное номеру позиции, где находится первый символ подстроки S1. Если в S2 подстроки S1 не обнаружено, то результат равен 0.

 

Пример.

Значение S1 Выражение Результат
“Abcdef” InStr(S1,”cd”)  
“abcdcdef” InStr(4,S1,”cd”)  
“abcdef” InStr(S1, “k”)  

Функция Mid(S, Рог, N). Результат – новая строка длины N из символов строки S, взятых подряд, начиная с позиции Poz.

Пример.

Значение S Выражение Результат
“abcdefg” Mid(S,1,3) “abc”
“abcdefg” Mid(S,5,2) “ef”

Функция Right(S,N). Результат- строка длиной N символов, взятых подряд из строки S, начиная с правого края.

Пример.

Значение S Выражение Результат
“ЭВМ IBM-PC” Right (S,6) “IBM-PC”

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

Решение. Идея алгоритма состоит в следующем: просматриваются все символы исходной строки и проверяется принадлежность каждого символьному интервалу от 0 до 9. Если “да”, то такой символ присоединяется к строке S2.

Sub stroki() Dim S1 As String Dim S2 As String Dim S As String Dim i As Integer S1 = InputBox("Введите исходную строку") S2 = " " For i = 1 To Len(S1) S= Mid(S1, i, 1) If S>= "0" And S<= "9" Then S2 = S2 + S Next i MsgBox "Результат: " & S2 End Sub Объявление типов переменных     Ввод строки S1     Просмотр всех символов строки Выделение символа из строки

 

Если при тестировании программы была введена исходная строка: “df56gh£789yt6u8k88w”, будет получен результат: “567896888”.

 

6 Форма и элементы управления

По своей сути форма (или пользовательская форма) представляет собой диалоговое окно, в котором можно размещать различные элементы управления. В приложении может быть как одна, так и несколько форм. Новая форма добавляется в проект выбором команды Вставка (Insert) ® UserForm.

В VBA имеется обширный набор встроенных элементов управления. Используя этот набор и редактор форм, нетрудно создать любой пользовательский интерфейс, который будет удовлетворять всем требованиям, предъявляемым к интерфейсу в среде Windows. Элементы управления являются объектами. Как любые объекты, они обладают свойствами, методами и событиями. Элементы управления создаются при помощи Панели элементов, которая отображается на экране либо выбором команды Вид (View) ® Панель элементов (Toolbox), либо нажатием кнопки панели инструментов Standard. На этой панели представлены кнопки, позволяющие конструировать элементы управления. Для создания элементов управления служат все кнопки панели инструментов, за исключением кнопки Выбор объекта . Щелкнув по кнопке Выбор объекта, можно выбрать уже созданный в форме элемент управления для последующего его редактирования (изменения размеров или редактирования).

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

Таблица 16

Элемент управления Имя Кнопка, его создающая Элемент управления Имя Кнопка, его создающая
Поле TextBox Переключатель OptionButton
Надпись Label Флажок CheckBox
Кнопка CommandButton Выключатель ToggleButton
Список ListBox Рамка Frame
Поле со списком ComboBox Рисунок Image
Полоса прокрутки ScrolBar Набор страниц MultiPage
Счетчик SpinButton Набор вкладок TabStrip

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

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

Таблица 17

Свойство Описание
Caption Надпись, отображаемая при элементе управления
AutoSize Допустимые значения: True (устанавливает режим автоматического изменения размеров элемента управления так, чтобы на нем полностью помещался текст, присвоенный свойству Caption) и False (в противном случае)
Visible Допустимые значения: True (элемент управления отображается во время выполнения программы) и False (в противном случае)
Enabled Допустимые значения: True (пользователь вручную может управлять элементом управления) и False (в противном случае)
Height и Width Устанавливают геометрические размеры объекта (высоту и ширину)
Left и Top Устанавливают координаты верхнего левого угла элемента управления, определяющие его местоположение в форме
ControlTipText Устанавливает текст в окне всплывающей подсказки, связанной с элементом управления. В следующем примере элементу управления CommandButton назначен текст, всплывающей подсказки это кнопка: CommandButton1.ControlTipText = "Это кнопка"
BackColor, ForeColor и BorderColor Устанавливают цвет заднего и переднего плана элемента управления, также его границы
BackStyle Устанавливает тип заднего фона
BorderStyle Устанавливает тип границы. Допустимые значения: fmBorderStyleSingle (граница в виде контура); fmBorderStyleNone(граница невидима)
SpecialEffect Устанавливает тип границы. Отличается от свойства BorderStyle тем, что позволяет установить несколько типов, но одного цвета. BorderStyle позволяет установить только один тип, но различных цветов
Picture (создание картинки) Внедряет картинку на элемент управления. Например, на поверхности кнопки картинка отображается с помощью следующей инструкции: CommandButton1. _ Picture =LoadPicture("с:\my doc\Kpyг.bmp") Функция LoadPicture(ПолноеИмяФайла) считывает графическое изображение. Аргумент ПолноеИмяФайла указывает полное имя графического файла
Picture (удаление картинки) После того как картинка создана на элементе управления, иногда возникает необходимость ее удалить. Это легко достигается присвоением свойству Picture значения LoadPicture("") CommandButton1.Picture = LoadPicture("")

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

Таблица 18

Свойство Описание
TextBox (поле) используется для ввода текста пользователем или для вывода в него результатов расчетов программ
Text Возвращает текст, содержащийся в поле
Multiline Допустимые значения: True (устанавливает многострочный режим ввода текста в поле) и False (однострочный режим)
WordWrap Допустимые значения: True (устанавливает режим автоматического переноса) и False (в противном случае)
Label(надпись) используется для отображения надписей, например, заголовков элементов управления, не имеющих свойства Caption
Caption Возвращает текст, отображаемый в надписи
Multiline Допустимые значения: True (устанавливает многострочный режим ввода) и False (однострочный режим)
WordWrap Допустимые значения: True (устанавливает режим автоматического переноса) и False (в противном случае)
CommandButton (кнопка) используется для инициирования выполнения некоторых действий, вызываемых нажатием кнопки, например запуск программы или остановка ее выполнения, печать и т.д.
Caption Возвращает текст, отображаемый на кнопке
Cancel Допустимые значения: True (устанавливаются отменяющие функции для кнопки, т.е. нажатие клавиши <Esc>приводит к тем же результатам, что и нажатие кнопки) и False (в противном случае)
Accelerator Назначает клавишу, при нажатии на которую одновременно с клавишей <Alt> происходит запуск действий, связанных с кнопкой. Например CommandButton1.Accelerator=”C”
Default Задаёт кнопку по умолчанию, т.е. устанавливает ту кнопку, для которой действия, связанные с ней, будут выполняться при нажатии клавиши <Enter>
Frame (рамка) используется для визуальной группировки элементов управления
Capture Отображает надпись рамки
OptionButton (переключатель) позволяет выбрать один из нескольких взаимоисключающих параметров. Переключатели обычно отображаются группами, обеспечивая возможность выбора альтернативного варианта.
Capture Надпись, отображаемая рядом с переключателем
Value Возвращает True, если переключатель выбран и False в противном случае

Пример. В качестве примера работы с формой сконструируем простое приложение, вычисляющее значение функции, например Cos(x).

Перейдем в VBA и, выполнив команду Insert (Вставка) ® UserForm, добавим в проект форму. Расположим на форме следующие элементы управления

Рисунок 14 – Вид формы в режиме конструктора

Таблица 19

Элемент управления Предназначение
CommandButton1 (кнопка) При нажатии на кнопку запускается процедура обработки события (Private Sub CommandButton1_Click()), которая считывает значение аргумента из поля TextBox1. Проверяется, введено ли в это поле число. Если введено не число, то на экране отображается соответствующее сообщение, прерывается выполнение процедуры, и фокус (курсор) устанавливается на поле TextBox1, предлагая исправить вводимые данные Если введено число, то находится значение функции при введенном значении аргумента, результат выводится во второе поле TextBox2
TextBox1 (поле) Поле для ввода пользователем значения аргумента
Label1 (надпись) Пояснительная надпись для поля ввода
TextBox2 (поле) В это поле будет выводиться значение функции. Поле сделаем недоступным для пользователя, т.е. пользователь не сможет ни ввести, ни скорректировать данные в этом поле
Label2 (надпись) Пояснительная надпись для поля вывода

Форма создана, функция каждого элемента управления известна. Для написания кода программы, связанного с пользовательской формой, достаточно дважды щелкнуть, например, кнопку CommandButton1. Откроется редактор кода на листе модуля UserForm1. Более того, он откроется на том месте, где программируются действия, связанные с элементом управления, который был дважды нажат. Если код еще не набран, то при открытии редактора кода появятся инструкции заголовка и окончания процедуры, которая будет связана с элементом управления. В данном случае в редакторе кода будет:

Private Sub CommandButton1_Click()

End Sub

Private Sub CommandButton1_Click() If Not IsNumeric(TextBox1.Text) Then   MsgBox "Аргумент должен быть числом", _ vbExclamation TextBox1.SetFocus   Exit Sub     End If   x = CDbl(TextBox1.Text)   y = Cos(x)   TextBox2.Text = CStr(y)   End Sub   Проверка является ли введённое значение числом Вывод окна сообщения   Фокус (курсор) устанавливается на поле TextBox1 Досрочный выход из процедуры   При считывании числа из поля ввода при помощи функции CDbl строковый тип, возвращаемый свойством Text, преобразуется в числовой Чтобы вывести результат в поле, переводим число в строковый формат при помощи функции CStr
Private Sub UserForm_Initialize()   UserForm1.Caption = "Значение функции Cos(x)"     Label1.Caption = "Аргумент" Label2.Caption = "Значение функции" CommandButton1.Caption = "OK"   TextBox2.Enabled = False     End Sub Процедура UserForm_Initialize конструирует форму до ее загрузки Инструкция устанавливает текст, отображаемый в строке заголовка формы Инструкции задают видимые надписи для объектов     Инструкция делает TextBox2 недоступным для пользователя  

После конструирования формы и написания кода в модуле формы выберем команду Run ® Run Sub/UserForm, либо нажмем клавишу <F5>, либо кнопку панели инструментов Standard, и форма отобразится поверх активного рабочего листа Excel. Введем значение аргумента и нажмем на кнопку OK.

Рисунок 15 – Вид пользовательской формы

Приводим часто используемые свойства элемента управления ListBox

Таблица 20

ListBox (cписок) применяется для хранения списка значений. Из списка пользователь может выбрать одно или несколько значений, которые в последующем будут использоваться в тексте программы
Свойство Описание
ListIndex Возвращает номер текущего элемента списка. Нумерация элементов списка начинается с нуля
ListCount Возвращает число элементов списка
TopIndex Возвращает элемент списка с наибольшим номером
ColumnCount Устанавливает число столбцов в списке
TextColumn Устанавливает столбец в списке, элемент которого возвращается свойством Text
Enabled Допустимые значения: True (запрещен выбор значения из списка пользователем) и False (в противном случае)
Text Возвращает выбранный в списке элемент
List Возвращает элемент списка, стоящий на пересечении указанной строки и столбца. Синтаксис:List(row, column)
RowSource   Устанавливает диапазон, содержащий элементы списка
ControlSource Устанавливает диапазон (ячейку), куда возвращается выбранный элемент из списка
MultiSelect Устанавливает способ выбора элементов списка. Допустимые значения: fmMultiSelectSingle (выбор только одного элемента); fmMultiSelectMulti (разрешен выбор нескольких элементов посредством либо щелчка, либо нажатием клавиши <Пробел>); fmMultiSelectExtended (разрешено использование клавиши <Shift> при выборе ряда последовательных элементов списка)
Selected Допустимые значения: True (если элемент списка выбран) и False (в противном случае). Используется для определения выделенного текста, когда свойство MultiSelect имеет значение fmMultiSelectMulti или fmMultiSelectExtended
ColumnWidths Устанавливает ширину столбцов списка. Синтаксис: ColumnWidths = String String — строка, устанавливающая ширину столбцов. В следующем примере устанавливается ширина каждого из трех столбцов списка: With ListBox1 .ColumnCount = 3 .ColumnWidths = "20;30;30" End With
ColumnHeads Допустимые значения: True (выводятся заголовки столбцов раскрывающегося списка) и False (в противном случае)
ListStyle Устанавливает способ выделения выбранных элементов. Допустимые значения: fmListStylePlain (выбранный элемент из списка выделяется цветом); fmListStyleOption (перед каждым элементом в списке располагается флажок и выбор элемента из списка соответствует установке этого флажка)

Окончание таблицы 20

Свойство Описание
MatchEntry Выводит первый подходящий элемент из списка при наборе его имени на клавиатуре. Допустимые значения: fmMatchEntryNone (режим вывода подходящего элемента в списке отключен); fmMatchEntryFirstLetter (выводит подходящий элемент по набранной первой букве. В этом случае, предпочтительно, чтобы элементы списка были бы упорядочены в алфавитном порядке); fmMatchEntryComplete (выводит подходящий элемент по полному набранному имени)
BoundColumn Устанавливает тип, возвращаемый свойством Value. А именно, если свойство BoundColumn равно 0, то свойство Value возвращает индекс выбранной строки, т. е. в этом случае оно действует как свойство ListIndex. Если свойство BoundColumn принимает значение из диапазона от 1 до количества столбцов в списке, то свойство Value возвращает элемент из выбранной строки, стоящий в столбце, определенном свойством BoundColumn

Приводим наиболее часто используемые методы элемента управления ListBox в таблице 21.

Таблица 21

Метод Описание
Clear Удаляет все элементы из списка
Remove Item Удаляет из списка элемент с указанным номером. Синтаксис: RemoveItem (index), где index — номер удаляемого из списка элемента
AddItem Добавляет элемент в список. Синтаксис: AddItem ([ Item [, varIndex]]) Item — элемент (строковое выражение), добавляемый в список varIndex — номер добавляемого элемента

Заполнить список можно одним из следующих способов.

1 Поэлементно, если список состоит из одной колонки

With ListBox1

.AddItem "Июнь"

.AddItem "Июль"

.AddItem "Август"

End With

2 Массивом, если список состоит из одной колонки

With ListBox1

.List = Array("Июнь", "Июль", "Август")

End With

3 Из диапазона, в который предварительно введены элементы списка. Результат выбора (индекс выбранной строки) выводится в ячейку С1:

With ListBox1

.ColumnCount=2

.RowSource=" A1:B4"

.ContrSource="C1"

.BoundColumn=0

End With

4 Поэлементно, если список состоит из нескольких колонок, например двух:

With ListBox1

.ColumnCount =2

.AddItem “Июнь”

.List(0,1)= “Сессия”

.AddItem “Июль”

.List(1,1)= “Каникулы”

.AddItem “Август”

.List(2,1)= “Каникулы”

End With

5 Массивом если список состоит из нескольких колонок, например двух:

Dim A(2, 1) As String

А(0, 0) = "Июнь”: А(0, 1) = “Сессия”

А(1, 0) = "Июль”: А(1, 1) = “Каникулы”

А(2, 0) = " Август ”: А(2, 1) = “Каникулы”

With ListBox1

.ColumnCount =2

.List=A

End With

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


Перейдем в VBA и, выполнив команду Insert (Вставка) ® UserForm, добавим в проект форму. Расположим на форме следующие элементы управления

Рисунок 16 – Проектируемая пользовательская форма

Таблица 22

Элемент управления Предназначение
CommandButton1 (кнопка) Нажатие на кнопку запускает процедуру обработки события (Private Sub CommandButton1_Click()), которая определяет, какой переключатель выбран. В зависимости от выбранного переключателя производится действие над выбранными в списке числами. Найденное значение выводится в поле TextBox1.
CommandButton2 (кнопка) Нажатие на кнопку запускает процедуру обработки события (Private Sub CommandButton2_Click()), которая закрывает диалоговое окно
TextBox1 (поле) В это поле будет выводиться результат. Поле сделаем недоступным для пользователя, т.е. пользователь не сможет ни ввести, ни скорректировать данные в этом поле
Label1 (надпись) Пояснительная надпись для поля вывода
Frame1 (рамка) Используется для группировки переключателей
OptionButton1(переключатель) OptionButton2(переключатель) Выбор переключателя указывает, какая операция будет выполняться над выбранными числами

Форма создана, осталось только в модуле формы набрать код.

Private Sub CommandButton1_Click() Dim i As Integer Dim n As Integer Dim Сумма As Double Dim Произведение As Double Dim Результат As Double If OptionButton1.Value = True Then Сумма = 0 With ListBox1 For i = 0 To.ListCount - 1 If.Selected(i) = True Then Сумма = Сумма +.List(i) End If Next i End With Результат = Сумма End If If OptionButton2.Value = True Then Произведение = 1 With UserForm1.ListBox1 For i = 0 To.ListCount - 1 If.Selected(i) = True Then Произведение = Произведение *.List(i) End If Next i End With Результат = Произведение End If TextBox1.Text = CStr(Результат) End Sub     При выборе первого переключателя вычисляется сумма выбранных элементов     При выборе второго переключателя вычисляется произведение выбранных элементов Результат выводится в поле TextBox1
Private Sub CommandButton2_Click() UserForm1.Hide End Sub Процедура закрытия диалогового окна
Private Sub UserForm_Initialize()     With ListBox1   .List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .ListIndex = 0 .MultiSelect = fmMultiSelectMulti   End With   With UserForm1.OptionButton1 .Value = True     .Caption = "Сумма" .ControlTipText = "Сумма выбранных элементов" End With OptionButton2.ControlTipText = "Произведение выбранных элементов" CommandButton2.ControlTipText = "Выход из программы" CommandButton1.ControlTipText = "Нахождение результата"   UserForm1.Caption = "Операции над элементами списка" OptionButton2.Caption = "Произведение" Label1.Caption = "Результат" CommandButton1.Caption = "Вычислить" CommandButton2.Caption = "Отмена" Frame1.Caption = "Операция"   TextBox1.Enabled = False   End Sub Процедура инициализации диалогового окна     Заполнение списка   Установка режима выбора     При загрузке формы первоначально будет выбран переключатель «Сумма»   Задание текста всплывающих подсказок у элементов управления   Задание заголовка пользовательской формы Инструкции задают видимые надписи для объектов     Инструкция делает TextBox1 недоступным для пользователя

После конструирования формы и написания кода в модуле формы выберем команду Run и на экране появится форма, представленная на рисунке 17

Рисунок 17 – Спроектированная форма

 

7 Методические рекомендации по оформлению пояснительной записки курсового проекта

 

Структурными элементами пояснительной записки являются:

- титульный лист (рисунок 1);

- задание (выдается к



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: