Лабораторные работы по дисциплине "Программные средства информационных систем"
Формат - Microsoft Excel.
Задание 1.
Описание ситуации: вы решили вести учет своих расходов, и с этой
целью в конце каждого месяца намерены составлять таблицу расходов и
строить диаграмму для более наглядного отображения доли каждой статьи
расходов вашего бюджета. Составлять и стоить это ежемесячно довольно
непроизводительная трата времени. Разумнее научить компьютер создавать
таблицу, а затем по мере необходимости отдавать ему команды. Для
обучение компьютера, отлично подходит MacroRecorder – транслятор,
создающий программу (макрос) на языке VBA, которая является результатом
перевода на язык VBA действий пользователя с момента запуска
MacroRecorder до окончания записи макроса.
1. Для активизации MacroRecorder выберите команду Сервис -> Макрос
- > Начать запись. В диалоговом окне Запись макроса задайте:
2.
Рисунок 1 – Диалоговое окно «Запись макроса».
- имя макроса - Расходы
- описание (подсказка о предназначении макроса) – Расчет месячных
расходов.
- сочетание клавиш (необязательный параметр, задается для постоянно
используемых макросов).
- сохранить в книге (предназначен для выбора книги, в которой будет
сохранен макрос).
Если выбрать Личная книга макросов, то макрос будет сохранен в
специальной скрытой книге. Эта книга хотя и скрыта, но является открытой,
и записанные в ней макросы доступны для других рабочих книг. Команда
Окно -> Отобразить позволяет отобразить личную книгу макросов. Если в
раскрывающемся списке выбрать Эта книга, то макрос сохранится на новом
листе модуля в активной рабочей книге, а если выбрать Новая книга – в
новой рабочей книге.
- ОК. Появится плавающая панель инструментов с кнопкой Остановить
запись .
Теперь все производимые действия будут записываться до тех пор, пока
не будет нажата эта кнопка.
3. Постройте шаблон таблицы расходов по следующему алгоритму:
- активизируйте ячейку B1 и введите в нее Расходы;
- активизируйте ячейку А2 и введите в нее Транспорт;
- активизируйте ячейку А3 и введите в нее Коммунальные;
- активизируйте ячейку А4 и введите в нее Еда;
- активизируйте ячейку А5 и введите в нее Развлечения;
- активизируйте ячейку А6 и введите в нее Одежда;
- активизируйте ячейку А7 и введите в нее Компьютер;
- активизируйте ячейку А8 и введите в нее Машина;
- активизируйте ячейку А9 и введите в нее Прочие;
- активизируйте ячейку А10 и введите в нее ИТОГО;
- активизируйте ячейку В10 и введите в нее формулу =СУММ(В2:В9),
вычисляющую суммарные расходы;
- с помощью панели Форматирования создайте рамку, окаймляющую
рабочий диапазон, цвет этого диапазона;
- выберите столбец А, измените ему ширину, чтобы содержимое было
видно полностью;
Выберите диапазон А2:В9 и при помощи Мастера диаграмм панели
инструментов Стандартная создайте диаграмму.
Остановите запись, используя кнопку Остановить запись.
Заполните ячейки таблицы исходными данными, расчет суммарных
расходов и построение диаграммы теперь будет происходить автоматически.
Для просмотра записанной процедуры: Сервис -> Макрос -> Макросы. В
диалоговом окне выберите Имя макроса и кнопка Изменить.
Ниже приведен полный текст записанного макроса.
Sub Расходы()
'
' Расходы Макрос
' расчет месячных расходов
'
'
Range("B1").Select
ActiveCell.FormulaR1C1 = "Расходы"
Range("A2").Select
ActiveCell.FormulaR1C1 = "Транспорт"
Range("A3").Select
ActiveCell.FormulaR1C1 = "Коммунальные"
Range("A4").Select
ActiveCell.FormulaR1C1 = "Еда"
Range("A5").Select
ActiveCell.FormulaR1C1 = "Развлечения"
Range("A6").Select
ActiveCell.FormulaR1C1 = "Одежда"
Range("A7").Select
ActiveCell.FormulaR1C1 = "Компьютер"
Range("A8").Select
ActiveCell.FormulaR1C1 = "Машина"
Range("A9").Select
ActiveCell.FormulaR1C1 = "Прочие"
Range("A10").Select
ActiveCell.FormulaR1C1 = "ИТОГО"
Range("B10").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-8]C:R[-1]C)"
Range("A1:B10").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Interior
.ColorIndex = 34
.Pattern = xlSolid
End With
Range("B12").Select
Columns("A:A").ColumnWidth = 14.86
Range("A2:B9").Select
Charts.Add
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Лист1").Range("A2:B9"), PlotBy:= _
xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
With ActiveChart
.HasAxis(xlCategory) = False
.HasAxis(xlSeries) = False
.HasAxis(xlValue) = True
End With
ActiveChart.Axes(xlCategory).CategoryType = xlAutomatic
End Sub
Единственным ограничение при выполнении данного макроса является
Имя листа, которое обязательно должно быть Лист1.
Вторичное использование макроса: перейдите на новый рабочий лист.
Дайте ему имя Лист1, запустите макрос на выполнение Сервис -> Макрос ->
Макросы. Выделите макрос Расходы и нажмите кнопку Выполнить.
Диалоговое окно закроется и выполнится процедура, создающая на активном
рабочем листе шаблон таблицы. Теперь в нее остается внести новые данные,
а расчет суммарных расходов и построение диаграммы будет происходить
автоматически. Дайте имя листу, соответствующее месяцу.
Задание 2.
1. Запишите в Excel макрос, который создает бланк, приведенный на
рисунок 2. При записи используйте абсолютные ссылки на ячейки. Результат
записи разместите в текущей рабочей книге.
Рисунок 2 – Бланк, созданный с помощью макроса.
2. Перейдите на новый рабочий лист Excel (Лист2). Сделайте активной
ячейку С10. Запустите макрос на выполнение.
3. Запишите в Excel тот же макрос. При записи используйте
относительные ссылки на ячейки. Результат записи разместите в текущей
рабочей книге.
4. Перейдите на рабочий лист Excel (Лист2). Сделайте активной ячейку
С10. Запустите макрос на выполнение.
5. Сравните результат выполнения двух макросов. Сделайте выводы.
6. Перейдите в редактор VB. Удалите из Макрос 2 лишние строки.
7. Запишите макрос, который скрывает сетку рабочего листа, заголовки
строк и столбцов.
Событие Open возникает при открытие рабочей книги. Процедура
обработки данного события имеет следующий синтаксис:
Private Sub Workbook_Open()
With ActiveWindow
. DisplayGridlines = False ‘ Отключение сетки
. DisplayHeadings = False ‘ Отключение заголовков
. DisplayHorizontalScrollBar = False ‘ Отключение полос прокрутки
. DisplayWorkbookTabs = False ‘ Отключение ярлычков листов
End With
End Sub
8. Вставьте текст записанного макроса в Макрос 2.
9. Запустите Макрос 2 на выполнение. Покажите результат
преподавателю.
10. Удалите из проекта Макрос 1 и Макрос 3 (Сервис - > Макрос ->
Макросы, кнопка Удалить).
11. Назначьте Макросу 2 сочетание клавиш (Сервис - > Макрос ->
Макросы, кнопка Параметры).
Задание:
1. Создать приложение, моделирующее игру в орел и решку.
Порядок выполнения работы:
На примере простейшей компьютерной игры будет полностью
разработано первое приложение. Это приложение должно моделировать игру
в орел и решку.
Игрок вносит в банк определенную сумму денег. Игра состоит из
последовательности шагов, которая может быть бесконечной. На очередном
шаге игрок загадывает либо орел, либо решку. Компьютер «бросает монету».
Если «монета падает той же стороной», которую загадал игрок, то банк
увеличивается не единицу, в противном случае уменьшается на единицу.
Игра заканчивается либо по желанию игрока, либо когда величина банка
становится нулем или 10000. Игрок забирает себе содержимое банка. В
приложении отслеживается максимальные и минимальные суммы, которые
были в банке в течение игры.
Для моделирования бросания монеты потребуется генератор случайных
чисел. Функция RND возвращает случайное число типа Single из диапазона
[0,1]. Для генерирования двух чисел с равное вероятностью (предположим 1
– для орла, 0 – для решки), необходимо применить функцию: INT(2*RND).
Функция INT отбрасывает дробную часть аргумента и возвращает его целую
часть. Примечание: INT(6*RND)+1 – моделирует бросание игральной кости.
1. Выберите команду Сервис -> Макрос -> Редактор Visual Basic,
откроется окно редактора Visual Basic.
2. Выберите команду Вставить User Form.
3. Используя панель элементов и окно свойств, заполните
пользовательскую форму элементами управления, создав требуемое
диалоговое окно приложения.
4. Код программы, связанный с пользовательской формой, набирается
для элемента управления CommandButton1 в редакторе кода на листе модуля
UserForm1.
При открытии редактора кода появляются инструкции заголовка и
окончания процедуры, которая будет ассоциирована с элементом
управления:
Private Sub CommandButton1_Click( )
End Sub
Рисунок 3 – Вид редактора Visual Basic при создании пользовательской
формы для игры «Орел и решка».
5. При этом используются следующие процедуры в создаваемой
программе:
5.1. UserForm_Initialize( ) – активизирует диалоговое окно, поле «Банк»
доступно для ввода информации пользователем при инициализации
диалогового окна, в поля Партия, Максимум, Минимум и Игра разрешен
только программный ввод данных, при инициализации диалогового окна
выбран переключатель ОРЕЛ.
Private Sub UserForm_Initialize()
'Процедура инициализации диалогового окна
Максимум = 0
Минимум = 10000
Партия = 0
'Поле банк доступно для ввода информации пользователем
'при инициализации диалогового окна
TextBox1.Enabled = True
'Поля Партия, Минимум, Максимум и Игра не доступны для
'ввода информации пользователем
TextBox2.Enabled = False
TextBox3.Enabled = False
TextBox4.Enabled = False
TextBox5.Enabled = False
TextBox6.Enabled = False
'При инициализации диалогового окна выбран переключатель ОРЕЛ
OptionButton1.Value = True
End Sub
5.2. Нажатие кнопки «Бросание монеты» запускает на выполнение
процедуру CommandButton1_Click( )
- в переменной «Партия» учитывается номер очередной партии;
- в поле «Банк» разрешен только программный ввод данных (перед
началом игры проверяется, принадлежит ли вводимое число диапазону [0,
10000], при невыполнении условия с помощью окна MsgBox выводится
соответствующее сообщение);
- генерируется бросание монеты, определяется, кто выиграл в текущей
партии, корректируется информация о максимальном и минимальном
выигрыше в течение игры. Вся информация о текущем состоянии игры
отображается в полях ввода.
5.3. Нажание кнопки «Отмена» запускает на выполнение процедуру
CommandButton2_Click( ).
6. Объявление переменных уровня модуля:
'Переменные уровня модуля
Dim Банк As Long
Dim Партия As Long
Dim НомерМаксимум As Long
Dim НомерМинимум As Long
Dim Максимум As Long
Dim Минимум As Long
7. Для запуска приложения нажмите кнопку Запуск
программы/User Form.
Задание:
1. Разработать приложение, решающее задачу расчета маргинальной
процентной ставки при постоянных выплатах в течение согласованного
срока.
Порядок выполнения работы:
Постановка задачи: Человеку была предложена следующая сделка:
необходимо дать 10000 ден.ед., а ему возвращается по 2000 ден.ед. в течение
6 последующих лет, т.е. в сумме 12000 ден.ед., что больше даваемой в долг
суммы. Существует возможность положить деньги под проценты в банк.
Спрашивается: при какой минимальной процентной ставке более выгодно
класть деньги в банк под проценты, чем давать в долг на данных условиях?
Чему равен текущий объем вклада при годовой ставке 7%?
Маргинальная процентная ставка – это максимальная процентная ставка,
при которой предлагаемая сделка более выгоднее, чем просто положить
деньги под проценты. Текущий объем вклада – это сегодняшний объем
будущих платежей (отрицательные значения) и поступлений
(положительные значения).
Пример: У вас берут в долг некоторую сумму денег и предлагают через
k1 год вернуть Pk1 денег, через k2 года вернуть Pk2 денег и т.д. Кроме
данной сделки у вас есть альтернативный способ использования ваших денег,
например, положить их в банк под i% годовых. Тогда текущим объемом
вклада является та сумма денег, которой вы должны располагать в текущем
году, чтобы положив их в банк под i% годовых, вы получили предлагаемую
вам прибыль.
Текущий объем вклада на основе постоянных периодических платежей в
течение согласованного срока возвращает финансовая функция рабочего
листа ПC (PV).
Реализация задачи в среде MsExcel и редакторе VBA: синтаксис: ПС
(ставка; кпер; выплата; бз; тип)
Таблица1 - Аргументы
ставка Процентная ставка за период
кпер Общее число периодов выплат
выплата Величина постоянных периодических платежей
бз Будущая стоимость или баланс наличности, который нужно
достичь после последней выплаты (по умолчанию бз=0)
тип
Число 0 или 1, обозначающее, когда должны производиться
выплаты (если опущен или 0, то оплата в конце периода, если –
1, то оплата в начале периода)
При решении задачи исходными данными является: число выплат
(кпер), размер ссуды, размер одной выплаты (выплата), процентная ставка
(ставка).
Вычисляется: с помощью функции ПЗ при данной годовой ставке,
текущий объем вклада. Маргинальная процентная ставка находится как
корень уравнения: Текущий объем вклада = размер ссуды. Данное
соотношение является уравнением относительно одной неизвестной
величины – процентной ставки. Корень одного уравнения с одной
неизвестной находится на рабочем листе с помощью команды Сервис,
Подбор параметра или программно посредством метода GoalSeek.
1. Выберите команду Сервис -> Макрос -> Редактор Visual Basic,
откроется окно редактора Visual Basic.
2. Выберите команду Вставить User Form.
3. Используя панель элементов и окно свойств, заполните
пользовательскую форму элементами управления, создав требуемое
диалоговое окно приложения (рисунок 4).
Рисунок 4 – Диалоговое окно «Маргинальная процентная ставка».
4. Обеспечьте наличие необходимых процедур в программе.
Процедуры, используемые в программе, приведены ниже:
4.1. UserForm_Initialize:
- активизирует диалоговое окно;
- запрещает ввод данных в поля Текущий объем ссуды, Маргинальная
процентная ставка;
- назначает клавише <Esc> функцию кнопке Отмена, а клавише <Enter> -
Вычислить;
- связывает с кнопками Вычислить и Отмена всплывающие подсказки.
'Клавише <Enter> назначена функция кнопки Вычислить
'Кнопке Вычислить назначен текст всплывающей подсказки
With CommandButton1
.Default = True
.ControlTipText = "Расчет и составление отчета на рабочем листе"
End With
'Клавише <Ecs> назначена функция кнопки Отмена
'Кнопке Отмена назначен текст всплывающей подсказки
With CommandButton2
.Cancel = True
.ControlTipText = "Кнопка отмены"
End With
4.2. Нажатие кнопки Вычислить запускает на выполнение процедуру
CommandButton1_Click
- проверяет, являются ли вводимые данные числами. Если хотя бы одно
из них не является числом, то на экране отображается соответствующее
информационное сообщение с установкой фокуса на поле, где произведен
некорректный ввод данных;
- проверяется, будет ли ссуда меньше, чем возвращаемая сумма денег.
Если ссуда больше этой суммы, то отображается сообщение с указанием, на
сколько ссуда меньше возвращаемой суммы денег;
'Проверка согласованности данных
If n * A < p Then
MsgBox "Возвращается на " & CStr(Format(p - n * A, "fixed")) & "меньше размера
ссуды", vbExclamation, "Маргинальная ставка"
TextBox1.SetFocus
Exit Sub
End If
- используя финансовую функцию рабочего листа, ПС (PV) вычисляет
чистый текущий объем ссуды при введенной процентной ставке;
'Расчет чистого текущего объема ссуды с помощью функции ПС (PV)
pPure = Application.PV(i, n, -A)
- используя метод GoalSeek (подбор параметра), находит маргинальную
процентную ставку, т.е. ставку, при которой чистый текущий объем ссуды
равен величине самой ссуды;
'Нахождение маргинальной процентной ставки с помощью команды Подбор
параметра.
'Ввод данных в ячейки активного рабочего листа и задание процентного и денежного
форматов в ячейках
With ActiveSheet
.Range("B2").Value = n
.Range("B3").NumberFormat = "#,##0$"
.Range("B3").Value = p
.Range("B4").NumberFormat = "#,##0$"
.Range("B4").Value = A
.Range("B5").NumberFormat = "0.00%"
.Range("B5").Value = i
.Range("B7").NumberFormat = "0.00%"
'Ввод начального приближения для маргинальной процентной ставки
.Range("B7") = i
'Ввод формулы расчета
.Range("B8").FormulaLocal = "=ПС(B7;B2;-B4)"
.Range("B6").Value = .Range("B8").Value
'Выполнение команды Подбор параметра
ActiveSheet.Range("B8").GoalSeek Goal:=p, ChangingCell:=ActiveSheet.Range("B7")
'Присвоение найденного значения маргинальной процентной ставки переменной
iMarg
iMarg = .Range("B7").Value
End With
- подготавливает рабочий лист для вывода результатов вычислений.
Выводит полученные данные на рабочий лист и диалоговое окно.
'Переформатирование найденных значений и вывод их в диалоговое окно
TextBox5.Text = CStr(Format(pPure, "fixed"))
TextBox6.Text = CStr(Format(iMarg * 100, "fixed"))
4.3. Нажатие кнопки Отмена запускает на выполнение процедуру
CommandButton2_Click.
Задание:
1. Создание приложения, которое позволит выбрать несколько чисел,
выводимых в списке в диалоговом окне.
Порядок выполнения работы:
1. Выберите команду Сервис -> Макрос -> Редактор Visual Basic,
откроется окно редактора Visual Basic.
2. Выберите команду Вставить User Form.
3. Используя панель элементов и окно свойств, заполните
пользовательскую форму элементами управления, создав требуемое
диалоговое окно приложения (рисунок 8).
В группе Операция следует установить один из переключателей: сумма,
произведение, или среднее, чтобы указать, какая операция будет выполняться
над выбранными числами.
Рисунок 8 – Диалоговое окно «Операции над элементами списка».
Нажатие кнопки Вычислить должно привести к выполнению операции и
выводу результата в поле Результат.
4. Обеспечьте наличие необходимых процедур в программе.
Процедуры, используемые в программе, приведены ниже:
4.1. UserForm Initialize:
- активизирует диалоговое окно;
- запрещает ввод данных в поле Результат;
- назначает клавише <Esc> функцию кнопки Отмена, а клавише <Enter>
Вычислить;
- связывает с кнопками Вычислить и Отмена, а также с
переключателями всплывающие подсказки;
- установка первоначального состояния переключателю Сумма;
- установка параметров у элемента ListBox1.
'Заполнение списка и установка режима выбора нескольких элементов из списка
With ListBox1
.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.ListIndex = 0
.MultiSelect = fmMultiSelectMulti
End With
4.2. Нажатие кнопки Вычислить запускает на выполнение процедуру
CommandButton1 Click:
- определяет, какой переключатель выбран. В зависимости от
выбранного переключателя производит действие над выбранными в списке
числами. Найденное число выводится в поле Результат.
Пример выбора переключателя Сумма и вычисление суммы выбранных
элементов:
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
4.3. Нажатие кнопки Отмена запускает на выполнение процедуру
CommandButton2 Click:
- закрывает диалоговое окно.
Задание:
1. Разработать приложение, позволяющее перемещать элемент
управления.
2. Разработать приложение, позволяющее управлять размерами
диалогового окна и вычислять текущий объем вклада при равномерных вы
платах и постоянной процентной ставке.
Порядок выполнения работы:
1.Управление перемещением элемента управления.
Рассмотрим простой пример диалогового окна «Похождение Колобка»,
в котором при нажатии кнопки «Колобок, катись!» Колобок перемещается по
поверхности формы, а при нажатии на кнопку Колобок, расти! Он начинает
увеличиваться в размерах. На рисунке10 показан вид Колобка после
нескольких нажатий на кнопки «Колобок, расти!» и «Колобок, катись!»
1.1 Выберите команду Сервис -> Макрос -> Редактор Visual Basic,
откроется окно редактора Visual Basic.
1.2 Выберите команду Вставить User Form.
1.3 Используя панель элементов и окно свойств, заполните
пользовательскую форму элементами управления, создав требуемое
диалоговое окно приложения (рисунок 9).
Рисунок 9 – Диалоговое окно «Похождение Колобка».
Рисунок 10 – Вид Колобка после нескольких движений.
1.4 Обеспечьте наличие необходимых процедур в программе.
Приведенная ниже программа позволяет реализовать описанные выше
действия.
Private Sub CommandButton1_Click()
'Перемещение колобка по поверхности формы
If Image1.Top > 0 And Image1.Left > 0 Then
Image1.Move Image1.Left - 5, Image1.Top - 6
Else
Image1.Visible = False
End If
End Sub
Private Sub CommandButton2_Click()
'Изменение размера колобка
Image1.Height = Image1.Height + 3
Image1.Width = Image1.Width + 3
End Sub
Private Sub CommandButton3_Click()
UserForm1.Hide
UserForm2.Show
End Sub
Private Sub UserForm_Initialize()
With Image1
.Picture = LoadPicture("c:\face02.ico")
.PictureAlignment = fmPictureAlignmentTopLeft
.PictureSizeMode = fmPictureSizeModeZoom
.BorderStyle = fmBorderStyleNone
.Visible = True
End With
End Sub
2. Перемещение объекта управления при помощи операции drag – and –
drop.
Диалоговое окно Новые похождения Колобка, с которым связана ниже
приведенная программа, программа дает два простых примера
программирования операции drag – and – drop.
1. Если расположить указатель мыши на Колобке и нажать правую
кнопку мыши, то веселый Колобок становиться печальным. Если далее
перемещать указатель мыши при нажатой правой кнопке по поверхности
диалогового окна, то Колобок будет передвигаться вслед за указателем
мыши. Настроение Колобка запрограммировано в процедурах
ВеселыйКолобок и ПечальныйКолобок. Изменение настроения колобка при
нажатии и отпускании правой клавиши мыши запрограммировано в
процедурах Image1_MouseDown и Image1_MouseUp, а перемещение – в
Image1_MouseMove.
2. Если расположить указатель мыши на надписи Колобок и
переместить указатель мыши при нажатой правой кнопке в область второй
надписи, обведенной рамкой, а там уже отпустить правую клавишу мыши, то
во вторую надпись будет скопирован текст Колобок. Процедура
Label1_MouseMove копирует заголовок первой надписи в объект DateObject,
играющий роль буфера обмена, процедура Label2_BeforeDragOver
контролирует операции drag – and – drop во время перемещения указателя
мыши, а Label2_BeforeDropOrPaste в момент отпускания правой кнопки
мыши.
Рисунок 11 – Диалоговое окно «Новые похождения Колобка» в процессе
работы.
Dim Колобокdataobject As DataObject
Private Sub UserForm_Initialize()
Label1.BorderStyle = fmBorderStyleSingle
Label2.BorderStyle = fmBorderStyleSingle
With Image1
.PictureAlignment = fmPictureAlignmentTopLeft
.PictureSizeMode = fmPictureSizeModeZoom
.BorderStyle = fmBorderStyleNone
End With
ВеселыйКолобок
End Sub
Sub ВеселыйКолобок()
Image1.Picture = LoadPicture("c:\face02.ico ")
End Sub
Sub ПечальныйКолобок()
Image1.Picture = LoadPicture("c:\face01.ico")
End Sub
Private Sub Image1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer,
ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
ПечальныйКолобок
End If
End Sub
Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer,
ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
If X ^ 2 + Y ^ 2 = 0 Then
a = 0
b = 0
Else
a = X / Sqr(X ^ 2 + Y ^ 2)
b = Y / Sqr(X ^ 2 + Y ^ 2)
End If
With Image1
.Top = Image1.Top + b
.Left = Image1.Left + a
End With
End If
End Sub
Private Sub Image1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X
As Single, ByVal Y As Single)
If Button = 1 Then
ВеселыйКолобок
End If
End Sub
Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal
X As Single, ByVal Y As Single)
If Button = 1 Then
Set Колобокdateobject = New DataObject
Dim ТипПеремещения As Integer
Колобокdataobject.SetText Label1.Caption
ТипПеремещения = Колобокdataobject.StartDrag
End If
End Sub
Private Sub Label2_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal
Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As
MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
Cancel = True
Effect = fmDropEffectCopy
End Sub
Private Sub Label2_BeforeDropOrPaste(ByVal Cancel As MSForms.ReturnBoolean,
ByVal Action As MSForms.fmAction, ByVal Data As MSForms.DataObject, ByVal X As
Single, ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
Cancel = True
Effect = fmDropEffectCopy
Label2.Caption = Колобокdataobject.GetText
End Sub
3. Управление размером и перемещением элементов управления
Что такое чистый текущий объем инвестиции. Банк осуществляет
некоторый инвестиционный проект, который через k1 год приносит прибыль
или требует дополнительных капиталовложений в объеме Pk денег, через ki
года приносит прибыль или требует дополнительных капиталовложений в
объеме Pk2 денег и т. д., через kn лет приносит прибыль или требует
дополнительных капиталовложений в объеме Pn денег. Тогда чистый
текущий объем инвестиции при i % годовой ставке равен:
/(1 ) 1 ... /(1 ) ,
1
n
n
k
k
k
k P i P i
где Pkn, которые соответствуют прибыли, входят в формулу со знаком
плюс, а те, которые соответствуют дополнительным инвестициям — со
знаком минус.
Необходимо создать приложение с диалоговым окном, изменяющим
свой размер в зависимости от числа членов в формуле, вычисляющей чистый
текущий объем инвестиции.
Для решения задачи нахождения чистого текущего объема инвестиций и
управления размером диалогового окна с помощью редактора
пользовательских форм создается диалоговое окно «Чистый текущий
объем инвестиций». Данное приложении предназначено для расчета до
шести финансовых операций (инвестиций и прибыли).
При инициализации диалогового окна его отображение на экране имеет
меньшую ширину (в нем только поля ввода для двух выплат), хотя при его
конструировании в него помещается поля ввода для всех шести выплат. При
помощи счетчика число операций можно управлять шириной диалогового
окна так, чтобы было достаточно места для размещения в нем того
количества полей ввода данных, которое задается счетчиком.
3.1 Выберите команду Сервис -> Макрос -> Редактор Visual Basic,
откроется окно редактора Visual Basic.
3.2 Выберите команду Вставить User Form.
3.3 Используя панель элементов и окно свойств, заполните
пользовательскую форму элементами управления, создав требуемое
диалоговое окно приложения (рисунок 12).
Рисунок 12 - Диалоговое окно «Чистый текущий объем инвестиций»
3.4 Обеспечьте наличие необходимых процедур в программе.
Приведенная ниже программа позволяет реализовать описанные выше
действия.
3.4.1 UserForm Initialize:
- активизирует диалоговое окно;
- назначает клавише <Еsс> функцию кнопки Отмена, а клавише <Enter>
— Вычислить;
- устанавливает максимальное и минимальное значения счетчика, а
также его значение при инициализации диалогового окна.
3.4.2 Нажатие кнопки «Вычислить» запускает на выполнение
процедуры CommandButton1_Click:
- создает массив, элементами которого являются инвестиции и
прибыли, и массив лет, когда совершались операции;
- проверяет корректность ввода данных;
- вычисляет чистый текущий объем инвестиции.
3.4.3 Нажатие кнопки отмена запускает на выполнение процедуру
CommandButton2_Click:
- закрывает диалоговое окно;
3.4.4 SpinButton1_change:
- изменяет при помощи счетчика размер диалогового окна благодаря
управлению свойством Width в зависимости от введенного числа операций.
Программный код:
' Переменная уровня модуля
Dim n As Integer
' n - число операций
Private Sub UserForm_Initialize0
' Процедура активизации диалогового окна Чистый текущий объем инвестиций
' Устанавливается первоначальное значение счетчика
SpinButtonl.Value = 2
' Запрет не программного ввода данных в поля Процентная ставка и Чистый
текущий объем инвестиций
' Назначение клавишам необходимых функций
' Установка максимального и минимального допустимого значений счетчика, а также
текста всплывающей подсказки
With SpinButtonl
.Max = 6
.Min = 1
.ControlTipText = "Ввод числа операций"
End With
End Sub
Private Sub CommandButtonl_Click()
' Процедура расчета чистого текущего объема инвестиций
Dim Операции (1 To 6) As Double
Dim Годы (1 To 6) As Byte
Dim Процент As Double
Dim I As Integer
Dim ТекущийОбъем As Double
' Операции – массив инвестиций и прибылей
' Годы - массив лет, когда совершались операции
' Процент - годовая процентная ставка
' ТекущийОбъем - объем чистого начального вклада
‘ i - вспомогательная переменная
Dim ПолеВвода(1 To 6, 1 To 2) As Object
' Вспомогательный массив объектов, который будет использоваться при вводе
данных из полей ввода
' Задание компонент массива объектов
Set ПолеВвода(1, 1) = TextBoxl
Set ПолеВвода(2, 1) = TextBox2
Set ПолеВвода(3, 1) = TextBox3
Set ПолеВвода(4, 1) = TextBox4
Set ПолеВвода(5, 1) = TextBox5
Set ПолеВвода(6, 1} = TextBox6
Set Поле6вода(1, 2) = TextBoxl0
Set ПолеВвода(2, 2) = TextBoxll
Set ПолеВвода(3, 2) = TextBoxl2
Set ПолеВвода(4, 2) = TextBoxl3
Set ПолеВвода(5, 2) = TextBoxl4
Set ПолеВвода(6, 2) = TextBoxl5
' Проверка того, являются ли введенные в ·диалоговом окне значения числами
‘Ввод в массивы Операции и Годы данных из диалогового окна
For i = 1 To n
Операции(i) = CDbl(ПолеВвода(i, 1).Text)
Годы(i) = CByte(ПолеВвода(i, 2).Text)
Next i
' Ввод процентной ставки
Процент = CDbl(TextBox8.Text) / 100
' Расчет чистого текущего объема инвестиции
ТекущийОбъем = 0
For i = 1 To n
ТекущийОбъем = ТекущийОбъем + Операции(i) / (1 + Процент) ^ Годы(i)
Next i
' Вывод в диалоговом окне величины чистого текущего объема инвестиций
ТекущийОбъем = Format(ТекущийОбъем, "Fixed")
TextBox9.Text = CStr(ТекущийОбъем)
End Sub
Private Sub SpinButtonl_Change()
' Процедура изменения размера диалогового окна в зависимости от введенного
числа операций
' Вывод числа операций со счетчика в поле ввода
TextBox7.Text = CStr(SpinButtonl.Value)
' Присвоение значения переменной n (числа операций) из поля ввода
n = CInt(TextBox7.Text)
' Изменение размера диалогового окна
UserForml.Width = 120 + (n - 1) * 50
End Sub
Задание:
Создать новую панель элементов и новое меню.
Порядок выполнения работы:
Программирование панели инструментов позволяет создавать для
приложения пользователя собственный интерфейс.
Объект CommandBar и семейство CommandBars используются для
программирования строк меню и панелей инструментов. Семейство
CommandBars представляет собой панели команд. Каждый объект
CommandBar содержит семейство CommandBarControls, состоящее из всех
элементов управления данной панели инструментов. Элементы семейства
CommandBarControls относятся к одному из трех типов:
- CommandBarButton – кнопка или элемент меню, вызывающий
выполнение команды или подпрограммы.
- CommandBarComboBox – сложно организованные меню, такие как
поле ввода, раскрывающийся список или поле со списком.
- CommandBarPopUp – меню или вложенные меню.
1. В окне Проект->VBAProject выберите «Эта книга» и наберите
следующие процедуры:
Процедура создания новой панели инструментов и новое меню при
открытии рабочей книги.
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
'При открытии рабочей книги панели инструментов «Форматирование» и
«Стандартная» скрываются, и отображается новый заголовок окна приложения
With Application
.Caption = "Новый заголовок окна"
.DisplayAlerts = False
.CommandBars("Formatting").Visible = False
.CommandBars("Standard").Visible = False
End With
'Создание новой панели инструментов с именем Рабочая панель инструментов,
которая будет удаляться при закрытии приложения
With Application.CommandBars.Add(Name:="Рабочая панель инструментов", _
Position:=msoBarTop, MenuBar:=False, temporary:=True)
.Visible = True
With .Controls
'Создание кнопки (картинка)
With .Add(Type:=msoControlButton, ID:=2950)
.TooltipText = "кнопкадействия1"
.OnAction = "действие1"
End With
'Создание кнопки (надпись)
With .Add(Type:=msoControlButton, ID:=1)
.Caption = "Действие1"
.TooltipText = "При нажатие выполнится второе действие"
.Style = msoButtonCaption
.OnAction = "Действие2"
End With
'Создание раскрывающегося списка
With .Add(Type:=msoControlDropDown)
.AddItem “Колобок катись!”,1
.AddItem “Колобок расти!”,2
.ListIndex=1
End With
End With
End With
'Создание строки меню файла
With Application.CommandBars.Add(Name:="Моеменю", MenuBar:=True,
Temporary:=True)
.Visible = True
With .Controls
With .Add(Type:=msoControlPopup)
.Caption = "&Файл"
With .Controls
With .Add(Type:=msoControlPopup)
.Caption = "Подменю"
With .Controls
With .Add(Type:=msoControlButton)
.Caption = " Сохранение "
.OnAction = "Действие3"
End With
End With
End With
End With
End With
End With
End With
End Sub
Процедура, отображающая панели инструментов Форматирование и
Стандартная при закрытии приложения, кроме того, она устанавливает
заголовок окна приложения, используемые по умолчанию
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
With Application
.CommandBars("Formatting").Visible = True
.CommandBars("Standard").Visible = True
.Caption = Empty
End With
End Sub
2. Добавьте в проект новый модуль Insert – Module. На листе модуля
выведете следующие процедуры, которые будут выполняться при нажатии на
соответствующие кнопки.
Sub Действие1()
MsgBox "результат первого действия"
End Sub
Sub Действие2 ()
MsgBox "результат второго действия"
End Sub
Sub Действие3 ()
MsgBox "результат второго действия"
End Sub
Комментариев нет:
Отправить комментарий