Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Документ Microsoft Word

.doc
Скачиваний:
77
Добавлен:
20.05.2015
Размер:
27.5 Mб
Скачать

VBA:

1 Введение в систему программирования VBA. Объектная модель Excel, основные объекты Е. Краткая их характеристика. VB и VBA не одно и то же. VB представляет собой язык для разработки программного обеспечения, который используется отдельно от MS Office. VBA входит в состав пакета MS Office. Устанавливая его, вы получаете доступ к VBA. Он необходим для управления данными MS Office.  Язык VBA поддерживает все базовые элементы любого другого языка программ: 1)переменные  2)массивы  3)подпрограммы 4)управляющие структуры  5)возможность создания пользовательских типов данных и т.д. VBA является языком визуального и событийно управляемого программирования. В нем есть возможность создания форм с управляющими элементами, написания процедур, обрабатывающих события. VBA позволяет работать с огромным набором объектов. VBA поддерживается такими приложениями, как Access, PowerPoint, Word и др. В каждом из приложений свой набор объектов. В Access: формы, запросы, отчеты, таблицы; в Word: абзац, сноска; в PowerPoint слайд. Каждая программа поддерживает свою версию VBA.  VBA отличается от других языков программирования тем, что предоставляет возможность непосредственно работать со всеми объектами MS Office. Он имеет графическую инструментальную среду, позволяющую создать экранные формы и управляющие элементы. Объектная модель Excel является основой структуры программы. Без создания иерархической структуры объектов программы, нельзя использовать VBA в Еexcel.  Все элементы Excel – объекты, с которыми приходится работать в программе. Чаще всего используются такие объекты, как рабочие книги Workbooks, рабочие листы Worksheets, диапазоны Range. Объект Worksheets имеет свойство Name, только объект Range не имеет ярко выраженной коллекции. Выступает как коллекция и как объект. Чаще исп. В программном коде, обладает огромными возможностями.

2 Объектная модель Excel: понятие объекта, метода, свойства, события. Объектная модель Excel является основой структуры программы. Без создания иерархической структуры объектов программы, нельзя использовать VBA в Еexcel.  Все элементы Excel – объекты, с которыми приходится работать в программе. Чаще всего используются такие объекты, как рабочие книги Workbooks, рабочие листы Worksheets, диапазоны ячеек Range ckarts.  Свойства определяют внешний вид и состояние объекта. Для определения свойства его нужно указать справа от имени объекта через точку. Range (“A1”).Value – свойство описывает содержимое ячейки А1. Существует 2 вида операций при работе со свойствами:  1)присваивание свойству значения. Объект.Свойство=<значение> Range (“A1”).Value= «Отчет о командировке».  2)полученное свойство присваивается переменной. Переменная = Объект.Свойство Var = Range (“A1”).Value Методы объекта открывают задачи, которые может выполнять объект. Объект.Метод – когда у метода нет параметров. Range (“A1”).CleanContenst – очищает диапазон, но сохраняет форматирование. Если метод имеет аргументы, то они перечисляются через , после названия метода. Событие представляет собой действие, распознаваемое объектом, для которого можно запрограммировать отклик. Суть программирования в VBA заключается в 2 понятиях: событие и отклик на него. Свойства и методы могут быть связаны между собой: выполнение метода приводит к изменению свойства объекта, а изменение некоторого свойства может вызвать наступление события.

