ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.05.2021

Просмотров: 1338

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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:=xlPasteValueSelect – выделение диапазонаSort – Применяется для сортировки диапазона ячеек. Key1 – по какому столбцу будет сортировка в диапазоне. Order1 – порядок сортировки(по возрастанию, по убыванию). Header – «да», «нет» (Если «да», то заголовок в сортировке участия не принимает, если «нет», участвует). Range(“A1:F25”).SortKey1:=Range(“C2”)Order1:=xlAscendingHeader:=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)).SelectEnd 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 NProductsProdCode(i)=.Offset(i,0)UnitPrise(i)=.Offset(i,1)Next iEnd 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 IntegerSub GenDistances()Dim I As Integer, j As Integer, Ncities As IntegerRandomizeWith Range("DistMatrix")Ncities = .Rows.CountFor I = 1 To Ncities - 1For j = I + 1 To Ncities.Cells(I, j) = Int(Rnd * 100) + 1Next jNext IFor I = 2 To NcitiesFor j = 1 To I - 1.Cells(I, j) = .Cells(j, I)Next jNext IEnd WithEnd SubSub MainProcedure()Call GetProblemSizeCall InitializeCall PerformHeuristicCall DisplayResultsExit SubEnd SubSub GetProblemSize()Ncities = Range("DistMatrix").Rows.CountReDim Visited(Ncities)ReDim Route(Ncities + 1)End SubSub Initialize()Dim I As IntegerRoute(1) = 1Route(Ncities + 1) = 1Visited(1) = TrueFor I = 2 To NcitiesVisited(I) = FalseNextTotDist = 0End SubSub PerformHeuristic()Dim Step As Integer, I As Integer, NowAt As Integer, NextAt As Integer, MinDist As IntegerNowAt = 1For Step = 2 To NcitiesMinDist = 10000For I = 2 To NcitiesIf I <> NowAt And Visited(I) = False ThenIf Range("DistMatrix").Cells(NowAt, I) < MinDist ThenNextAt = IMinDist = Range("DistMatrix").Cells(NowAt, NextAt)End IfEnd IfNext IRoute(Step) = NextAtVisited(NextAt) = TrueTotDist = TotDist + MinDistNowAt = NextAtNext StepTotDist = TotDist + Range("DistMatrix"). Cells(NowAt, 1)End SubSub DisplayResults()Dim Step As IntegerFor Step = 1 To Ncities + 1Range("B19").Offset(Step, 0) = Route(Step)Next StepMsgBox "Общее растояние:" & TotDist, vbInformation, "общее расстояние"End SubИспользование переменных уровня модуля. Рассмотрим программу, которая иллюстрирует использование переменных уровня модуля.
На рабочем листе Excel создадим список и дадим ему имя – Name. 
А В С1 Фамилия Имя, Отчество2 … …
… … …
Dim FirstName As String, LastName As StringSub Main ()Dim I As IntegerFor i=1 to 50FirstName=Range(“Name”).Cells(i, 1)LastName=Range(“Name”).Cells(i, 2)Call DisplayNameNext iEnd SubSub DisplayName ()Dim FullName As StringFullName=FirstName+LastNameMsgBox “Полное имя сотрудника: ” & FullNameEnd 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 VariantProductBox = " "MoscowOptions.Value = TrueTrainOptions.Value = TruePerishBox = TrueFragilBox = FalseFor Each cell In Range("Customers")CustomersList.AddItem cell.ValueNext cellEnd SubСуществует другой способ заполнения списка. Свойство RowSource, откроется окно, из которого поочереди надо внести элементы.
Отображение формы. В отличии от VB в VBA форма в момент запуска приложения автоматически на экране не появляется. Для вызова формы на рабочий лист нужно применить метод Show. Для этого на рабочем листе создать кнопку, которая выводит форму на рабочий лист, и написать код:
Sub Кнопка1_Щелкнуть ()
Ипотека. Show
End Sub


