- •Экономическая информатика
- •Оглавление
- •Лабораторная работа № 1 Создание пользовательских функций. Создание макросов в ms Eхcel c использованием макрорекордера
- •Лабораторная работа № 2 Программирование алгоритмов линейной и разветвляющейся структуры на vba
- •Задание к работе
- •Структура редактора vba
- •Окно проекта
- •Возможности редактора кода.
- •Окно свойств
- •Окно Просмотр объектов
- •Линейные алгоритмы
- •Передача данных программе и получение данных из программы.
- •Пример программы на линейный алгоритм.
- •Алгоритмы с ветвлением
- •Применение структуры Select Case
- •Программы циклической структуры, массивы, вложенные циклы. Характерные приемы программирования
- •Теоретическая часть Операторы цикла
- •Оператор For Next
- •Массивы
- •Вложенные циклы
- •Программирование типовых алгоритмов
- •Вычисление суммы и произведения.
- •Запоминание результата
- •Лабораторная работа №4 Подпрограммы. Передача данных из рабочих листов ехсеl в vba программу и обратно.
- •Процедуры и функции.
- •Создание и применение функций
- •Передача данных из рабочих листов excel в vb программу и обратно.
- •Лабораторная работа№5 Создание пользовательских форм
- •Перехват ошибок
- •Контрольные вопросы
- •Лабораторная работа №6 Работа с файлами последовательного и произвольного доступа
- •Контрольные вопросы
- •Приложение
- •Литература
функцию, которая вычисляет сумму, выдаваемую работнику на руки.
Итого к выдаче = оклад - удержания - алименты;
Для создания пользовательской функции необходимо сделать следующее:
войти в редактор VBA СЕРВИС/МАКРОС/РЕДАКТОР VBA.( ALT+F11);
Вставить в окно проекта МОДУЛЬ команда ВСТАВКА(INSERT)/МОДУЛЬ(MODULE);
в него вставить процедуру FUNCTION - ВСТАВКА/ПРОЦЕДУРА(PROCEDURE) ,в ДО выбрать процедуру функцию и дать имя пользовательской функции (без пробелов ) и ОК.
В окне модуля появится заготовка функции, в нее вставить необходимые для вычисления аргументы и алгоритм вычисления функции. После чего имя функции появится в разделе Пользовательские в Мастере Функций.
Пример пользовательской функции для вычисления алиментов:
Public Function Алименты (оклад, удержания, кол_детей)
If кол_детей = 1 Then Алименты = 0.25 * (оклад - удержания)
If кол_детей >= 2 Then Алименты = 0.33 * (оклад - удержания)
If кол_детей = 0 Then Алименты = 0
End Function
В этой пользовательской функции оклад, удержания, кол_детей – аргументы, а Алименты – имя функции.
Задание 3
С помощью макрорекордера записать макрос, по начислению заработной платы сотрудников предприятия .
Порядок записи макроса:
Команда Сервис/Макрос/Начать запись в диалоговом окне (Рис.1) Запись макроса дать имя макросу, сохранить в Личной книге макросов(Personal.xls),описать макрос, назначить макросу горячие клавиши и ОК.
Рис.1
Н
а
листе MS
Eхcel
появится ПИ с двумя кнопками
.
Начать запись:
открыть файл в котором была создана таблица с исходными данными команда Файл/Открыть;
провести в таблице расчет зарплаты, используя созданные пользовательские функции. Курсор поставить в ячейку под заголовок Пенсионный фонд и запустить мастер функций, найти среди категории пользовательские функцию, для расчета отчислений в пенсионный фонд ;
расчет провести для первого в таблице сотрудника, а далее используя механизм копирования формул заполнить столбец;
по аналогии провести расчеты по всей ведомости;
рассчитать строчку «Итого по ведомости», используя функцию Автосумма() и механизм копирования формул;
отформатировать таблицу по своему усмотрению Формат/Ячейки;
остановить запись макроса ,используя кнопку останова на панели инструментов или меню Сервис/Макрос/Остановить запись.
сохранить таблицу с начисленной заработной платой в файле под другим именем.
Задание 4
Выполнить созданный макрос либо из меню Сервис/Макрос/Макросы выбрать название из списка и запустить или используя горячие клавиши, которые задали для этого макроса.
Файл сохранить под новым именем!
Задание 5
Назначение макросу команду меню. В меню Сервис включить новый пункт Зарплата и связать его с созданным макросом.
Выбрать в меню Сервис команду Настройка, появится ДО Настройка (Рис.2), вкладка Команды выделить категорию макросы.
Рис.2
В правом списке щелчок л. м. на элементе Настраиваемая команда меню и, не отпуская кнопку отбуксировать элемент на меню СЕРВИС. При перемещении мыши вдоль меню будет перемещаться горизонтальная линия, которая отмечает будущее положение вставляемой в меню команды. Отбуксировать мышь так, чтобы горизонтальная линия располагалась за командой Макрос и отпустить кнопку. В меню появиться окруженная рамкой команда Настраиваемая команда меню. Щелчок пр.м. на команде, открыть контекстное меню. Очистить поле и ввести в него нужную команду (например, Зарплата) и ВВОД. Еще раз открыть контекстное меню команды. Выбрать команду Назначить макрос, откроется диалог, Назначить макрос, выбрать в списке макрос и ОК. Щелчок на кнопке Закрыть.
Задание 6
Создать пользовательскую кнопку, связать ее с макросом и поместить на любую из панелей инструмент.
Выбрать в меню Сервис команду Настройка, появится диалог НАСТРОЙКА, вкладка КОМАНДЫ выделить категорию макросы. В правом списке щелчок л.м.на элементе Настраиваемая кнопка и не отпуская кнопку отбуксировать ее на панель инструментов , после того как отбуксировали кнопку ее можно изменить нажав кнопку Изменить выделенный объект(кнопка становится активной) в ДО Настройка задается имя кнопке и изменяется значок из команды Выбрать значок для кнопки .Из контекстного меню выбрать команду Назначить макрос, и ОК .Щелчок на кнопке Закрыть закроется окно диалога НАСТРОЙКИ интерфейса MS Excel.
При создании кнопки задать свойству кнопки всплывающая подсказка - Зарплата.
Используя редактор кнопок отредактировать кнопку по своему усмотрению.
Задание 7
Создать графический объект, используя панель инструментов Рисование, привязать к объекту макрос используя контекстное меню. Отредактировать объект, используя команду Формат объекта из контекстного меню.
Необходимо помнить, что при каждом запуске макроса файл сохранять под новым именем!
Задание 8
Просмотреть записанный макрос:CЕРВИС/МАКРОС/МАКРОСЫ кнопка Изменить , откроется редактор VBA с записанным макросом.
Контрольные вопросы
Что такое макрос?
Как создаются макросы в MS Eхcel?
Как просмотреть «написанный» макрос?
Как назначить макросу кнопку или команду меню?
Как создать пользовательскую функцию?
Как удалить команду меню или кнопку ПИ, запускающие макрос на выполнение?
Лабораторная работа № 2 Программирование алгоритмов линейной и разветвляющейся структуры на vba
ЦЕЛЬ РАБОТЫ:
изучение редактора VBA,овладение практическими навыками программирования вычислительного процесса линейной и разветвляющейся структуры на VBA.
Задание для самостоятельной подготовки
Изучить:
структуру редактора VBA;
запись констант, переменных, функций, процедур;
правила записи арифметических и логических выражений, оператор присваивания, приоритет операций;
организация ввода и вывода данных в программу (INPUTBOX) и из программы (MSGBOX);
изучить возможности языка VBA для реализации вычислительного процесса разветвляющейся структуры (условные и безусловные операторы передачи управления);
Задание к работе
Изучить работу редактора VBA на примерах программ из лабораторной работы.
Написать программу на VBA по заданным формулам, указанным в таблицах№1 и №2(вариант задается преподавателем). В окно сообщений вывести результаты вычислений, сопровождая вывод наименованиями выводимых переменных, а также вывести значения вводимых исходных данных.
Структура редактора vba
Редактор VBA активизируется командой Сервис, Макрос, Редактор Visual Basic или нажатием кнопок ALT+F11.
Возвратиться из редактора VBA в рабочую книгу можно нажатием кнопки Вид \Microsoft Excel(Wiev Microsoft Excel) . Интерфейс редактора состоит из следующих основных компонентов: окно проекта(Project window), окно свойств(Properties window), окно редактирования кода, окна форм, меню и панели инструментов.
Окно проекта
Окно проекта в редакторе VBA активизируется выбором команды Вид, Окно проекта или нажатием кнопки Окно проекта
В окне проекта (VBAProject) представлена иерархическая структура файлов, форм и модулей текущего проекта .
В проекте автоматически создается модуль для каждого рабочего листа и для всей книги. Кроме того, модули создаются для каждой пользовательской формы, макросов. По своему предназначению модули делятся на два типа: модули объектов и стандартные. К стандартным модулям относятся те, которые содержат макросы. Такие модули добавляются в проект командой Вставка, Модуль(Insert,Module) К модулям объектов относятся модули, связанные с рабочей книгой, рабочими листами, формами.
Формы создаются командой Вставка/UserForm . По мере создания, добавления и удаления файлов из проекта эти изменения отображаются в окне проекта.
Окно для редактирования кода
Окно редактирования кода служит в качестве редактора для ввода и изменения кода процедур приложения. Код внутри модуля организован в виде отдельных разделов для каждого объекта, программируемого в модуле. В окне редактирования доступны два режима представления кода: просмотр отдельной процедуры и всего модуля
Рис.1
Переключения режимов работы окна редактирования кода осуществляется выбором одной из двух кнопок в нижнем левом углу редактирования кода, либо установкой или снятием флажка Просмотр всего модуля вкладки Редактор(Editor) окна Параметры(Options) отображаемого на экране командой Сервис(Tools),Параметры(Options).
Окно редактирования кода служит в качестве редактора для ввода и изменения кода процедур приложения. Код внутри модуля организован в виде отдельных разделов для каждого объекта, программируемого в модуле. В окне редактирования доступны два режима представления кода : просмотр отдельной процедуры и всего модуля .Переключения режимов работы окна редактирования кода осуществляется выбором одной из двух кнопок в нижнем левом углу редактирования кода, либо установкой или снятием флажка Просмотр всего модуля вкладки Редактор(Editor) окна Параметры(Options) отображаемого на экране командой Сервис(Tools),Параметры(Options).
Два раскрывающихся списка в верхней части окна редактора кода облегчают ориентацию в процедурах. Левый раскрывающийся список позволяет выбрать управляющий элемент или форму, а правый содержит список событий, допустимых для выбранного в левом списке объекта. При выборе элемента управления в форме посредством двойного щелчка открывается окно редактирования кода как раз в том месте ,где располагается процедура ,связанная с этим элементом управления .
Возможности редактора кода.
Редактор кода обладает способностью автоматически завершать написание операторов ,свойств и параметров .При написании кода редактор, предлагает пользователю список компонентов ,логически завершающих вводимую инструкцию.
Например, набирая код
Dim A As
после ввода пробела на экране отобразиться список компонентов логически завершающих данную инструкцию. Двойной щелчок на выбранном элементе или нажатие клавиши <Таb> вставляет выбранное имя в код программы .
Редактор кода также производит проверку синтаксиса набранной строки кода после нажатия клавиши <Enter>, если строка выделяется красным цветом, то это указывает на наличие в строке синтаксической ошибки .Если установлен флажок Проверка синтаксиса Cервис\Параметры\Редактор, на экране дополнительно отображается диалоговое окно, поясняющая ошибку.
Если курсор в редакторе кода поместить на имя процедуры или функции, на ключевое слово, на свойство или метод и нажать клавишу <F1> ,то на экране появиться справочное окно с конкретной информацией.
Окно редактирования форм(UserForm)
Формы используются для создания диалоговых окон(ДО),разрабатываемых приложений в VBA.Редактор форм является одним из основных приложений визуального програм-мирования. Форма в проект добавляется с помощью команды
Вставка/Форма или с помощь кнопки ПИ. На экран выводится незаполненная форма и Панель элементов с помощью, которой из незаполненной формы можно сконструировать для приложения любое ДО (Рис.2)
Рис.2
Разместить управляющий элемент в форме можно следующим образом:
Один щелчок на элементе, который нужно разместить в форме.
Поместить указатель мыши в место расположения элемента.
Нажать левую кнопку мыши и растянуть прямоугольник.
Отпустить кнопку мыши.
Элемент управления создан!
Основные элементы управления представлены на Рис.3.
Рис.3
Размеры формы и элементы управления изменяются по технологии Windows.Окно редактирования форм поддерживает операции буфера обмена. С помощью меню Format выравниваются элементы управления, для выравнивания элементов можно использовать сетку Сервис\Параметры\Общие.
Элемент управления |
Имя |
Характеристика |
|
TextBox |
Отображает данные и используется для ввода информации тип Text |
|
Label |
Отображает неизменный текст в формах, например, заголовки полей |
|
|
|
|
CheckBox |
Позволяет задать значение «Истина», «Ложь» |
|
OptionButton |
Используется для выбора одного варианта многих |
|
ToggleButton |
Создает кнопку, имеющую два состояния «Включено», «Выключено» |
|
TabStrip |
|
|
MultiPage |
Многостраничное диалоговое окно |
|
ScrollBar |
|
|
SpinButton |
Используется для увеличения или уменьшения числовых значений |
|
Frame |
Позволяет установить графическую или функциональную группировку элементов управления |
|
Image |
Отображает в форме импортированный рисунок |
|
CommandButton |
Создает кнопку, при нажатии которой выполняется команда |
|
ListBox |
Позволяет создать список, содержащий требуемые значения |
|
ComboBox |
Используется либо для выбора нужного элемента из списка, либо для ввода значения в поле |
Окно свойств
Для формы и элементов управления устанавливаются по мере необходимости свойства в окне свойств. Для просмотра свойств выбранного объекта необходимо щелкнуть на кнопке Окно свойств или выбрать команду Вид\Окно свойств.
Окно свойств состоит из двух составных частей: верхней и рабочей. В верхней части окна располагается раскрывающийся список , из которого можно выбрать любой элемент управления текущей формы или саму форму. Рабочая часть состоит из двух вкладок: По алфавиту и По категориям, отображающие набор свойств в алфавитном порядке или по категориям. Свойства объектов меняют следующим образом:
Значение свойства вводят с клавиатуры в соответствующее поле.
Значение большинства свойств выбирают из раскрывающегося списка, который активизируется щелчком в соответствующем поле окна свойств.
Окно Просмотр объектов
Окно Просмотр объектов вызывается командой Вид \ Просмотр объектов или нажатием кнопки Просмотр объектов ПИ. В этом окне приведен список всех объектов, которые имеются в системе и которые можно использовать при создании проекта.
Окно Просмотр объектов состоит из трех основных частей:
Раскрывающегося списка Проект\Библиотека в левом верхнем углу окна. В этом раскрывающемся списке можно выбрать различные проекты и библиотеки объектов. В частности, библиотеки объектов Excel, VBA, Office и VBA Project (объекты пользовательского проекта). Выбор в списке строки Все библиотеки отображает список объектов всех библиотек.
Списка Классы. После выбора из раскрывающегося списка Проект \Библиотека (просматриваемой библиотеки, например VBA, все классы объектов выбранной библиотеки выводятся в списке Классы .
Списка Компоненты. После выбора класса из списка Классы просматриваемой библиотеки, например FileSystem, все компоненты выбранного класса выводятся в списке Компоненты . При выделении строки в этом списке в нижней части окна Просмотр объектов приводится дополнительная информация о выбранном компоненте. Кроме того, если нажать на кнопку Справка или ?, расположенную на ПИ в правой верхней части окна Просмотр объектов, то на экране отобразится окно Справочник Visual_Basic с подробной информацией о выделенном компоненте.
Линейные алгоритмы
Линейный алгоритм-это алгоритм, в котором операторы выполняются друг за другом сверху вниз без ветвления. На одной строке пишется один оператор. Можно записать несколько операторов на одной строке, если между ними поставить знак ”:”.
Передача данных программе и получение данных из программы.
С помощью функции InputBox в программу вводится информация, функция выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода информации или нажатия кнопки, а затем возвращает значение типа String.
InputBox([Подсказка[,заглавие][,по умолччанию][,Хпоз.][,Yпоз.][,Help-файл, контекст]), где:
Подсказка - строковое выражение, появляющееся как сообщение в диалоге до 1024 символов.
Заглавие - строковое выражение, выводимое в заголовке диалога, если этот аргумент опущен, то окно диалога будет без заглавия.
По умолчанию - строковое выражение ,появляющееся в текстовой строке для ввода.
Хпоз , Yпоз – позиции окна относительно экрана.
Help-файл- строковое выражение, которое указывает файл справки для обеспечения контекстной подсказки в диалоговом окне.
Контекст – номер контекстной подсказки.
Как правило в функции используют первые два аргумента.
Для вывода информации используется функция MsgBox.
Эта функция обеспечивает создание диалогового окна подобно простому окну сообщений. Оно отображает строку текста, а затем ожидает, когда пользователь введет информацию Нажмет командную кнопку.
МSGBOX([Cообщение [ , кнопки][ , заголовок][,файл справки ,раздел справки]), где
Cообщение –строка, которая выводится в диалоге.
Кнопки - числовая константа, которая определяет какие кнопки и значки будет содержать диалог.
Заголовок – определяет строку – заголовок диалога.
Файл справки – задает имя файла справки, который будет открыт при нажатии F1.
Раздел справки – задается раздел справки.
Опции :
0-ОК; 1-OK,Cancel;2-стоп,повтор,пропустить ; 16-критическое сообщение;
32-вопрос; 48-предупреждение;64-информация.
Программа на выполнение запускается кнопкой с треугольником.
Пример программы на линейный алгоритм.
Программа для расчета площади треугольника со сторонами а,b,c по формуле Герона:
S=
,
где
Программа, реализующая вычисления площади треугольника имеет вид:
Public Sub Sgeron()
Dim a As Double
Dim b As Double
Dim c As Double
Dim p As Double
Dim s As Double
a = InputBox("введите значение a", "a=")
b = InputBox("введите значение b", "b=")
c = InputBox("введите значение c", "c=")
p = (a + b + c) / 2
s = Sqr(p * (p - a) * (p - b) * (p - c))
MsgBox "площадь треугольника" & Format(S,"##,##0.00”), 2, "по формуле"
End Sub
В программе использованы две функции InputBox и MsgBox для ввода и вывода информации.
Запустить программу на выполнение и задать в окне InputBox данные.
Задание 3
Задача для расчета суммы вклада, которая будет на счету через n лет.
,где
p-процент,
n-количество лет,
Ao-исходная сумма
Программа реализующая вычисления суммы вклада имеет вид:
Public Sub сумма_вклада()
Dim ao As Double
Dim p As Double
Dim n As Double
Dim s As Double
ao = InputBox("введите значение ao", "исходная сумма")
p = InputBox("введите значение процент р", "процентная ставка")
n = InputBox("введите значение количество лет n", "количество лет")
s = ao * (1 + p / 100) ^ n
MsgBox "сумма вклада " & Format(S,"##,##0.00")) & " за " & (n) & "лет", vbOKCancel, "сумма вклада"
End Sub
Вставить в проект Модуль Вставка/Модуль набрать текст программы, запустить на выполнение – F5 или с панели инструментов – треугольник, или команда меню RUN/RUN
Результаты выполнения записать и показать преподавателю.
Алгоритмы с ветвлением
Для изменения естественного порядка выполнения программного кода используются операторы передачи управления. К ним относятся:
IF…Then
IF…Then…Else
IF …Then…ElseIf
Select…Case
Go to n
Для передачи управления в зависимости от некоторого условия применяются первые 3 конструкции IF.
Простейшим оператором принятия решения является оператор IF однострочный,он имеет следующий синтаксис:
IF <логическое выражение B> Then < оператор А>
Если выражение В Истина (True),то выполняется оператор А, если В Ложно(False),то А не выполняется управление переходит на оператор стоящий за IF.
Однострочная конструкция:
IF C>=2.5 Then X=SIN (2*C),
Многострочный оператор:
IF C>=2.5 Then
X=SIN(2*C)
D=COS(X)^2
End If
С помощью управляющего оператора IF…Then…Else задаются две группы операторов, одна из них выполняется за Then ,если условие истинно, а другая группа за Else - если условие ложно.
IF M<>N…Then A=60…Else A=100
Для проверки нескольких условий можно использовать вложенный управляющий оператор IF Then ElseIf , показанный в последующем фрагменте программе:
…
IF работа=1 Then
Премия=Оклад*0.5
ElseIf работа=2 Then
Премия=Оклад*0.4
ElseIf работа=3 Then
Премия=Оклад*0.3
Else
Премия=0
EndIf
…
Применение структуры Select Case
Инструкция Select Case может служить альтернативой инструкции ElseIf в If...Then...Else при оценке одного выражения, которое имеет несколько возможных значений. В то время как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры.
В следующем примере Select Case оценивает аргумент Работа, который передается в процедуру. Следует отметить, что каждая инструкция Case может иметь несколько значений, диапазон значений или комбинацию значений и операторов сравнения. Необязательная инструкция Case Else выполняется, если Select Case не находит подходящего значения ни в одной из инструкций Case.
Function Bonus(Работа, Премия, Оклад, налог)
…
Select Case Работа
Case 1
Премия=Оклад*0.5
Case 2, 3
Премия=Оклад*0,4
Case 4 To 6
Премия=Оклад*0.3
Case Is > 8
Премия = 100
Case Else
Премия = 0
End Select
…
Операция IS используется для сравнения двух объектов, проверка идентичности ссылки на объект.
Инструкция Go To N задает безусловный переход на указанную строку внутри процедуры.
Обязательный аргумент строка может быть любой меткой строки или номером строки.
GOTO 5 переход к оператору с меткой 5
5: IF…
Задача вычисления площади треугольника с проверкой корректности ввода сторон треугольника.
Public Sub Sgeron1()
Dim a As Double :Dim b As Double :Dim c As Double: Dim p As Double: Dim s As Double
a = InputBox("введите значение a", "a=")
b
= InputBox("введите
значение b",
"b=")
c = InputBox("введите значение c", "c=")
p= (a + b + c) / 2
If p > a And p > b And p > c Then
S = Sqr(p * (p - a) * (p- b) * (p- c))
MsgBox "площадь треугольника" & Format(S,"00 000.00"), 0, "по формуле _Герона"
Else
MsgBox ("треугольник не существует")
End If
End Sub
Следующий пример для вычисления значения функции Z(X,Y)
Р
ешение:
Public Sub Func1()
Dim X AS Single, Y AS Single, Z AS Single
X = InputBox("введите значение X", "X=")
Y = InputBox("введите значение Y", "Y=")
If X>Y Then
Z=X-Y
ElseIF X=Y Then
Z=Y+2*X+1
Else
Z=Y^2+4*X+5
End If
MsgBox "функция Z=" & Format((s, "##,##0.00"), 1, "по формуле"
End Sub
Написать программы согласно полученному варианту из таблиц №1 и№2, программы и результаты расчета показать преподавателю.
ЗАЩИТИТЬ РАБОТУ преподавателю.
Контрольные вопросы
Что называется программой?
Что такое алгоритмы разветвляющейся структуры?
Для каких целей служат модули?
Как запустить программу на выполнение?
Из каких разделов состоит программа?
Что такое проект?
Какие типы данных существуют в VBA?
Какие функции есть в языке для ввода и вывода информации?
Что называется алгоритмом?
В чем отличие линейной структуры от разветвленной?
Лабораторная работа № 3
Программы циклической структуры, массивы, вложенные циклы. Характерные приемы программирования
Цель работы:
овладение практическими навыками программирования алгоритмов циклической структуры, овладение навыками работы с массивами. Программирование алгоритмов со структурой вложенных циклов. Изучение характерных приемов программирования (организация суммы, произведения, запоминания результата)
Задание к работе
Получить у преподавателя свои варианты заданий из таблицы №3 и №4
Написать программу с оператором цикла For…Next .
Написать программу с любым оператором Do…Loop
Написать программу с вложенными циклами, запомнить результат.
Написать программу с вложенными циклами, используя оператор Array.
Теоретическая часть Операторы цикла
Циклами называются многократно повторяющиеся участки программного кода. По своему расположению циклы бывают : одиночные , последовательные , вложенные .Циклы бывают с известным числом повторений (вычисляемые циклы) и с неизвестным числом повторений (итерационные циклы).
Операторы цикла на VBA:
For…Next
Do…Loop
For… Each…Next
Оператор For Next
Операторы цикла For Next позволяют выполнить тело цикла несколько раз с изменением параметра цикла от начального до конечного значения с постоянным шагом
Вычисляемые циклы реализуются в VBA c помощью циклической структуры For Next,имеющей следующий синтаксис:
For счетчик = начало To конец [Step шаг]
[инструкции]
[Exit For]
[инструкции]
Next [счетчик]
Синтаксис инструкции For Next содержит следующие элементы:
Счетчик Обязательный. Числовая переменная, используемая в качестве счетчика цикла(параметра).
Начало Обязательный. Начальное значение переменной счетчик.
Конец Обязательный. Конечное значение переменной счетчик.
Шаг Необязательный. Значение, на которое изменяется счетчик при каждом выполнении тела цикла. Если это значение не задано, по умолчанию шаг равен единице.
Аргумент шаг может быть как положительным, так и отрицательным.
После выполнения всех инструкций цикла значение шаг добавляется к текущему значению переменной счетчик. После этого инструкции цикла либо выполняются еще раз на основе вышеуказанных условий, либо цикл завершается и выполнение продолжается с инструкции, следующей за инструкцией Next ,программа выходит из цикла когда счетчик (параметр цикла) станет больше конечного значения.
В качестве примера приведен фрагмент программы для вычисления функции Y=Sin(X) ,где Х изменяется от 0о до 30о с шагом 2о.
…
XN = InputBox("введите XN", "XN")
XK = InputBox("введите XK", "XK")
XH = InputBox("введите XH", "шаг")
For X = XN To XK Step XH
Y = Sin(X * (Pi / 180))
MsgBox "y= " & Format(Y, "## #00.00") & " X=" & Format(X, "## #00.00"), vbOKOnly, "вывод Функции У"
Next X
…
Программа выйдет из цикла, когда параметр цикла Х станет больше конечного значения ХК.
Можно посчитать количество циклов по формуле: N = Int((XK - XN) / XH) + 1 ,далее приведем фрагмент программы для задачи
…
XN = InputBox("введите XN", "XN")
XK = InputBox("введите XK", "XK")
XH = InputBox("введите XH", "шаг")
'Задание начального значения изменяющейся переменной
X = XN
'Количество циклов
N = Int((XK - XN) / XH) + 1
For I = 1 To N
Y = Sin(X * (3.14 / 180))
MsgBox "y= " & Format(Y, "## #00.00") & " X=" & Format(X, "## #00.00"), vbOKOnly, "вывод Функции У"
Debug.Print "Y=" & Format(Y, "## ##0.00") & " X= " & Format(X, "## ##0.00")
'Текущее значение изменяющейся переменной X
X = X + XH
Next I
…
В этом фрагменте Debug.Print выводит в окно отладки результаты расчета.
Задание 1
Для своего варианта из Таблицы №3 написать программу, применяя для организации циклов любой вышеприведенный способ. Получить результаты и показать преподавателю.
Операторы цикла DO …LOOP
Для организации циклов с неизвестным числом повторений (итерационные циклы) существует цикл DO …LOOP , повторяющийся до тех пор, пока не выполнится какое-то произвольно заданное условие. В цикле DO …LOOP проверка условия для выхода из цикла может выполняться перед началом цикла, так и после выполнения операторов цикла.
Существуют 4 конфигурации этого оператора:
Условие TRUE в начале, условие TRUE в конце.
Условие FALSE в начале, условие FALSE в конце.
Приведем пример программы для задачи 1: кладем 100 000 руб. в банк под 10 % годовых, за какой срок сумма увеличится в 6 раз.
Эта задача с неизвестным числом повторений.
Public Sub Ставка()
Dim S2 As Single
Dim S1 As Single
Dim P As Single
Dim k As Single
Dim Res As Integer
S1 = InputBox("Введите S1", "начальное значение суммы")
P = InputBox("Введите ", "процентная ставка")
k = InputBox("Введите k", "увеличение денег в к=6 раз")
S2 = S1
Res = 0
Do Until S2 >= k * S1
S2 = (1 + P / 100) * S2
Res = Res + 1
Loop
MsgBox "S2= " & Format(S2, "## #00.00") & "руб." & _
"за" & Format(Res, "## #00") & "лет", 0, "вклад"
End Sub
Задание 2
Открыть рабочую книгу, войти в редактор VBA ,вставить модуль, в него процедуру Ставка1 и написать программный код для условия, если ИСТИНА в начале.
Массивы
Массив-это конечный набор переменных одного типа (элементов массива)
Этот набор имеет имя - имя массива. Каждому элементу массива соответствует номер (индекс) - целое число. Имя элемента - это имя массива и индекс в скобках. Индекс-целое число, целая переменная или выражение, значение которого - целое число.
Например:
А(1)- первый элемент массива А
А(2)- второй элемент массива А
А(i+1)- элемент массива А с индексом i+1
Правила использования элементов массива такие же, как и для переменной.
С=А(1)+А(8)
Массивы бывают одномерные и многомерные:
А(9) - одномерный массив, состоящий из 10 элементов, С(2,3) - двумерный массив
Описание массива в программе:
Dim dat(cdate) As Date, где cdate-переменная
Элементы массива в VBA индексируются, начиная с нуля.
Dim Аt(9) As Integer размерность массива At - 10 элементов
0-базовый индекс, можно изменить базовый индекс, написав в области описания модуля инструкцию Option Base 1, после этого индексы массива At(9) будут нумероваться с единицы.
Dim A(0 To 20) As String -объявление массива A из 21 строки, индекс меняется от 0 до 21.
Dim В(1 To 10) As Double -объявление массива В из 10 вещественных чисел, индекс меняется от 1 до10.
Ввод массива в программу производят в операторе цикла:
например, дан одномерный массив X(10)
…
Dim X(1 to 10) AS Double
…
For i=1 to 10
X(i)=InputBox("введите массив х","массив Х")
Next i
…
Если дан двумерный массив С (4,5):
Dim C(1 to 4, 1to 5) AS Double
…
For i=1 to 4
For j =1 to 5
C(i, j)=InputBox("введите массив C(4,5)","двумерный массив C")
Next j
Next i
…
Удобным способом при отладке программы является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа Variant.
Для массива А(4) можно в программе ввести значения:
…
Dim A AS Variant
A= Array (10, 20, 30, 36)
…
Инициализация многомерного массива B(2,3):
…
Dim B AS Variant
B= Array(Array(10,20,30), Array(23,67,45))
MsgBox B(1,3)
…
Отобразится 45.
Вложенные циклы
Пример на вложенные циклы: вычислить функцию Y=Sin(x(i))z(j), где Х- массив, состоящий из трех элементов, а Z–из четырех.
Public Sub Массив3()
Dim X(1 To 3) As Double
Dim Z(1 To 4) As Double
Dim i As Integer, J As Integer
Dim Y As Double
For i = 1 To 3 ' первая строка цикла
X(i) = InputBox("элемент массива", "ввод массиваХ(3)")
Next i
For J = 1 To 4 ' первая строка цикла
Z(J) = InputBox("элемент массива", "ввод массиваZ(4)")
Next J
For i = 1 To 3
For J = 1 To 4
Y = Sin(X(i)) * Z(J)
MsgBox "y=" & Format(Y, "## #00.00"), vbOKOnly, "вывод чисел"
Next J
Next i
End Sub
Задание 3
Написать программу с вложенными циклами, используя оператор Array.
Программирование типовых алгоритмов
При решении задач различные участки вычислений могут содержать типовые вычисления. Наиболее часто встречающиеся алгоритмы это:
вычисление суммы и произведения;
запоминание результата.
Вычисление суммы и произведения.
При вычислении суммы используется прием накопления по выражению S=S+Y , где S накапливаемая сумма, Y-слагаемое. По данному выражению каждое новое выражение получается добавлением слагаемого к предыдущей сумме. Начальное значение суммы, как правило, равно 0 (S=0) ставится перед циклом.
Для накопления произведения необходимо перед циклом задать начальное значение произведения (Р=1),а внутри цикла накапливать произведение , используя оператор присваивания Р=Р*V, где V- сомножитель.
Составить программу для вычисления N!-факториала.
В программе показан прием накопления произведения:
Public Sub Факториал1()
Dim i As Integer
Dim Nf As Integer
Dim N As Integer
N = InputBox("введите N", "N")
Nf = 1
For i = 1 To N
Nf = Nf * i
Next i
MsgBox "Nf=" & Format(Nf, "## ###"), 0, "Факториал N"
End Sub
Задание 4
Для своего варианта из Таблицы №4 написать программу, получить результаты и показать преподавателю.
Провести пошаговое выполнение программы, нажатием клавиши F8.
Программы и результаты расчета внести в тетрадь работу защитить преподавателю.
Запоминание результата
Для запоминания значения одной переменной выделяется одно поле памяти. Для запоминания в ЭВМ всех вычисляемых элементов массива, необходимо описать вычисляемый массив, а результат вычислять как переменную с индексом.
Запоминание результата на предыдущем примере на вложенные циклы:
Public Sub Массив3()
Dim X(1 To 3) As Double
Dim Z(1 To 4) As Double
Dim Y(1 To 3,1 To 4) As Double
Dim I As Integer, J As Integer
For I = 1 To 3 ' первая строка цикла
X(I) = InputBox("элемент массива", "ввод массиваХ(3)")
Next I
For J = 1 To 4 ' первая строка цикла
Z(J) = InputBox("элемент массива", "ввод массиваZ(4)")
Next J
For I= 1 To 3
For J = 1 To 4
Y(I,J) = Sin(X(I)) * Z(J)
MsgBox "y=" & Format(Y(I,J), "## #00.00"), vbOKOnly, "вывод чисел"
Debug.Print"y=" & Format(Y(I,J), "## #00.00") 'вывод в окно отладки
Next J
Next I
End Sub
Задание 5
Используя программу Задание 4, запомнить в программе все промежуточные результаты.
Программы и результаты расчета внести в тетрадь, работу защитить преподавателю.
Контрольные вопросы
Что такое цикл?
Какие существуют в VBA операторы для организации циклов?
Что такое массив?
Как в программе запомнить результат?
Приемы организации суммы и произведения?
Как вводятся массивы в программу?
В каких случаях используются циклы с параметром, с предусловием и постусловием?
Как применяется функция Array?
Лабораторная работа №4 Подпрограммы. Передача данных из рабочих листов ехсеl в vba программу и обратно.
Цель работы:
программирования задач с использованием подпрограмм, овладение приемами передачи данных из рабочих листов ЕХСЕL в VBA программу и обратно.
Задание к работе
Получить у преподавателя свой вариант задания (Таблица№5).
Написать программу для расчета определенного интеграла методом прямоугольников считывая данные из листа EXCEL в VBA. программу и передать результаты расчета обратно в EXCEL.
Написать 2 программы для расчета определенного интеграла методом прямоугольников, используя подпрограмму Sub и Function.
Для процедуры, разработанной в задании 2, создайте на листе Excel командную кнопку. Проверьте запуск программы, используя кнопку.
Получить на ЭВМ результат.
Процедуры и функции.
В языке VBA процедура и функция описываются следующей конструкцией:
[Private | Public] [Static] Sub имя процедуры[(список Аргументов)]
[инструкции]
End Sub
[Public | Private] [Static] Function имя функции[(список Аргументов)] [As тип]
[инструкции]
[имя функции = выражение]
End Function
Чтобы вызвать процедуру Sub из другой процедуры, следует указать имя этой процедуры и значения для всех требуемых(фактических) аргументов. Для вызова подпрограммы можно использовать инструкцию [Call] имя [списокАргументов] .Использование инструкции Call не обязательно, однако если она все же используется, аргументы должны быть заключены в круглые скобки . Для передачи в процедуру полного массива следует воспользоваться именем массива с пустыми скобками.
Список фактических параметров включает входные и выходные параметры процедуры.
Входной параметр – это переменная, значение которой должно быть установлено до начала работы процедуры и которая участвует в работе процедуры.
Выходной параметр - это переменная, которая получает свое значение в результате работы процедуры(подпрограммы).
Прежде чем определить каждую процедуру (создать алгоритм и написать программный код)необходимо четко представлять, что процедура делает, что у нее на входе и что на выходе.
Задача: вычисление площади треугольника по формуле Герона.
Обозначим площадь_треугольника - как имя процедуры, оно строится по общим правилам имен переменных и должно быть уникальным, a, b, c - входные параметры, S - площадь(выходной параметр).
Список фактических параметров – это переменные, выражения или их значения, разделенные запятыми.
Вызов процедуры Sub:
CALL площадь_треугольника (а, а+2, с, s) или
площадь_треугольника а, а+2, с, s
Список формальных параметров - это переменные с их типами, которые играют роль входных и выходных параметров процедуры (подпрограммы).
Создание и применение функций
Функция отличается от процедуры тем, что у нее нет выходных параметров, результат работы функции присваивается имени функции. Вызов функции, как правило, происходит из выражения, функция возвращает в него свое значение.
Пример подпрограммы процедуры Sub:
Public Sub пример1под () 'пример подпрограммы Sub
Dim a As Double
Dim b As Double
Dim c As Double
Dim S As Double
a = InputBox("введите а", "a")
b = InputBox("введите b", "b")
c = InputBox("введите c", "c")
Call треуг(a, b, c, S) ' вызов подпрограммы Sub
MsgBox "S=" & Format(S, "### ###.00") & " при a= " & Format(a, "### ###.00") _
& " при b= " & Format(b, "### ###.00") & " при c= " & Format(c, "### ###.00"), 1
End Sub
Sub треуг(a As Double, b As Double, c As Double, S As Double)
pm = (a + b + c) / 2
If pm > a And pm > b And pm > c Then
S = Sqr(pm * (pm - a) * (pm - b) * (pm - c))
Else
MsgBox ("треуг.не сушествует")
End If
End Sub
Формальные и фактические параметры связаны между собой по месту,по типу и по количеству.
Пример подпрограммы функции Function:
Public Sub пример2под ()
Dim a As Double
Dim b As Double
Dim c As Double
Dim S As Double
a = InputBox("введите а", "a")
b = InputBox("введите b", "b")
c = InputBox("введите c", "c")
S = треугфунк(a, b, c) ' вызов подпрограммы функции из выражения
MsgBox "S=" & Format(S, "### ###.00") & " при a= " & Format(a, "### ###.00") _
& " при b= " & Format(b, "### ###.00") & " при c= " & Format(c, "### ###.00"), 0
End Sub
Public Function треугфунк(a As Double, b As Double, c As Double) As Double
pm = (a + b + c) / 2
If pm > a And pm > b And pm > c Then
S = Sqr(pm * (pm - a) * (pm - b) * (pm - c))
треугфунк = S
Else
MsgBox ("треуг.не сушествует")
End If
End Function
Передача данных из рабочих листов excel в vb программу и обратно.
Для присвоения объекта переменной, описанной как объект, применяется инструкция Set.
Set - объектнаяПеременная = объектноеВыражение.
Ключевое слово Set обязательно. В следующем примере инструкция Set присваивает диапазон на листе Лист1 объектной переменной myCell и через эту переменную форматируется ячейка A1:
Sub форматячейки()
Dim myCell As Range
Set myCell = Worksheets("Лист1").Range("A1")
With myCell.Font
.Bold = True
.Italic = True
End With
End Sub
В данном примере инструкция Set используется для присвоения переменным ссылок на объект.
В примере использована еще инструкция With End With.
Инструкция With позволяет выполнить последовательность инструкций над указанным объектом, не повторяя задание имени объекта. Например, если имеется несколько свойств, которые необходимо изменить для одиночного объекта, то удобнее поместить инструкции присвоения свойств внутрь управляющей структуры With, указав ссылку на объект один раз, вместо того, чтобы ссылаться на объект при каждом присвоении его свойств. Следующий пример демонстрирует использование инструкции With для присвоения значений нескольким свойствам одного объекта.
With MyLabel
.Height = 2000
.Width = 2000
.Caption = "Объект MyLabel"
End With
Для увеличения эффективности программы возможно создание вложенных инструкций With. В следующем примере в ячейку A1 вставляется формула, и затем форматируется шрифт.
Sub MyInput()
With Workbooks("Book1").Worksheets("Лист1").Cells(1, 1)
.Formula = "=SQRT(50)"
With .Font
.Name = "Arial"
.Bold = True
.Size = 8
End With
End With
End Sub
Передачу данных из рабочих листов EXCEL в VB программу можно сделать, явно обращаясь к элементам объекта (Рабочего листа EXCEL):
X= WorkSheets(“Данные”).Cells(4,6)
Или
X= WorkSheets(“Данные”). Range(“F4”)
Пример непосредственной записи результатов из программы в ячейки рабочего листа Результат:
WorkSheets(“Результат”).Range.(“C2”)=Y
WorkSheets(“Результат”).Cells.(13,3)=Z
С другой стороны, когда работают с массивами (Рабочего листа EXCEL):
Пример:
Sub DemoObject()
Dim Dan As Range
Dim Result As Range
Set Dan=WorkSheets(“Данные”).Range(Cells(2,4), Cells(10,12))
Set Result=WorkSheets(“Результат”).Range.(“A1:D20”)
…
End Sub
Данные пример демонстрирует следующее: объект Dan с помощью оператора Set связан с диапазоном ячеек D2:L10 рабочего листа «Данные», объект Result связан с диапазоном ячеек A1:D20 рабочего листа «Результат».В данном примере приведены два способа указания диапазона ячеек рабочего листа:c помощью численного задания адресов ячеек Range(Cells(2,4), Cells(10,12),а также с помощью явного указания адресов ячеек Range.(“A1:D20”).
Такое описание объектов Dan и Result очень удобно, т.к.можно обращаться к ячейкам рабочих листов EXCEL через элементы двухмерных массивов Dan и Result. Например, чтобы прочитать значение из ячейки F4 и передать переменной Х, достаточно написать в программе оператор:
X= Dan(4,6)
Чтобы передать результаты расчета программы в рабочий лист «Результат», достаточно заполнить элементы массива Result.
Задания для самостоятельной работы
Д
ля
вычисления определенного интеграла
используйте формулу прямоугольников:
a,b- пределы интегрирования;
f(xi)-функция в точках разбиения,
n - количество разбиений.
Из формулы следует, что необходимо использовать прием накопления суммы и оператор цикла For…Next.
Приделы интегрирования и количество разбиений считать с листа EXCEL .Значение интеграла вывести на лист EXCEL.
Контрольные вопросы
Чем отличается процедура Sub от Function?
Как задаются фактические параметры?
Какие параметры называются формальными?
Как вызывается процедура Function?
Как связаны формальные и фактические параметры?
Как вызывается процедура Sub?
Зачем нужен оператор Set?
С какой целью применяют оператор With?
Лабораторная работа№5 Создание пользовательских форм
Цель работы:
научиться создавать пользовательские формы, работать с элементами управления их свойствами, методами и событиями, создавать списки. Освоить построение графиков на форме.
Задание:
Разработать пользовательскую форму, представленную на Рис.1 для задачи определения площади треугольника по формуле Герона, радиуса вписанной и описанной окружностей других параметров. Программы на решение задачи и завершения работы связать их с соответствующими кнопками на форме.
Разработать пользовательскую форму для регистрации туристов. (Рис.2) Направление тура выбирать из поля со списком. При нажатии кнопки Регистрировать необходимо запустить созданную процедуру проверки текстовых полей на наличие информации и при Истине информацию о регистрации туристов необходимо занести в таблицу рабочего листа Excel.
Разработать пользовательскую форму (Рис.3).Программу, приведенную в приложении связать с соответствующими кнопками на форме.
Обеспечить перехват ошибок, при вводе информации в формы.
Задание 1
Для добавления формы в проект Insert/Forma. Выводится форма и панель инструментов Элементы управления.
На экране должны быть окно проекта View/Project Explorer и окно свойств View/ Properties Window.
При создании приложений для автоматизации работы пользователя используются Элементы управления, с помощью которых разрабатывается пользовательская форма для решения задачи.
Размещение элементов управления в форме: нажимается на кнопку требуемого элемента, а затем щелкается на любом месте формы. Далее элемент перетаскивается в нужное место формы. Элементы управления форматируются.
Рис.1
Задаются в окне свойств свойства объектов на форме , 2щ.м. на кнопке Решение, открывается модуль формы с заготовкой, в которой набирается программный код.
Запустить форму на выполнение –F5, получить результаты.
На листе создать кнопку для запуска формы с листа, используя ПИ Элементы управления, в режиме конструктора создайте на листе кнопку ,в свойствах дайте ей имя запуск ,отформатируйте кнопку и 2щ.м на кнопке ,открывается модуль листа, на котором была создана кнопка и в заготовку введите оператор UserForm1.Show. Метод Show выведет форму на лист. Для того, чтобы закрыть форму и очистить поля формы для кнопки Выход лучше использовать метод End.
Пример программы дан в Приложении 1.
Обеспечить перехват ошибок:
Перехват ошибок
Ввод в элементы формы неверной информации можно легко избежать, если производить в программе предварительную проверку, преобразуются ли вводимые данные, допустим в числа, используя функцию IsNumeric.
IsNumeric(TextBox1.Text)=False Then
MsgBox"введите правильно число",vbInformation,"a"
TextBox1.SetFocus
Exit Sub
End If
Метод SetFocus
Задание 2
Лист2 переименовать в меню и нарисовать 2 кнопки. Первую связать с программным кодом управляющим списком ComboBox (при загрузке формы список заполняется данными направления путешествия). Предварительно на листе Excel набрать туры.
Второй лист переименовать в Журнал_регистрации и вторую кнопку используйте для активации листа Excel Журнал_регистрации, используя метод Activate . Используя оператор Worksheets(“Журнал_регистрации”).Activate.
Создать форму Регистрация туристов (Рис.2) для заполнения полей базы данных, задать все её свойства в окне свойств.
Для заполнения списков ComboBox и ListBox, в VBAсуществует несколько способов:
Список создают на листе Excel и в свойстве RowSourse окна свойств устанавливается диапазон, содержащий элементы списка.
На событие инициализации формы (Initialize) написать программный код, считывающий информацию из справочного листа, туры записаны в столбец:
Private Sub UserForm_Initialize()
With ComboBox1
.Clear
For i=2 to 8
.AddItem WorkSheets("Справочник").Cells(I,1).Value
Next i
ListIndex=0
End With
End Sub
Создать кнопку на листе Справочник и список из 8 туров, и на событие Click , используя метод .AddItem написать программу, туры на листе для данного варианта программы записаны в строчку:
Private Sub CommandButton_Click()
With ListBox1
.Clear
For i=2 to 8
.AddItem WorkSheets("Справочник1").Cells(2,i).Value
Next i
.ListIndex=0
End With
End Sub
Рис.2
При нажатии кнопки Регистрировать в модуле появится заготовка, в нее набрать программный код (фрагменты которого приведены ниже), дополнить программу необходимыми операторами.
Необходимо запустить процедуру проверки текстовых полей на наличие информации и при положительном результате информацию о регистрации туриста занести в таблицу рабочего листа Excel.
Заголовки полей заполняемой базы данных по туристам задаются в программе:
№ |
Фамилия |
Имя |
Отчество |
Дата рождения |
Пол |
Паспортномер |
Паспорт серия |
телефон |
Пас-портсдан |
Фотосданыо |
Тур |
Оплачено |
Процедура Sub CommandButton_Click()
Dim фамилия As String*20
Dim имя As String*3
(описать все переменные)
…
'Номер первой пустой строки рабочего листа
номерстроки=Application.Counta(ActiveSheet.Columns(1))+1
'считывание информации из формы в переменные программы
With UserForm1
Фамилия=.TextBox1.Text
Имя==.TextBox2.Text
(записать для всех переменных)
If .OptionButton1.Value=True Then
пол="муж"
Else
пол="жен"
End if
…
If .CheckBox1.Value=True Then
оплачено="Да"
Else
оплачено="Нет"
End if
(Написать фрагмент для паспорта и фотографий)
ВыбранныйТур=СомbоBох1.List(.СомbоBох1.ListIndex,0)
'Вывод данных из формы в строку с номером
With
ActiveSheet
.Cells(номерстроки,1)= номерстроки
.Cells(номерстроки,2)= Фамилия
…
End With
end Sub
В модуле можно написать процедуру создание заголовков полей базы данных.
Sub заголовок_полейБД()
'Если заголовок существует, то выход из процедуры
If Range("A2").Value="Фамилия" Then
Range("A3").Select
Exit Sub
End If
'если заголовки не существуют, то задают заголовки полей
ActiveSheet.Cells.Clear
Range("A1:H1").Value=Array("№","Фамилия", "Имя", Пол", _ "ВыбранныйТур", "Оплачено","",""…)
Range("B:B").ColumWidth=12'ширина столбца
'Закрепление строки с заголовком, чтобы она отображалась на экране
Range("1:1").Select
ActiveWindow.FreezePanes=True
Range("A1").Select
End Sub
Для кнопки Отмена написать программный код, перейти в лист Excel с кнопкой Запуск и загрузить форму, набрать в ней все данные и зарегистрировать их на листе.
Показать преподавателю результаты работы.
Задание 3
Вставить новую форму и, спроектировать её, как показано на Рис.3. Функцию, для построения графика взять из лабораторной работы по циклам(свой вариант).
Для построения диаграммы(графика) в форме использовать метод ChartWizard.
ChartWizard (Sourse, Gallery, Format, Blotby, CategoryLabels, SeriesLabels, HasLegend, Title, CategoryTitle,ValueTitle, ExtraTitle)
Следует помнить, что программа и график должны находится в одной папке!
Рис.3
Изучить программный код и к кнопкам в форме привязать соответствующие им процедуры.
На листе Excel создать кнопку и связать с формой.
Private Sub CommandButton1_Click()
' Раздел описаний переменных
Dim RN As Double
Dim Rk As Double
Dim Rh As Double
Dim b1(100) As Double
Dim r1(100) As Double
Dim i As Integer
Dim K As Integer
Dim r As Double
Dim Элементысписка() As Variant' динамический массив
Dim b As Double
Dim L As Integer
RN = CDbl(TextBox1.Text)
Rk = CDbl(TextBox2.Text)
Rh = CDbl(TextBox3.Text)
K = Int((Rk - RN) / Rh) + 1
Worksheets("Лист1").Cells(1, 1).CurrentRegion.Clear
For i = 1 To K
r = RN + (i - 1) * Rh
b = r ^ 2 + Sqr((Abs(4 - r))) / r ^ 2' функция
Worksheets("Лист1").Cells(i + 1, 2) = b
b1(i) = b
b1(i) = Format(b1(i), "#0.0#")
Worksheets("Лист1").Cells(i + 1, 1) = r
r1(i) = r
r1(i) = Format(r1(i), "#0.0#")
Next i
ReDim Элементысписка(0 To K, 0 To 1)
For L = 1 To K
Элементысписка(L, 0) = r1(L)
Элементысписка(L, 1) = b1(L)
Next L
With ListBox1
.Clear
.ColumnCount = 2
.List = Элементысписка()
.ListIndex = 0
End With
'Worksheets("Лист1").ChartObject.Delete
End Sub
Private Sub CommandButton2_Click()
Me.Hide
End Sub
Private Sub CommandButton3_Click()
Dim area As Object
Dim n As Integer
'Set area = Worksheets("Лист1").Cells(1, 1).CurrentRegion
n = Worksheets("Лист1").Range("A1").CurrentRegion.Rows.Count
Worksheets("Лист1").ChartObjects.Add(190, 30, 200, 190).Select
' Построение графика
ActiveChart.ChartWizard Source := _
Range(Cells(1, 1), Cells(n, 2)), _
Gallery:=xlLine, Format:=4, _
PlotBy:=xlColumns, CategoryLabels:=1, _
SeriesLabels:=0, HasLegend:=False, _
Title: ="график", CategoryTitle:="x", _
ValueTitle:="Y"
'Запись диаграммы в файл
ActiveChart.Export FileName: ="С:\Мои документы \График.gif", Filter
Name:="GIF"
'Считывание диаграммы в форму
UserForm1.Image1.Picture = LoadPicture("C:\Мои документы\ График.gif ")
End Sub
Контрольные вопросы
Что такое приложение?
Что такое свойства объекта?
Как задаются свойства объекта?
Что такое метод?
Как заполнить списки и раскрывающиеся списки?
Как загрузить график в форму?
Что означает событие?
Создание динамических массивов?
Что характеризует свойство ListIndex?
Какие аргументы входят в метод ChartWizard?
Как экспортируется диаграмма в графический формаn?
Какие существуют свойства у объектов ListBox и ComboBox?
Что определяет свойство CurrentRegion?
Что означает свойство Name?
Что означает свойство Caption?
Какое свойство устанавливает порядок перехода по элементам формы?
Как создать подсказку к элементу управления?
Лабораторная работа №6 Работа с файлами последовательного и произвольного доступа
Цель работы:
овладение практическими навыками работы с файлами последовательного и произвольного доступа. Изучить функции при работе с файлами.
Задание:
Разработать программу для записи в файл произвольного и последовательного доступа массивов из задания Таблицы № 3.
Разработать программу для считывания массивов из файла и результаты расчета записать в файл последовательного доступа, используя Таблицу№3 лаб. работы по вложенным циклам.
Разработать программу для записи результатов расчета в файл произвольного (прямого) доступа, используя Таблицу№3 по вложенным циклам.
Разработать программу для считывания данных из файла любого доступа и просуммировать их и приписать к файлу.
Записать в файл последовательного доступа список студентов с оценками и заголовками полей.
Создать программу, которая считывает информацию из файла со списком студентов на лист Excel.
При работе с большим количеством данных удобно записывать данные в файл или считывать из файла. Инструкция Open позволяет напрямую создать файл и получить к нему доступ. Инструкция Open обеспечивает три типа доступа к файлам:
Последовательный доступ (режимы Input, Output и Append), обычно используемый для записи текстовых файлов, например протоколов ошибок или отчетов.
·Произвольный доступ (режим Random), используемый при необходимости считать и записать данные в файл без его закрытия. Файлы произвольного доступа содержат данные в виде записей, которые упрощают и ускоряют поиск нужных сведений.
Синтаксис
Open путь For режим [Access доступ] As [#] номерФайла [Len=длина]
Инструкция Open содержит следующие элементы:
Путь - Обязательный. Строковое выражение, указывающее имя файла; может содержать имя каталога или папки и имя диска.
режим - Обязательный. Ключевое слово, указывающее режим файла: Append, Input, Output или Random - По умолчанию, файл открывается для доступа в режиме Random.
Доступ - Необязательный. Ключевое слово, указывающее операции, разрешенные с открытым файлом: Read, Write или Read Write.
номерФайла Обязательный. Допустимый номер файла в интервале от 1 до 512 включительно. Для определения следующего свободного номера файла следует использовать функцию FreeFile.
длина Необязательный. Число, меньшее либо равное 32767 (байт). Для файлов, открытых в режиме Random, это значение является длиной записи. Для файлов с последовательным доступом это значение является числом буферизуемых символов.
Чтобы получить возможность выполнить любую операцию ввода/вывода, файл необходимо открыть. Инструкция Open резервирует буфер ввода/вывода для файла и определяет режим использования этого буфера.
Если аргумент путь описывает несуществующий файл, такой файл будет создан при открытии в режиме Append, Output или Random.
Если файл уже открыт другим процессом и указанный режим доступа не разрешен, инструкция Open не будет выполнена и возникнет ошибка.
Внимание! В режимах Input и Random можно еще раз открыть уже открытый файл под другим номером, не закрывая его. В режиме Append и Output необходимо закрыть файл, чтобы получить возможность открыть его еще раз под другим номером.
В следующей таблице показываются инструкции, обычно используемые для записи данных в файлы и для чтения данных из файлов.
Тип доступа Запись данных Чтение данных
Последовательный Print #, Write # Input #
Произвольный Put Get
В следующем примере показаны различные способы использования инструкции Open, чтобы разрешить выполнение операций ввода/вывода с файлом.
Следующие инструкции открывают файл TESTFILE для последовательного чтения.
Open "TESTFILE" For Input As #1
Закрывает файл перед повторным открытием в другом режиме.
Close #1
Следующие инструкции открывают файл для последовательного вывода.
Open "TESTFILE" For Output As #1
Закрывает файл перед повторным открытием в другом режиме.
Close #1
В следующем примере инструкция Write # используется для записи данных в последовательный файл .TESTFILE.
Sub Пример1()
Open "C:\TESTFILE1" For Output As #1 ' Открывает файл для записи.
Write #1, "Всем привет", 234 ' Записывает данные, разделенные запятой.
Write #1, ' Записывает пустую строку.
…
В следующем примере инструкция Print # используется для записи данных в файл.
Open "C:\TESTFILE" For Output As #1 ' Открывает файл для записи.
Print #1, "Пример" ' Печатает текст в файл.
Print #1, ' Печатает пустую строку в файл.
Print #1, "Зона 1"; Tab ; "Зона 2" ' Печатает в двух зонах печати.
Print #1, "Пример" ; " " ; "всем" ' Строки разделяются пробелом.
Print #1, Spc(5) ; "5 пробелов" ' Печатает пять пробелов.
Print #1, Tab(10) ; "Привет" ' Печатает слово в столбце 10.
Текстовый файл TESTFILE1 существует и содержит несколько строк текста, записанных с помощью инструкции Write #, т.е. каждая строка содержит заключенную в кавычки строку и отделенное от нее запятой число, например ("Привет", 234).Оператор Write предпочтительнее для записи в файл.
Инструкция Input # используется для чтения данных из файла TESTFILE в две переменные.
Sub Пример1()
Dim MyString,MyNumber
Open "TESTFILE" For Input As #1 ' Открывает файл для чтения.
Do While Not EOF(1) ' Цикл до конца файла.
Input #1, MyString, MyNumber ' Читает данные в две переменные.
Debug.Print MyString, MyNumber ' Выводит данные в окно отладки.
Loop
Close #1 ' Закрывает файл.
End
Запись в файл произвольного доступа:
Инструкция:
Put [#]номерФайла, [номерЗаписи], имяПеременной
Синтаксис инструкции Put содержит следующие элементы:
номерФайла Обязательный. Любой допустимый номер файла.
номерЗаписи Необязательный. Номер записи (режим Random) ,с которого следует начать запись.
имяПеременной Обязательный. Имя переменной, содержащей данные, которые следует записать в файл.
Данные, записанные с помощью инструкции Put, обычно считываются из файла с помощью инструкции Get.
Первой записи файла соответствует номер 1, второй 2 и т.п. Если аргумент номерЗаписи опущен, записывается запись, на которую указатель был установлен после выполнения последней инструкции Get или Put, или переведен с помощью функции Seek. Наличие запятых-разделителей является обязательным, например:
Put #4,,FileBuffer
Инструкция GET читает данные из открытого файла на диске в переменную.
Get [#]номерФайла, [номерЗаписи], имяПеременной
Синтаксис инструкции Get содержит следующие элементы:
НомерФайла Обязательный. Любой допустимый номер файла.
номерЗаписи Необязательный. Номер записи (для файлов в режиме Random) с которой следует начать чтение.
имяПеременной Обязательный. Допустимое имя переменной, в которую следует поместить считанные данные.
Пример процедуры создающей файл последовательного доступа.
Sub запись_в_файл ()
Open”C:\мой_файл1” For Output As #1
Write #1, ”Пример”; “использования”
· Write #1, ”инструкции ”;
· Write #1, ” Write”
x=1 ·
Write #1, ”число ”;x
Close #1
End Sub
Результатом будет файл следующего содержания:
“Пример”,” использования”
”инструкции ”,” Write”
”число ”,1
Разделители-запятые в файле размещаются автоматически, строковая информация берется в кавычки. Если инструкция заканчивается” ;” ,то в эту же строку выводятся данные следующей инструкции.
· В следующем примере представлена инструкция вывода данных из файла последовательного доступа.
В этом примере предполагается, что на диске существует файл ГруппаЭкономистов, содержащий информацию о студентах. Файл создан при помощи инструкции Write # и состоит из двух столбцов, в первом из которых указывается фамилия, а во втором –оценка студента Используем пользовательский тип данных Студенты. Данные выводятся в первый и второй столбцы рабочего листа Excel.
Type Студенты
Фамилия As String*20
Оценка As String*3
End Type
Sub ПримерИспользованияInput()
Dim Студент As Студенты
Open “C:\ГруппаЭкономистов” For Input As #2
i=1
Do While Not EOF(2)
With Студент
Input As #2, . Фамилия, . Оценка
Cells(i,1).Value=. Фамилия
Cells(i,2).Value= .Оценка
End With
I=i+1
Loop
Close #2
End Sub
Пример файла произвольного доступа ГруппаЭкономистов, который имеет ту же структуру, что и в предыдущем примере.
Type Студенты
Фамилия As String*20
Оценка As String*3
End Type
‘Sub ЗаписьВфайл()
Dim Студент As Студенты
Dim i As Integer
Open “ГруппаЭкономистов” For Random As #3 Len= Len(Студент)
For i=1 To 15
With Студент
. Фамилия =Cells(i,1).Value
.Оценка=Cells(i,1).Value
End With
Put #3,i, Студент
Next i
Close #3
End Sub
Программа считывания из файла.
Type Студенты
Фамилия As String*20
Оценка As String*3
End Type
Sub ' СчитываниеИзфайла()
Dim Студент As Студенты
Dim i As Integer
Dim n As Integer
Open “C:\ГруппаЭкономистов” For Random As #4 Len= Len(Студент)
n=LOF(4)/ Len(Студент)
For i=1 To n
Get #4,1, Студент
With Студент
Cells(i,1).Value=. Фамилия
Cells(i,1).Value= .Оценка
End With
Next i
Close #4
End Sub
Программы и результаты записать в тетрадь и защитить работу.
Контрольные вопросы
Типы файлов в VBA?
Как открываются и закрываются файлы?
Инструкции, используемые при вводе информации в файл последовательного доступа?
Инструкции, используемые при выводе данных из файла последовательного доступа?
Какие инструкции используются для ввода/вывода информации при работе с файлом произвольного доступа?
Какая функция определяет текущее положение указателя чтения/записи внутри файла?
Приложение
Таблица №1
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Таблица №2
-
Продолжение таблицы№2
Таблица №3
-
Z изменяется от 0.7 до 1.912,с шагом 0.3636
R изменяется от 0.26 до 1.82,с шагом 0.468
Rизменяется от 37.1 до 75.372,с шагом 7.36
R изменяется от 2.8 до 5.984,с шагом 0.3184
y изменяется от 2.65 до33.8,с шагом 3.115
y изменяется от 0.13 до 2.08,с шагом 0.39
y изменяется от 1.2 до 18.3,с шагом 1.71
R изменяется от 1.2 до 4.62,с шагом 0.171
M изменяется от 3.81 до 4.94,с шагом 0.113
M изменяется от 10.8 до 21.65,с шагом 0.434
X изменяется от 10.8 до 21.65,с шагом 0.434
Y изменяется от 10.8 до 21.65,с шагом 2.17
X изменяется от - 4.5 до -35.5,с шагом - 0.5x
X изменяется от 4.5 до 35.5,с шагом 0.5x
Таблица №4
-
n=7
m=5
I=1…8
J=1…6
n=7
m=8
n=9
m=12
m=7
n=7
n=7
m=5
n=4
m=6
I=1…5
J=1…8
n=5
m=6
I=1…4
J=1…7
n=6
m=5
n=5
m=5
n=3
m=3
n=6
m=4
Таблица №5
Литература
Гарнаев А.Ю.Самоучитель.VBA.-СПб. : БХВ-Петербург,2004.-560с.
Кузьменко В.Г.VBA 2000: -М.: «ЭАО Издательство Бином».2000.-408с.