3 Редактор VB. Окно проекта. Окно редактирования кода. Окно редактирования формы. Панель элементов. Окно свойств. Окно просмотра объектов. Окна Immediate, Watch.  Редактор VB=Visual Basic Editor. Редактора VBA не бывает! Для запуска этого редактора нужно открыть приложение Excel и выполнить команду Сервис/Макрос/Редактор VB или Alt+F11. Чтобы вернуться в Excel, нужно повторно нажать Alt+F11. В открывшемся окне VBA: строка заголовка, меню, панели инструментов и несколько окон.  По умолчанию в верхнем левом углу находится окно проекта. Вывести его можно командой View/Project Explorer. Это окно содержит список всех открытых проектов и список всех их компонентов. В проекте всегда располагаются 3 модуля (на каждом листе) и модуль книги. Все модули делятся на:  1) стандартные – добавляются к проекту Insert/Module. Они содержат макросы, функции и процедуры.  2) модули объектов – модули, связанные с рабочими книгами, рабочими листами и формами. Проект VBA состоит из объектов, имеющих иерархическую структуру, и включает: объекты Excel, формы, стандартные модули и модули классов.  Окно редактирования кода. В окне проекта выделяете объект, для которого будет введен программный код. Затем выполнить команду View/Code. Откроется окно, в которое нужно ввести программный код.  Окно редактирования формы. Для вывода формы: Insert/User Form. На экране появится форма.  Окно свойств. Для открытия: View/Properties Window. В левой части окна перечислены свойства объекта, в правой – значения свойств, которые можно изменять.  Окно просмотра объектов. View/Object Browser или F2. В верхнем левом углу открывшегося окна – список библиотек объектной модели Excel. Оно дает справку обо всех объектах Excel, их свойствах и методах. Панель элементов (View/Debug) в стандартном варианте включает различные классы управляющих элементов: CommandButton (командная кнопка), TextBox, Label и др. Существует возможность дополнить панель с помощью команды Tools/Additional Controls.  Окно Immediate – один из инструментов отладки. Предназначено для непосредственного ввода команд. Окно Watch – порядок выполнения программы и отслеживание ошибок.

4 Создание простой программы на примере приложения «Информация о продажах по регионам». Задача: создать программу, которая будет отслеживать продажи в каждом регионе. Для каждого региона отразить сообщение с количеством месяцев, когда продажи превышали заданный объем, введенный пользователем. Порядок выполнения: открыть Excel и на первом листе создать список следующего вида:  А В С … G месяц Регион1 Регион2 Регион3 Янв2005 . Дек2006 Отформатировать столбцы(1 – дата, остальные – формат денежный). Заполнить список. Затем выделить диапазон ячеек B2:G25 и присвоить ему имя SalesRange. Перейти в редактор VBA: Alt+F11 или Сервис/Макрос/Редактор VB. Если окна нет, выполнить команду View/Project Explorer. Далее выполнить Insert/Module, откроется окно редактора. Ввести следующий программный код: Sub CountHighSales() Dim i As Integer, j As Integer, NamberHigh As Integer, Sales As Currency Sales = InputBox("Введите объём продаж") For j = 1 To 6 NamberHigh = 0 For i = 1 To 24 If Range("Продажи регионов").Cells(i, j) >= Sales Then NumberHigh = NamberHigh+1 Next i MsgBox "_в регионе_ "_ &_j_&_ " объем продаж превышал_"&_ “_в_" _&_NumberHigh_&_”_из 24 месяцев_ Next j End Sub Запустить программу на выполнение: F5 или Run/Run Sub. На экране появится окно InputBox.  Запуск программы с помощью кнопки, расположенной на рабочем листе. Находясь на рабочем листе, выполнить команду Вид/Панели инструментов/Формы. В появившемся окне выбрать элемент Кнопка и нарисовать на рабочий лист. Откроется окно, в котором предлагается создать макрос, выбрать название CountHighSales и закрыть. Дать свое название кнопке. Для запуска программы щелкнуть на этой кнопке. Создать программу можно и другим способом, начиная с размещения кнопки. Появляется окно «Назначить макрос объекту». Нажать на кнопку Создать. Запустится редактор VB и откроется окно редактирования кода макроса. Ввести программный код.