18 Обработка событий формы: создание кода обработки событий UserForm_Initialize, CanselButton_Click на примере обработки этих событий для пользовательской формы «Сведения о товарах». 
Событие представляет собой действие, распознаваемое объектом, для которого можно запрограммировать отклик.
Рассмотрим форму «Сведения о товарах». В ней присутствуют 3 обработчика событий:
1. UserForm_Initialize 
2. OkButton_Click
3. CanselButton_Click
1 разработчик определяет внешний вид формы при открытии, а остальные обеспечивают реакцию на щелчок по кн. «Ок» и «Отмена».
Код обработчика UserForm_Initialize.
В этом приложении при открытии формы нужно добиться следующего поведения: переключатели Москва и Поезд должны быть активны, флажок Скоропортящийся установлен, а Хрупкий – сброшен, список CostumersList должен быть заполнен исходными данными. Для заполнения списка на рабочем листе создадим диапазон и дадим ему имя Costumers. В программном коде воспользуемся методом AddItem. Перед тем, как писать код для события Initialize, рассмотрим некоторые свойства элементов управления: пользовательская форма – Ипотека; текстовое поле – ProductBox; переключатели – MoscowOption, VoronegOption, TrainOption, TruckOption; флажки – PerishBox, FragilBox; список – CostumersList.
Private Sub UserForm_Initialize()Dim cell As VariantProductBox = " "MoscowOptions.Value = TrueTrainOptions.Value = TruePerishBox = TrueFragilBox = FalseFor Each cell In Range("Customers")CustomersList.AddItem cell.ValueNext cellEnd SubДля кнопки «отмена» запишем следующий код:Private Sub CanselButton_Click ()Unload.MeEndEnd SubUnload.Me – этот метод выгружает форму из оперативной памяти и убирает ее с экрана.

19 Событие представляет собой действие, распознаваемое объектом, для которого можно запрограммировать отклик.
Рассмотрим форму «Сведения о товарах». В ней присутствуют 3 обработчика событий:
1. UserForm_Initialize 
2. OkButton_Click
3. CanselButton_Click
1 разработчик определяет внешний вид формы при открытии, а остальные обеспечивают реакцию на щелчок по кн. «Ок» и «Отмена».
Код процедуры OkButton_Click. Обычно данный обработчик событий используется для сохранения данный, введенных в элементы управления. Как правило, введенная информация в элементы управления заносится в общедоступные переменные, которые определены в модуле, далее эти переменные используются в программных кодах модуля. ProductСode – код, введенный в поле; Region – пункт отправления; Shipping – транспорт; IsPerish – скоропортящийся; IsFragil – хрупкий; Customers – смисок.
Dim ProductCode As Integer, Region As String, Shipping As String, IsPerish As Boolean, IsFragile As Boolean, Customers As StringPrivate Sub OkButton_Click()With ProductBoxIf .Value = " " or not IsNewmeric(.Value) ThenMsgBox "Код товара не введен или не числовой".SetFocusExit SubEnd IfProductCode=ProductBox. ValueIf ProductCode < 1 Or ProductCode > 1000 ThenMsgBox "Код товара должен быть в диапазоне от 1 до 1000".SetFocus ‘ставит курсор в полеExit Sub ‘выход из процедурыEnd IfIf TrainOption.Value = True ThenShipping = "Poezd"ElseShipping = "Gruzovik"End IfIf MoscowOption.Value = True ThenRegion = "Moscow"ElseRegion = "Voroneg"End IfIsPerish = PerishBox.ValueIsFragile = FragilBox.ValueWith CostomerList ‘работа со спискомIf .ListIndex <> -1 ThenCustomers = CustomersList.ValueElseMsgBox "Элемент в списке не выбран".SetFocusExit SubEnd IfEnd WithEnd Sub