5 Стандартные элементы управления VB: понятия, свойства, методы, события общие для этих элементов. Краткая характеристика элементов управления. Элементы управления - это объекты, которые можно разместить на форме. Как и все объекты, они имеют свойства, методы и события. Свойства определяют внешний вид и поведение. Изменять свойства можно как во время проектирования (через окно свойств), так и в программном коде.  Общие свойства: name – имя, которое используется для ссылок на элементы управления в программном коде. Left, Top – левый верхний угол элемента. Width, height – ширина, высота элемента. Visible – будет ли виден на экране.  Методы: Move – перемещение элемента на форме. Drag – перетаскивание. События: Set Focus, click, dblclick. Элемент управления Командная кнопка (CommandButton).  Свойства: Caption - текст на кнопке Picture- определяет рисунок на кнопке. Picture Position - определяет позицию рисунка на кнопке. Событие: Click - возникает при нажатии пользователем кнопки Мышью, DblClick- двойной щелчок, когда возникает нажатие. Элемент управления счетчик SpinButton - позволяет уменьшать или увеличивать числовое значение в результате щелчка стрелки. Элемент управления полоса прокрутки ScrollBar. Позволяет выбрать значение из заданного диапазона с помощью мыли. Щелчком мыши на концах полосы прокрутки или на самой полосе путем перетаскивания бегунка. Важнейшие свойства SpinButton и  ScrollBar: max- максимальное значение, выдаваемое полосой прокрутки или счетчиком (всегда положителен) min- минимальное значение выдаваемое этими элементами. CmalChange- отрицательное или положительное целое число равное шагу изменения значения этих элементов в тот момент, когдыапроизводится щелчок. событие Change происходит при смене значений этих элементов. С помощью свойства Value в некоторой переменной можно запомнить текущее значение этого счетчика. Элемент управления рамка (Frame) Она является контейнером и служит для объединения других элементов в группу. После чего помещенными в нее объектами можно управлять как единым целым (либо переключатели, либо флажки обычно в нее помещаются) Свойства: Caption- задает текст, который выводится в левом верхнем углу рамки; Appearance- 2 значения: 0- Flat (простая рамка), 1- 3D объемная. Элемент управления текстовое поле. Он обеспечивает возможность ввода текста пользователем во время работы приложения или отображение информации, задаваемой свойством Text. Свойства: text- текстовое поле, характеризуется еще свойствами, позволяющими использовать этот элемент при создании полей, предназначенных для ввода пароля. PasswordChar задает символ отображаемый в поле вместо возможных символов. Maxlength- максимальное количество символов, вводимых в поле. Элемент управления Метка (надпись) он используется в форме для размещения статичного текста. Свойства: Caption- текст который размещается на этом элементе, размер не более 1024 байт. Font- внешний вид шрифта.

6 Типы подпрограмм и их определения: определение и виды процедур. Примеры процедур разных видов. Логические фрагменты кода, которые выполняют определенную задачу, называются подпрограммами. В VBA подпрограммами называют макросы, процедуры и даже функции. Можно создать основную процедуру и вызвать из нее остальные процедуры. В этом случае набор совместно работающих процедур наз. приложением. Существуют следующие виды процедур: 1)обработки событий,

2) макросов, 3) пользователей. Процедура обработки события всегда связана с каким-либо объектом. Private Sub ИмяОбъекта_Событие() <тело процедуры обрабатываемого события> End Sub Пример: Private Sub CommandButton_Click() Ипотека.Show End Sub Процедура обработки макроса имеет следующий синтаксис: Sub ИмяМакроса () <Тело макроса> End Sub Для вызова макроса из главной процедуры используется оператор Call ИмяМакроса. При условии, что все процедуры, в том числе и главная, расположены в одном модуле. Пример: Sub MainProcedure() Call GetProblemSize Call Initialize Exit Sub End Sub Sub GetProblemSize() Ncities = Range("DistMatrix").Rows.Count ReDim Visited(Ncities) ReDim Route(Ncities + 1) End Sub Sub Initialize() Dim I As Integer Route(1) = 1 Route(Ncities + 1) = 1 Visited(1) = True For I = 2 To Ncities Visited(I) = False Next TotDist = 0 End Sub Синтаксис процедуры пользователя: [Private/Public] Sub ИмяПроцедуры (Параметры) <Тело процедуры> End Sub Элементы списка параметров имеют следующий вид: ИмяЭлемента As ТипДанных.

7 Типы подпрограмм и их определения: определение и создание функции пользователя на примере создания функции пользователя «Доход». Логические фрагменты кода, которые выполняют определенную задачу, называются подпрограммами. В VBA подпрограммами называют макросы, процедуры и даже функции. Функция – это подпрограмма, которая действует в пределах своего блока и возвращает только одно значение.  Функции:  1) Функции пользователя  2) Функции модулей классов.  Функция имеет следующий синтаксис: [Private/Public] Function Имя функции (список параметров) As ТипДанных <тело функции> End Function Тип данных для функции предназначен для определения типа и возвращения функцией зн-я Чтобы создать функцию пользователя, надо: 1. если нет модуля Insert/Module 2. Insert/Procedure 3. в открывшемся окне выбрать переключатель “Function”, в поле Name ввести имя функции («Доход») 4. в этом же окне установить переключатель «общие», чтобы был тип – Public 5. Ок. Откроется окно редактора. Ввести параметры функции и код. Option explicit Option Base 1 Function Doxod (procent as double, platezh as variant, god as variant) as double Dim i, j, n as integer, s as double n=platezh.rows.count s=0 for i=1 to n s=s+platezh(i)/(1+procent)^((god(i)-god(1))/365) next i doxod=s end fuction Не закрывая окна View/Object Browser. Откроется окно просмотра объектов. В левом верхнем углу выбрать VBAProject и в окне Классы отобрать элементы текущего проекта. Выбрать модуль, в котором ваша функция. Затем в окне Компоненты отобрать все элементы, в том числе и функцию Доход. Щелкнуть правой кнопкой мыши на Доход и выбрать значение Свойства. Откроется окно «Параметры компонента», в нем ввести описание (назначение) функции. Закрыть окно и после этого ваша функция попадет в библиотеку стандартных функций Excel.

8 Объявление переменных. Объявление переменных в модулях и процедурах. Область действия переменных и процедур. Пример передачи в процедуру аргументов.  Рекомендуется заранее объявлять все переменные, которые будут использоваться в процедурах. Оператор Dim позволяет объявить все переменные и массивы.  Dim I As Integer, j As Integer, k As Integer Чтобы не забывать объявить переменные Tools/Options/ вкл Editor, где установить флажок Require Variable Declaration.  Option Explicit – общая область. Этот оператор будет контролировать описание переменных. Существует очень важный тип переменных, которого в VB не было. Это переменные объекта. Dim A As Object. Частный случай: Dim A As Range. Например, мы хотим обратиться к диапазону ячеек в течение процедуры. D Dim SRange As Range Set SRange=ActiveWorkBook.WorkSheets(“Продажи”). Range(“SalesRange”) SRange.Font.Size=14 Ключевое слово Set используется только при присвоении значения объектной переменной. Для переменных определяется область видимости. Переменные могут быть: глобальные (для объявления используется Public) и локальные (используется оператор Private, Dim). Переменная типа Public – переменная уровня модуля, Dim – уровня процедуры. Переменная, определяемая в модуле оператором Dim, может быть переопределена этим же оператором внутри процедуры, принадлежащей этому модулю. Передача в процедуру аргументов. Можно передавать аргументы (имя, фамилию) из процедуры Main в процедуру DisplayName. Тогда процедура Main называется главной, а DisplayName – вызываемой. В этом случае переменная FirstName и LastName не объявляются переменными уровня модуля, а объявляются как локальные переменные процедуры Main. Sub Main () Dim FirstName As String, LastName As String, I As Integer For i=1 to 50 FirstName=Range (“Names”).cells(i, 1) LastName= Range (“Names”).cells(i, 2) Call DisplayName End Sub Sub DisplayName Dim FulllName As String FulllName= FirstName+ LastName MsgBox “Полное имя сотрудника”_&_ FulllName End Sub