20 Управляющие структуры: структура принятия решения If-Then-Else. Пример пользования этой структурой в програмном коде, выводящем окна сообщения о стоимости товара, если он найден в списке или об его отсутствии в зависимости от значения логической переменной Found.
Условный оператор If-Then-Else изменяет порядок выполнения программы в зависимости от результатов проверки некоторого условия.
Sub LookUpPrice()Dim ProdCode() As String, UnitPrice() As Currency, ReguestedPrice As Currency, Nproducts As Integer, i As Integer, Found As Boolean, ReguestedCode As StringWith ActiveWorkbook.Worksheets("Коды товаров”).Range("A3")Nproducts = Range(.Offset(1, 0), .End(xlDown)).Rows.CountReDim ProdCode(Nproducts)ReDim UnitPrice(Nproducts)For i = 1 To NproductsProdCode(i) = .Offset(i, 0)UnitPrice(i) = .Offset(i, 1)Next iEnd WithReguestedCode = InputBox("Введите код товара (большая латинская буква и 4 цифры)")Found = FalseFor i = 1 To NproductsIf ProdCode(i) = ReguestedCode ThenFound = TrueReguestedPrice = UnitPrice(i)Exit ForEnd IfNext iIf Found ThenMsgBox "Товар с кодом" & ReguestedCode & " стоит " & Format(ReguestedPrice, "0,00р."), vbInformation, "Товар не найден"ElseMsgBox "Товара с кодом " & ReguestedCode & " нет в списке ", vbInformation, "Товар не найден” End IfEnd Sub

21 Управляющие структуры: Дополнительное условие ElseIf. Пример использования этого условия в коде процедуры для ввода пороля.
Средствами структуры принятия решенья If-Then-Else можно организовать выполнение операторов в зависимости от соблюдения определенного условия. Рассмотрим другой вариант ее использования, на этот раз с ключевым словом ElseIf. Программа Proc31 отображает запрос на ввод пароля. Если пароль введен правильно, программа предоставляет пользователю определенные возможности работы с рабочей книгой и сообщает ему об этом.

Sub Proc31_IfThenElseIf ( )Dim Password As String, ws As WorkSheetPassword = GetPasswordIf Password = “level1” ThenFor Each ws In ActiveWorkbook.WorkSheetsws.Visible = Truews. Unprotect
Next
MsgBox “Вы получили доступ ко всем листам книги.”
ElseIf Password = “level2” ThenActiveWorkbook.Worksneets (1). Visible = TrueActiveWorkbook.Worksneets (1). Unprotect
MsgBox “Вы получили доступ только к первому листу рабочей книги.”
ElseIf Password = “level3” Then
ActiveWorkbook.Worksneets (1). Visible = True
MsgBox “Вы получили доступ только для чтения содержимого первого листа рабочей книги.”
Else
MsgBox “Пароль не корректен. Повторите ввод пароля.”
End If
End Sub

Function GetPassword ( )
GetPassword = Lcase (InputBox(“Enter Password:”.” Password”))
End Function

В Proc31 ключевое слово Elself с последующим условием используется дважды. Новое условие вносит в порядок выполнения команд дополнительные изменения, если проверка первого условия закончилась неуда-чей. В Proc31 первое условие указано сразу за ключевым словом If. В нем проверяется равенство переменной Password строке ”levell”. Если переменная не равна строке, VBA переходит к первому ключевому слову Elself, где проверяет следующее условие – равенство переменной Password строке “level2”. Начиная с этого момента, программа использует только новое условие, “забывая” о старом. Если равенства опять нет, управление переходит к следующему ключевому слову Elself и т. д. 
В строке 3 процедуры Proc31 вызывается функция GetPassword, в которой использованы новые элементы. Обратимся к ней еще раз.Function GetPassword ( )GetPassword = Lcase (InputBox(“Enter Password:”.” Password”))
End Function

Здесь во второй строке заданы обращения к двум встроенным функциям VBA-Lcase и InputBox. Первая преобразует все буквы переданной в нее строки в строчные. Вторая выводит на экран диалоговое окно с запросом на ввод данных пользователем. У этой функции есть несколько необязательных аргументов, из которых нас интересуют только первые два. Один из них – строка, отображаемая в окне над полем для ввода. Второй содержит строку заголовка диалогового окна. При вызове функции InputBox на экране появляется диалоговое окно с заданными заголовком и текстом приглашением, кроме того оно содержит пустое поле, в котором пользователь может ввести данные. Значение, возвращаемое InputBox, зависит от того, какую кнопку щелкнет пользователь. Если это – ОК, возвращается введенная строка, если – Отмена (Cancel), то пустая. В нашем примере буквы этой строки передаются в функцию Lcase, которая преобразует их в строчные. В блоке, начинающемся сразу за ключевым словом If, помещен цикл For-Each-Next (он подробно описан ниже в разделе "Управляющая структура For-Each-Next”). В этом цикле перебираются все листы активной рабочей книги, с каждым из которых выполняются два действия – свойству Visible присваивается значение True и вызывается метод Unprotect. Первое действие позволяет пользователю видеть лист, второе – снимает с листа защиту паролем. У метода Unprotect есть один аргумент – строка с паролем. Но в данном случае пароль для защиты листов мы не использовали, поэтому Unprotect вызван без аргументов. В других блоках программы свойство Visible и метод Unprotect вызываются выборочно, в зависимости от введенного пароля.