9 Встроенное диалоговое окно сообщения. Пример функции и оператора MsgBox. Существует несколько типов диалоговых окон, которые необходимы для поддержания в программе интерактивного режима работы конечного пользователя (вывод сообщений пользователю, прием и интерпритация указаний, введенных пользователем и т.д.). Окно сообщений обозначается MessageBox (MsgBox) и окно ввода InputBox. Их можно рассматривать как фукнции и как оператор. Окно MsgBox- окно сообщения. Оно не требует проектирования и вызывается из программы командой MsgBoх и создается с помощью функции MsgBox(). Она имеет следующий синтаксис: MsgBox (Promt [, buttons] [,title,helpFile], [context]), где promt - обязательный параметр, эта строка в окне сообщения. Ее максимальная длина 1024 символа. Параметр Buttons не обязателен, его значение - целое число, равное сумме значений, определяющих наличие кнопок в окне сообщения. По умолчанию равно 0. Параметр title- заголовок окна сообщений. Help file – необязательный, ссылка на файл в справочной системе и на конкретное место в этом файле. пример В зависимости от выбора кнопок окна MsgBox диалоговое окно возвращает одно из значений. MsgBox "в регионе " & i & " объем продаж превышал " & s & " в " & ks & " месяцах".

10 Встроенное диалоговое окно ввода. Пример функции InputBox. Существует несколько типов диалоговых окон, которые необходимы для поддержания в программе интерактивного режима работы конечного пользователя (вывод сообщений пользователю, прием и интерпритация указаний, введенных пользователем и т.д.). Окно ввода информации InputBox требуется только как функция. Часто необходимо осуществить не только набор действия, но и ввести определенную информацию, которая будет восприниматься программой. Для этого используется функция InputBox. Синтаксис: InputBox (ptomt, [title], [default], [xpos,ypos], [helpfile], context]) Promt – обязательная строка, которая выдается в окне сообщения, 1024 символа Title – необязательный, заголовок окна сообщения Default - строка в текстовом поле, если его нет, то строка пуста Xpos,Ypos- позиция левого верхнего угла ввода на экран Helpfile- ссылка на файл справочной информации. В этом окне всегда стоят по умолчанию две кнопки: ОК и Саncel. Пример: InputBox("Введите цену для сравнения", "окно для ввода критерия") Окно для ввода критерия Введите цену для сравнения.

11 Основные свойства и методы объектов Application, Workbook, Worksheet. Application является средой, в которой выполняется приложение VBA. У Application 120 свойств и 40 методов. На рабочем листе Excel из ячеек можно вызывать свыше 400 встроенных функций.

Основные свойства

Caption.

Application.caption = “Ипотека”

DisplayAlerts (true или false) – управляет выводом на экран встроенных предупреждений Excel

WindowState (xlMaximized, xlMinimized, xlNormal)

Основные методы.

Calculate – вызывает пересчет всех формул на всех рабочих листах, книгах

Quit – закрытие приложения

Run – запускает программу в VBA

Wait – приостанавливает выполнение приложения VBA.

12Правила пользования объектов exel в програмном коде. Примеры прогр-х кодов с исп-ем этих св-в и методов.

13 Основные свойства и методы объекта Range. Примеры программных кодов. Объект Range одновременно является и объектом и коллекцией. Рассмотрим наиболее важные свойства и методы объекта Range.

Свойства:

1. Свойство Address – возвращает адрес диапазона в виде строки. «В2:Р4» А=Range(“Sales”).Address “В2:Р4” 2. Свойство Cells – возвращает ссылку на объект Range и обычно используется к определенной ячейке диапазона. Указывает на конкретную ячейку внутри диапазона. Range (“A1:A10”).Cells(3) ‘A3 Range (“A1:D10”).Cells(3, 4) ‘D3 3. Свойство Offset – возвращает ссылку относительно диапазона (в этом случае представляется единственной ячейкой). Range (“A1”). Offset(3, 4) – E4 4. Font – выступает как в роли объекта, так и в роли свойства. В данный момент выступает как свойство, а как объект имеет свойства: Size, Name, Bold, Italic. 5. Horizontal Alignment – горизонтальное выравнивание ячеек в диапазоне. Свойства: xlCenter – по центру; xlLigh – по правому краю; xlLeft – по левому краю. 6. Interior – возвращает ссылку на заливку в ячейке. Range (“A1”).ColorInterior=3 7. Name – возвращает имя диапазона. Это свойство позволяет задать имя диапазона в программном коде. Range (“A1:D10”).Name=”Sales” 8. Value – возвращает значение в ячейку диапазона(используется относительно только одной ячейки диапазона). Range (“A5”). Value=«Отчет о командировке» Методы диапазона: Clear – удаляет содержимое и форматирование диапазона ячеек. ClearContents – удаляет только содержимое. Copy – копирует содержимое одного диапазона в другой. В этом случае он используется с единственным аргументом CopyDestination. C его помощью указывается, куда вы копируете. Range(“B4:G25”). CopyDestination:=Range(“E4:F25”). Копируются формулы и содержимое. В случае, когда надо скопировать только числовые значения, а не формулы, используется метод PastSpecial. Сначала вы копируете в буфер обмена, затем переносите в диапазон. 1)Range(“B4:G25”).Copy 2)Range(“E4:F25”).PastSpecial Paste:=xlPasteValue Select – выделение диапазона.  Sort – Применяется для сортировки диапазона ячеек. Key1 – по какому столбцу будет сортировка в диапазоне. Order1 – порядок сортировки(по возрастанию, по убыванию). Header – «да», «нет» (Если «да», то заголовок в сортировке участия не принимает, если «нет», участвует). Range(“A1:F25”).Sort Key1:=Range(“C2”) Order1:=xlAscending Header:=xlYes

14 Способы указания диапазонов в VBA. Примеры программных кодов с указанием диапазонов. В процессе составления программного кода нужно уметь правильно использовать ссылку на диапазон. Рассмотрим следующие способы: 1. Использование адреса Range(“A1:B4”). 2. Применение имени диапазона Range(“Sales”). 3. Назначение переменной с именем диапазона NSales=Range(“Информация о продажах”).Name. 4.Использование свойства Cells Range(“A1:A10”).Cells(3) – A3 Range(“A1:D10”).Cells(3, 4) – D3 5.Настройка свойства Offset. Свойство имеет 2 аргумента. Когда указывается Offset для диапазона, то в роли диапазона выступает адрес только одной ячейки. Range(“A5”).Offset(3, 4) – E8 6. Указание левого верхнего и нижнего правого угла диапазона. Range(Range(“C1”), Range(“D10”)). 7.Применение свойства End. Для выделения диапазона относительно которого известен только левый верхний угол, можно воспользоваться свойством End. Оно указывает на нижний правый угол диапазона. With Range(“A1”) Range(.Cells(1, 1),.End(xlRight).End(xlDown)).Select End With Пример: With Range(“A1”) Range(.Offset(1, 1),.End(xlRight)).Name=”Sales” Range(.Offset(2, 1),.End(xlDown)).Name=”Region” Range(.Offset(2, 2),.End(xlRight)).End(xlDown).Name=”NameSales” End With

15 Работа с массивами. Оператор Option Base. Динамическая модель индексации и оператор ReDim. Примеры использования этих операторов. Функция управления массивами Array. Пример использования. По аналогии с работой с информацией в списках Excel, массивы тоже представляют собой списки, в которых каждый элемент имеет свой индекс. Элементы массива воспринимаются программой в виде обычных переменных, но представленных в виде индексированного списка. В VBA массивы используются для обработки списков, поскольку массивами управлять в программном режиме гораздо проще, чем списками. Правила работы с массивами. Option Base – определяет нижнюю границу изменения индекса в массиве. Например, Option Base1 – нижняя граница – 1. Эту строку в программном коде пишут в общей области модуля следом за оператором Option Explicit. В большинстве экономических задач при написании программного кода невозможно заранее узнать количество элементов. Для этого существует возможность вначале программного кода не указывать при объявлении массива точного размера. (Dim ProdCode () As Integer, NProducts As  Integer.) Затем в теле процедуры, когда уже известно необходимое количество элементов массива, можно воспользоваться оператором ReDim, который выделяет для массива строго необходимый объем памяти. With ActiveWorkBook.WorkShits(«Продажи»).Range(“A3”)  NProducts=Range(.Offset(1,0),.End(xlDown)). ReDim ProdCode(NProducts),UnitPrise(NProducts) For i=1 to NProducts ProdCode(i)=.Offset(i,0) UnitPrise(i)=.Offset(i,1) Next i End With Оператор ReDim относительно конкретного массива может использоваться в программном коде столько раз, сколько необходимо. Единственной проблемой является то, что при таком использовании массива, все, что было в массиве, теряется. Чтобы этого избежать, нужно в записи оператора записать ключевое слово Preserve. (ReDim Preserve Sum(NS)). Обычно продолжением данного программного кода является размещение данных, взятых из ст. А и В списка в массивах ProdCode и UnitPrice. Для переноса данных из столбцов списка в массив, нужно организовать цикл. Если нужно перенести данные в столбцы списка, размещенного на рабочем листе: (NFound – количество найденных записей) For i=1 to NFound  With Range(“E3”) .Offset(j, 0)=ProdCodeFound(j) ‘код товара .Offset(j, 1)=Quontity(j) 'количество товаров .Offset(j, 2)=DollarsTotal(j) ‘стоимость продукции End With End Sub  Рассмотрим конструкцию Array. Рассмотрим работу этой функции на примере. Данная функция используется для заполнения массива. Ее применении е рассмотрим в программе «Ипотечный кредит». Option Base1 Sub Array Function () Dim Days As Variant Days=Array(«Пн», «Вт», «Ср», «Чт», «Пт», «Сб», «Вс») MsgBox “Первый день недели: ” & Days(1) End Sub Ключевое слово Array, после которого указывается список в скоках, используется для заполнения значениями переменной Days. Эта переменная – обычный массив, но в операторе Dim она указывается как обычная переменная типа Variant, а VBA самостоятельно с использованием функции Array определяет эту переменную как массив.

16 Модульная структура приложения на примере программного кода задачи, определяющий оптимальный маршрут перемещения дистрибьютора фирмы. Пример использования переменных уровня модуля. При создании больших процедур возникают такие сложности, как сложность изучения, отладки, повторного использования. Намного предпочтительнее создавать модульные приложения, которые представляют собой набор относительно небольших процедур, каждая из которых выполняет небольшую подзадачу. Создается главная процедура MainProcedure, а из нее с помощью оператора Call вызываются другие процедуры. Sub MainProcedure() Call Procedure1 Call Procedure2 End Sub В качестве примера рассмотрим программный код задачи, определяющий оптимальный маршрут перемещения. Dim Ncities As Integer, Visited() As Boolean, Route() As Integer, TotDist As Integer Sub GenDistances() Dim I As Integer, j As Integer, Ncities As Integer Randomize With Range("DistMatrix") Ncities = .Rows.Count For I = 1 To Ncities - 1 For j = I + 1 To Ncities .Cells(I, j) = Int(Rnd * 100) + 1 Next j Next I For I = 2 To Ncities For j = 1 To I - 1 .Cells(I, j) = .Cells(j, I) Next j Next I End With End Sub Sub MainProcedure() Call GetProblemSize Call Initialize Call PerformHeuristic Call DisplayResults Exit Sub End Sub Sub GetProblemSize() Ncities = Range("DistMatrix").Rows.Count ReDim Visited(Ncities) ReDim Route(Ncities + 1) End Sub Sub Initialize() Dim I As Integer Route(1) = 1 Route(Ncities + 1) = 1 Visited(1) = True For I = 2 To Ncities Visited(I) = False Next TotDist = 0 End Sub Sub PerformHeuristic() Dim Step As Integer, I As Integer, NowAt As Integer, NextAt As Integer, MinDist As Integer NowAt = 1 For Step = 2 To Ncities MinDist = 10000 For I = 2 To Ncities If I <> NowAt And Visited(I) = False Then If Range("DistMatrix").Cells(NowAt, I) < MinDist Then NextAt = I MinDist = Range("DistMatrix").Cells(NowAt, NextAt) End If End If Next I Route(Step) = NextAt Visited(NextAt) = True TotDist = TotDist + MinDist NowAt = NextAt Next Step TotDist = TotDist + Range("DistMatrix"). Cells(NowAt, 1) End Sub Sub DisplayResults() Dim Step As Integer For Step = 1 To Ncities + 1 Range("B19").Offset(Step, 0) = Route(Step) Next Step MsgBox "Общее растояние:" & TotDist, vbInformation, "общее расстояние" End Sub Использование переменных уровня модуля. Рассмотрим программу, которая иллюстрирует использование переменных уровня модуля. На рабочем листе Excel создадим список и дадим ему имя – Name.  А В С 1 Фамилия Имя, Отчество 2 … … … … … Dim FirstName As String, LastName As String Sub Main () Dim I As Integer For i=1 to 50 FirstName=Range(“Name”).Cells(i, 1) LastName=Range(“Name”).Cells(i, 2) Call DisplayName Next i End Sub Sub DisplayName () Dim FullName As String FullName=FirstName+LastName MsgBox “Полное имя сотрудника: ” & FullName End Sub

17 Разработка пользовательского интерфейса: форма как пользовательское окно диалога. Разработка формы на примере формы «Сведения о товарах». Отображение пользовательской формы.

Пользовательское окно диалога – это форма, содержащая элементы управления, включая командные кнопки, переключатели, текстовые поля и другие. Оно обеспечивает пользователю ввод информации, требуемой для работы приложения. Рассмотрим типичный пример формы, которая часто встречается в приложениях. В форме присутствуют 3 обработчика событий: 1. UserForm_Initialize  2. OkButton_Click 3. CanselButton_Click 1 разработчик определяет внешний вид формы при открытии, а остальные обеспечивают реакцию на щелчок по кн. «Ок» и «Отмена». Код обработчика UserForm_Initialize. В этом приложении при открытии формы нужно добиться следующего поведения: переключатели Москва и Поезд должны быть активны, флажок Скоропортящийся установлен, а Хрупкий – сброшен, список CostumerList должен быть заполнен исходными данными. При работе со списком, его можно заполнить разными способами. Например, заполнить его данными, расположенными в ячейках рабочего листа. Для этого зоздать диапазон на рабочем листе, дать ему имя(Name - Costumer). При заполнении списка воспользоваться AddItem. Перед тем, как писать код для события Initialize, рассмотрим свойства элементов управления: пользовательская форма – Ипотека; текстовое поле – ProductBox; переключатели – MoscowOption, VoronegOption, TrainOption, TruckOption; флажки – PerishBox, FragilBox; список – CostumersList. Private Sub UserForm_Initialize() Dim cell As Variant ProductBox = " " MoscowOptions.Value = True TrainOptions.Value = True PerishBox = True FragilBox = False For Each cell In Range("Customers") CustomersList.AddItem cell.Value Next cell End Sub Существует другой способ заполнения списка. Свойство RowSource, откроется окно, из которого поочереди надо внести элементы. Отображение формы. В отличии от VB в VBA форма в момент запуска приложения автоматически на экране не появляется. Для вызова формы на рабочий лист нужно применить метод Show. Для этого на рабочем листе создать кнопку, которая выводит форму на рабочий лист, и написать код: Sub Кнопка1_Щелкнуть () Ипотека. Show End Sub