Практические задания по vba excel

МЕТОДИЧЕСКИЕ
УКАЗАНИЯ

к лабораторным
работам по дисциплине «Информатика» (Часть 2).

Лабораторная работа №17. VBA. Элементы управления.

Лабораторная работа №18.VBA. Линейная программа (оператор
присваивания)

Лабораторная работа №19.VBA. Условный оператор.

Лабораторная работа №20.VBA. Оператор выбора.

Лабораторная работа №21.VBA. Оператор цикла с параметром
(For…Next).

Лабораторная работа №22.VBA. Циклы с предусловием и
постусловием.

Лабораторная работа №23.VBA. Пользовательские функции.

Лабораторная работа №24.VBA. Пользовательские процедуры.

ЛАБОРАТОРНАЯ
РАБОТА №17

VBA.
ЭЛЕМЕНТЫ УПРАВЛЕНИЯ

Цель работы – ознакомиться с
интерфейсом
VBA, некоторыми его объектами, их свойствами и методами.

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

Доступ к данному языку программирования можно
осуществлять практически из любого приложения
Windows. Мы будем
работать вместе с
Microsoft Excel, который будет являться основным приложением
для проекта
VBA.

Редактор VBA активизируется командой Сервис,
Макрос, Редактор
Visual

Basic. Возвратиться из редактора VBA в
рабочую книгу можно нажатием кнопки Вид
Microsoft Excel. Интерфейс VBA состоит из следующих основных
компонентов: окно проекта, окно свойств, окно редактирования кода, окна форм,
меню и панели инструментов.

Окно проекта

Окно проекта в редакторе VBA
активизируется выбором команды Вид, окно проекта или нажатием
кнопки Окно проекта

 В окне проекта представлена иерархическая структура файлов форм и модулей
текущего проекта

В проекте автоматически
создается модуль для каждого рабочего листа и для всей книги. Кроме того,
модули создаются для каждой пользовательской формы макросов и классов. По
своему предназначению модули делятся на два типа- модули объектов и стандартные.
К стандартным модулям относятся те, которые содержат макросы. Такие модули добавляются
в проект командой Вставка Модуль. К модулям объектов относятся модули,
связанные с рабочей книгой, рабочими листами, формами, и модули класса.

Формы создаются командой Вставка,
UserForm, а модули класса — командой Вставка, Модуль класса. По
мере создания добавления и удаления файлов из проекта эти изменения отображаются
в окне проекта. Отметим, что удаление файла из окна проекта производится выбором
значка файла с последующим выполнением команды Файл, Удалить.

В окне проекта выводится проект всех открытых рабочих книг. Это
позволяет легко копировать формы и коды из одного проекта в другой, что
убыстряет процесс создания новых приложений.

Для создания диалоговых окон, разрабатываемых приложений в VBA, используются
формы. Редактор форм является одним из основных инструментов визуального
программирования. Форма в проект добавляется с помощью команды Вставка,
Форма
(
Insert, Form) или нажатием кнопки Вставить UserForm

В результате на экран
выводится незаполненная форма с панелью инструментов Панель элементов
(рис. 1).

Рисунок 1

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

1. Щелкните значок того элемента, который вы
собираетесь разместить в форме.

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

3. Нажмите левую кнопку мыши и, не отпуская
ее, растяните появившийся прямоугольник до требуемых размеров.

4. Отпустите кнопку мыши. Элемент управления
на нужном место создан.

Размеры формы и расположенных на ней элементов
управления можно изменять. Технология изменения размеров стандартная для
Windows:
выделить изменяемый элемент, разместить указатель мыши на одном из размерных
маркеров и протащить его при нажатой левой кнопки мыши так, чтобы объект принял
требуемые размеры. Окно редактирования форм поддерживает операции буфера
обмена. Таким образом, можно копировать, вырезать и вставлять элементы
управления, расположенные на поверхности формы.

Любой управляющий элемент, который вы разместили на
форме, обладает рядом свойств

Окно свойств

В окне свойств перечисляются основные установки
свойств выбранной формы или элемента управления. Используя это окно, можно
просматривать свойства и изменять их установки. Для просмотра свойств
выбранного объекта надо либо щелкнуть кнопку Окно свойств , либо выбрать
команду Вид, Окно свойств .

Окно свойств состоит из двух составных частей: верхней и рабочей. В
верхней части окна свойств располагается раскрывающийся список, из которого можно
выбрать любой элемент управления текущей формы или саму форму. Рабочая часть
состоит из двух вкладок: По алфавиту (
Alphabetic) и По
категориям
(
Categorized), отображающие набор свойств в алфавитном
порядке или по категориям. В обоих вкладках свойство
Name
(имя элемента управления) будет первым. Изменяются значения свойств одним из
следующих способов:

Ø   Вводом с клавиатуры значения свойства в
соответствующее поле.

Ø   Значения большинства свойств можно выбрать из
раскрывающегося списка. Раскрывающийся список активизируется щелчком в
соответствующем поле окна свойств.

ЗАДАНИЕ К ВЫПОЛНЕНИЮ

1.     
Расположите на форме
следующие элементы:

         
Label1;

         
TextBox1;

         
CommandButton1.

2.     
Активизируйте Label1, в
окне свойств найдите свойство Caption и измените Label1 на название вашего
факультета.

3.     
Те же действия произведите
с CommandButton1, изменяя Caption на  — «ок».

4.     
Активизируйте TextBox1 и
измените свойство Text, набрав абравиатуру своей группы.

5.     
С помощью элемента Выбор
объекта
выделите все элементы на форме. В окне свойств хорошо видно какие
свойства одинаковы для всех элементов. Изменяя свойства
Font
(полужирный, курсив, размер шрифта15),
BackColor (светлая тень для кнопки), Visible(False),
проследите все изменения элементов управления на форме.

6.     
Осуществить запуск
программы с помощью кнопки Запуск на панели инструментов или меню Запуск/
Запуск программы.

7.     
Вернуться в режим
конструктора
VBA для этого нажмите крестик на форме.

8.     
Выделите опять все
объекты и поменяйте только свойство
Visible (True) и снова произведите запуск программы .

9.     
Самостоятельно
изменяйте другие свойства элементов данной формы и пронаблюдайте их изменения.

ЛАБОРАТОРНАЯ РАБОТА N 18

VBA.
ЛИНЕЙНАЯ ПРОГРАММА

      Программа
(код программы) записывается в окне кода.

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

Под строкой заголовка окна расположены два списка. В первом списке
выводятся все объекты модуля, а во втором – список процедур, связанных с
выбранным объектом.

Код программы вводится непосредственно в окно кода,
так же как текст в любом текстовом редакторе.

       Код
программы может быть связан с формой —
UserForm-(программа пишется для соответствующей формы)
так и не связан с ней (пример программ на Паскале). В последнем случае
программу пишут в окне модуля.

        Для того,
чтобы получить окно модуля необходимо выполнить следующие действия:

       Вставка ®  Модуль

Чаще в VBA имеют дело с формой (UserForm).
Чтобы получить окно формы необходимо произвести такие действия:

      Вставка ®  UserForm

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

В проекте VBA часто требуется создать собственную форму. Например,
может понадобиться задать значения параметров перед выполнением некоторой
операции.

В VBA, формы можно создать самостоятельно. Форма  —
это тоже самое, что и любое диалоговое окно. Панель элементов позволяет разместить
ряд элементов управления в форме.

            Инструменты панели элементов

Допускается настройка панели элементов путем
добавления к ней страниц или элементов управления с помощью команды Дополнительные
элементы… из меню Сервис.

При добавлении страницы в нее автоматически вставляется инструмент
Выбор объектов.

 

Стандартные элементы управления
панели элементов:

    Выбор объектов

Это единственный инструмент на панели элементов, не создающий никаких
элементов управления. Он служит для изменения размеров и положения элементов
формы.

   Надпись

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

   Поле

Содержит вводимый и изменяемый пользователем текст.

   Поле со списком

Вставляет объект, являющийся сочетанием списка и поля. Пользователь
может либо выбрать нужное значение из списка, либо ввести его в поле.

   Список

Вставляет список выбираемых пользователем элементов. Допускается
прокручивание списка, если не все его элементы видны одновременно.

   Флажок

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

    Переключатель

Используется для предоставления выбора одного варианта из многих.

   Выключатель

Создает кнопку, имеющую два состояния: включено и выключено.

   Группа

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

   Кнопка

Создает кнопку, при нажатии которой выполняется команда.

   Набор вкладок

Позволяет создать несколько станиц в одной и той же
области окна или окна диалога.

   MultiPage

Служит для представления нескольких экранов информации в виде единого
набора.

   Полоса прокрутки

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

   SpinButton

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

   Рисунок

Отображает в форме точечный рисунок, значок или метафайл.

После размещения элементов управления на форме необходимо связать
объект на форме с кодом.

В VBA очень
просто связать объект с кодом. Для выполнения данной операции:

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

2.     
Вызвать контекстное меню
необходимого объекта правой клавишей мыши и нажать поле Программа.

Решение любой  задачи  имеет три части:

1.     
Ввод данных

2.     
Обработка данных

3.     
Вывод результата

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

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

Вывод результата – это код программы, который позволяет
отобразить полученный результат в необходимом виде: на экране (лист
excel,
форма), на принтере и т.д.

Сохранение  программы

1)     
Если программу сохраняется
первый раз или вас устраивает уже существующее имя, то сохранять можно как в
VBA, так
и в
Excel;

2)     
Если вас не устраивает уже
существующее имя, то сохранять необходимо таким образом: выйти в
Excel,
выбрать пункт меню Файл, а в нем пункт — Сохранить как.

Решим
задачу: найдем сумму а + в = с

Порядок
выполнения работы:

1.     
Выполнить команду СЕРВИС /МАКРОС/РЕДАКТОР VBA

2.     
Выполнить команду ВСТАВКА/USER FORM

3.     
Поместить на форму элементы, требуемые для решения
задачи, с панели элементов, и расположить их нужным образом.

4.     
Изменить свойства объектов на форме c помощью окна свойств.

Свойство

Значение

Label1.Caption

A

Label2.Caption

В

Label3.Caption

С

СоmmandButton1

Результат

CheckBox1.Caption

Очистка окон

Для всех объектов
свойство

                 .BackColor

По своему вкусу
выбрать цвет

Из палитры цветов

 Для Label1,
Label2 ,Label3

Свойство

                      
   
Font

В диалоговом окне
“Шрифт”, которое появится после щелчка по Кнопке с изображением трех маленьких
точек, расположенной напротив свойства
Font в окне
свойств, выбрать размер  16

5.     
Написать программный код. Для этого рекомендуется
выполнить двойной щелчок по кнопке результат и перейти в окно программы,
где набрать текст процедуры обработки события
Click() для
кнопки и для флажка(
CheckBox1):

Private Sub
CheckBox1_Click()

TextBox1.Text =
«»

TextBox2.Text =
«»

TextBox3.Text =
«»

TextBox3.Visible =
False

TextBox1.SetFocus

CheckBox1.Value =
False

End Sub

Private Sub
CommandButton1_Click()

Dim a As Integer

Dim b As Integer

Dim c As Integer

a =
CInt(TextBox1.Text)

b =
CInt(TextBox2.Text)

c = a + b

MsgBox «результат смотри в TextBox3″

TextBox3.Visible =
True

TextBox3.Text = c

End Sub

Пояснения к
программе:

1) Dim а As
Integer

Эта
инструкция описывает переменные как
Integer — целые числа
от -32768 и до 32767. При попытке присвоить а число, выходящее за пределы этого
диапазона, возникает ошибка. При присваивании а дробного числа, выполняется
округление.

Инструкция
Dim — Описывает переменные и выделяет для них
память.

2) CInt — функция преобразования типов данных (преобразовывает выражение в
скобках к типу
Integer).

Синтаксис
CInt(выражение)

3) c=a+b

  
Оператор присваивания ( = )-вычисляется значение выражения, стоящего справа от
знака присваивания, и присваивается переменной, стоящей слева от знака присваивания.

4) MsgBox «результат смотри в TextBox3″

  
Появляется на экране окно сообщений
MsgBox, в котором отображается
сообщение, записанное в кавычках, и выполнение программы останавливается до тех
пор пока не будет нажата кнопка «
OK«.

5)
TextBox3.Text = c

  
Результат выполнения программы (с) выводится на форму в
TextBox3

6) TextBox1.Text =
«», TextBox2.Text = «», TextBox3.Text = «»

   Производится
очистка полей
TextBox1, TextBox2, TextBox3.

7) TextBox1.SetFocus

  
Устанавливается фокус (курсор) в
TextBox1.

8)
CheckBox1.Value = False

  
Исчезает галочка у флажка
CheckBox1.

Блок-схема
к программе

                         ЗАДАНИЯ ДЛЯ ВЫПОЛНЕНИЯ

1.      f(x,y¸z) = (x^2-y^2)/(1+z+x^2).

2.     
2.f(x,y,z) = (x+y+z)/(x^2+y^2+z^2).

3.     
f(x,y)=x./(1+y)+y/(1+x)+1/(x+y).

4.     
f(x,y,z)=(x+y+z)/(x*y*z).

5.      f(a,b,c,x)=a*x^2+b*x+c.

6.     
Вычисления процентного
отношения двух чисел (сколько процентов составляет величина первого от величины
второго).

7.     
Вычисления дискриминанта
квадратного уравнения.

8.     
f(x,y)=(x+y)(x^2+y^2)(x^3+y^3).

9.     
f(x,y,z)=(x*y*z)/(x+y^2+z^3).

10. 
f(x,y,z)=x/(y+z)+y/(x+z)+z/(x+y).

11. 
f(x,y,z)=(x+1)/y/z+sin(z)/y/x+1n(y)/x/z.

12. 
f(x,y,z)=x^3+y^4+z^5.

13. 
f(x,y,z)=x*y/z+y*z/x+z*x/y.

14. 
f(x,y,z)=(x^3+1)/(y+z^2)

15. 
f(x,y)=(x^2+y^2)/(5*x*y)

16. 
f(x,y)=3*(x+y)/x*(x+y)

Лабораторная работа N19

VBA.
УСЛОВНЫЙ ОПЕРАТОР

Цель работы:
научиться разрабатывать алгоритмы и программы разветвляющейся структуры  с
условным оператором 
IF . Познакомиться с некоторыми объектами VBA и с
их свойствами

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ:

1.В  схемах алгоритмов выбор
условия обозначается с помощью символа,

от
которого отходит ветвление для указания дальнейших действий в зависимости от
выбора  “ДА” или “НЕТ”.Выбор хода алгоритма , как правило ,зависит от значения
переменной или выражения, состояния объекта. Например,

Блок-схема: решение: А< 10                                                                    

                                                                                   
НЕТ

                                                                                                         …

                                                                    

ДА

                                                                 
….

2.В программном коде,
чтобы реализовать ветвление применяется условный оператор
IF THEN

Условный оператор позволяет выбирать и выполнять действия в зависимости
от истинности некоторого условия. Имеется два варианта синтаксиса: В первом
случае он имеет вид:

               
IF <условие> Then [операторы 1] [Else [операторы 2]]

Во втором случае
оператор расположен на нескольких строках:

              
IF <условие> Then

                                          
[операторы]

                   
[ElseIf <условие – n> Then

                          
                
[операторы-n ]…

                      
[
Else]

                         
[ИначеОператоры]]

               
End If

Здесь условие обязательно в обоих вариантах. Оно может быть
числовым или строковым выражением со значениями
TRUE или FALSE. Операторы 1 и операторы 2 это последовательности из одного
или нескольких разделенных двоеточием операторов. По крайней мере одна из этих
последовательностей должна быть непустой. Если условие истинно (
TRUE), выполняется последовательность 
«операторы 1», если ложно, “операторы 2”.

Пример записи оператора:

‘Условный оператор в виде одной строки:

IF
A>10 Then A=A+1: B=B+A: C=C+B ELSE C=A*B: A=C+2

‘тот же условный оператор в виде блока:

IF
A>10 Then

                 A=A+1 :   B=B+A : C=C+B

               ELSE

                 C=A*B: A=C+2

End If

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРА
УСЛОВИЯ

Пример1.

Если точка М(x1,y1)
лежит:

·        
выше прямой y=kx+b, то
выдать сообщение “Точка М лежит выше прямой”;

·        
ниже прямой, то выдать
сообщение “Точка М лежит ниже прямой”;

·        
на прямой, то выдать
сообщение “Точка М лежит на прямой”.

                        Решение
задачи.

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

2 этап. Нарисовать на бумаге интерфейс приложения,
т.е. как будет выглядеть экран при решении задачи на компьютере.

                        Рис.Интерфейс
приложения

3 этап. Определить ход решения задачи и составить
алгоритм программы. В нашей задаче, чтобы определить положение точки
относительно прямой, нужно подставить координату точки
X1 в
уравнение прямой и сравнить полученное значение
Y c координатой точки Y1. Если
значение
Y=Y1, точка лежит на прямой; если полученное
значение
Y >Y1, точка –ниже прямой, и ,наконец, если Y<Y1,
точка – выше прямой.

       СХЕМА
АЛГОРИТМА ПРОГРАММЫ (См. ниже)

4 этап. Загрузить редактор VBA и
разработать приложение.

ПОРЯДОК ВЫПОЛНЕНИЯ
РАБОТЫ:

4.     
Выполнить команду СЕРВИС /МАКРОС/РЕДАКТОР VBA

5.     
Выполнить команду ВСТАВКА/USER FORM

6.     
Поместить на форму элементы с панели элементов и
расположить их нужным образом. Требуемые элементы:

4
элемента
Label (текст)

4
элемента
TextBox (поле ввода)

2
элемента
CommandButton(кнопка)

1
элемент
CheckBox(флажок)

Выноска 2: Элемент для созда-ния неизменяемого текста на форме .

Выноска 2: Элемент для создания
кнопки 
Выноска 2: Элемент для со-здания
Флажка( имеет состо-яние вкл-выкл)
Выноска 2: Элемент для создания
Поля ввода данных

4.Изменить
свойства объектов на форме
c помощью окна свойств
следующим образом

Свойство

Значение

Label1.Caption

Точка M(

Label2.Caption

)

Label3.Caption

Прямая y =

Label4.Caption

X +

UserForm1.Caption

Принадлежность точки
прямой

TextBox1.Text

X1

TextBox2.Text

Y1

TextBox3.Text

K

TextBox1.Text

B

СоmmandButton1

СТАРТ

СоmmandButton2

ВЫХОД

CheckBox1.Caption

Очистка полей ввода

Для всех объектов
свойство

                 .BackColor

По своему вкусу
выбрать цвет

Из палитры цветов

 Для Label1, Label2 ,Label3

Label4, TextBox1, TextBox2,

TextBox3, TextBox4 свойство

                    .Font

В диалоговом окне
“Шрифт”, которое появится после щелчка по Кнопке с изображением трех маленьких
точек, расположенной напротив свойства
Font в окне
свойств, выбрать размер  16

Рекомендуется сопоставить рисунки “Интерфес приложения” и
“Окно формы, чтобы сделать вывод о назначении использованных свойств объектов”.

5
этап.
Написать программный код. Для этого
рекомендуется выполнить двойной щелчок по кнопке СТАРТ и перейти в окно
программы, где набрать текст процедуры обработки события
Click() для кнопки:

Private Sub
CommandButton1_Click()

 Dim x1, y1, k, b
As Integer

 x1 =
CInt(TextBox1.Text)

 y1 =
CInt(TextBox2.Text)

 k =
CInt(TextBox3.Text)

 b =
CInt(TextBox4.Text)

 y = k * x1 + b

 If y = y1 Then

                   MsgBox «Точка лежит на прямой»

      
ElseIf y > y1 Then

                   
MsgBox «Точка лежит ниже прямой»

             
Else

                
MsgBox «Точка лежит выше прямой»

 End
If

 CheckBox1.Value =
False

End Sub

   В этой процедуре условный
оператор
If встречается дважды:

в первом случае –
однострочный, во втором- в виде блочной структуры, завершающейся обязательно
End
If.

   Аналогичным образом
создаем процедуру для кнопки ВЫХОД:

Private Sub CommandButton2_Click()

 Unload UserForm1

End Sub

   И для объкта Флажок:

Private Sub CheckBox1_Click()

 CheckBox1.Value = True

 TextBox1.Text = «»

 TextBox2.Text = «»

 TextBox3.Text = «»

 TextBox4.Text = «»

 TextBox1.SetFocus

 CheckBox1.Value = False

End Sub

                                Пример2.

Ввести Х, вычислить F
по формуле:

    

                 X/2,
если Х>0

F=        
(X+1)/2, если Х<0

Рис. Интерфейс приложения

Код программы:

Private Sub CommandButton1_Click()

  Dim x, F As Single

  x = TextBox1.Value

  If x = 0 Then MsgBox «Функция
не определена»,  vbCritical, _

               «Расчет
функции»

  If x > 0 Then F = x / 2  Else F = (x + 1) / 2

  TextBox2.Value = F

End Sub

Private Sub CommandButton2_Click()

 Unload Me

End Sub

Выполнения самостоятельного задания.

1.Выбрать для решения
одну из задач

2.Нарисовать интерфейс
приложения.

3.Разработать схему
алгоритма.

4. В редакторе VBA разработать приложение.

5.Выполнить приложение
и подготовить отчет.

Содержание отчета.

1.                                                                         
Условие задачи

2.                                                                         
Интерфейс приложения

3.                                                                         
Схема алгоритма

4.                                                                         
Программный код

5.                                                                         
Использованные операторы и функции

КОНТРОЛЬНЫЕ
ВОПРОСЫ

1. Что такое разветвляющаяся структура алгоритма?

2.Какой символ используется в схемах алгоритмов, чтобы
показать выбор условия?

3.С помощью какого оператора можно организовать
ветвление в программе? Написать
cинтаксис этого
оператора для однострочной формы записи

4.Чем отличается блочная форма записи условного
оператора от однострочной? Написать синтаксис условного оператора в блочной
форме или привести пример его использования.

6.                                                                             
Назвать известные вам элементы ActiveX, используемые при разработке приложений VBA. Какие элементы и какие свойства  этих элементов были использованы в
вашей программе?

ЗАДАНИЯ К ВЫПОЛНЕНИЮ:

                                                    
I

1.Вычислить значение функции:

_                             0,
если х=0,

              f(x)
=     квадрат х, если х <>0.

2.Вычислить значение функции:

_                           
sin(x), если х>0,

                f(x)
=   0, если х = 0,

                            
сos(x), если х< 0.

3.Ввести
три целых числа и определить, сумма каких двух является наибольшей.

4. Вычислить значение
функции:

                             
sin(x), если х>0,

              f    =

                             
0, если х< = 0,

5. Вычислить значение
функции:

                        

_                             
tg(x), если х=0,

              f    =

                             
tg(x)/2, если х< = 0,

6. Вычислить значение
функции:

                        

_                             
√x, если х=0,

              f    =

                             
tg(x)/2, если х< = 0

                                               
II

 1.Ввести число Х и
определить, делится ли оно:

1)     
на 2,

2)     
на3,

3)     
на 5.

4)     
На 8   

2.     
Ввести число Х и определить, является ли оно
четным.

3.     
Ввести число N и определить
делится ли оно без остатка на число 
M.

2 часть.
Программирование с использованием объектов
EXCEL.

            Разрабатывать
приложения в редакторе
VBA можно и с использованием
объктов приложений
Office(объктов EXCEL,WORD и др.) Рассмотрим разработку приложения
примера2 с использованием объектов
EXCEL. Будем
использовать объекты:

·        
WORKSHEETS() –для обозначения листа EXCEL

·        
RANGE() – для обозначения диапазона ячеек или одной
ячейки

·        
свойство .Value для обращения
к значению ячейки.

Т.е.,
если мы хотим записать в ячейку значение
F программным
способом, нужно написать в программе так:

Worksheets().Range().Value
= F,
где в скобках указать имя или номер листа EXCEL и адрес ячейки. Например, чтобы :

Присвоить ячейке С1

На листе “лист1” значение
переменной
F

Нужно написать

Worksheets(“лист1”).Range(“C1”).Value = F

Изменить значение в
ячейке
A1 на листе “лист1”

WorkSheets(“лист1”).Range(“A1”).Value=3

Установить формулу
для ячейки
B1 на активном листе

Range(“B1”).Formula = “= — 5 + A1”

ПОРЯДОК ВЫПОЛНЕНИЯ
РАБОТЫ:

1.     
В Ячейку А1 ввести текст « Исходные данные»

2.     
В ячейку А2 ввести текст «Х=»

3.     
В ячейку В2 ввести значение Х.

4.     
В ячейку C1 ввести текст «результат при х>0»

5.     
В ячейку D1 ввести текст «
результат при х<0»

6.     
Выполнить команду СЕРВИС /МАКРОС/РЕДАКТОР VBA

7.     
Выполнить команду ВСТАВКА/МОДУЛЬ

8.     
Ввести имя модуля SUB LL()

9.     
Набрать текст  программы:

Sub LL ()

 
X=Worksheets(1).Range(“B2”).Value

  IF Х>0
Then                                                                                                    

                   F=X/2

                  
Worksheets(1).Range(“C2”).Value = F

                Else

                  
F=(X+1)/2

                  
Worksheets(1).Range(“D2”).Value = F

  End If

             End
Sub  

10. Выполнить программу и подготовить отчет. Содержание отчета указано
в первой части работы

11.Решить одну из
задач самостоятельно.

Контрольные вопросы.

1.Какие объекты
Е
xcel вы знаете?

2.Как обратиться
к ячейке на рабочем листе из программы?

3.Какая форма
записи условного оператора была использована в вашей программе?

Лабораторная работа №20

VBA. ОПЕРАТОР ВЫБОРА.

Цель:
Познакомиться с инструкцией
With и Select Case. И  закрепить полученные знания на практике.

    Как известно,
многие задачи в математике можно разрешить различными способами. В программировании
также путь к решению задачи можно найти по-разному. Например, когда в условии
задачи часто используется постановка вопроса начиная с если, то в коде
программы мы реализуем оператор условия If…Then…Else ., причем
ограничения на вложенность этого оператора нет. Если таковых вложенных условий
два, три и даже пять, то это не сильно смущает программиста, т.к. программа
вполне наглядна и «читаема». Но что делать, когда таких условий десять,
пятнадцать? В этом случае для облегчения чтения программы вместо многократно вложенных
инструкций If…Then…Else иногда предпочтительнее использовать
инструкцию Select Case. В то время как If…Then…Else для каждой
инструкции ElseIf  оценивает разные выражения, инструкция Select Case оценивает
выражение только один раз, в начале управляющей структуры.

 Select Case  выполняет одну из нескольких групп инструкций в зависимости от
значения выражения.

    Синтаксис: Select Case <выражение>

                            [Case <списокВыражений-n>

                                    [инструкции-n]]

                           
[Case Else

                                 
[
инструкции_else]]

                          
End Select

    
Синтаксис инструкции Select
Case
содержит следующие элементы:

<выражение>oбязательный.  Любое числовое выражение или
строковое выражение.

<списокВыражений-n>oбязательный при наличии предложения Case. 
Список с разделителями, состоящий из одной или нескольких форм следующего вида:

         
выражение,

         
выражение To
выражение
,

         
 Is
операторСравнения выражение.

Ключевое слово To задает диапазон значений.  При использовании
ключевого слова To перед ним должно находиться меньшее значение. 
Ключевое слово Is с операторами сравнения (кроме Is и Like)
задает диапазон значений.  Если ключевое слово Is не указано, оно
вставляется по умолчанию.

<инструкции-n> — Необязательный.  Одна или несколько инструкций,
выполняемых в том случае, если выражение совпадает с любым компонентом списка
<списокВыражений-n>.

<инструкции_else >- Необязательный.  Одна или несколько инструкций,
выполняемых в том случае, если выражение не совпадает не совпадает ни с одним
из предложений Case.

      Если выражение совпадает с любым выражением из спискаВыражений
в предложении Case, выполняются все инструкции, следующие за данным
предложением Case до следующего предложения Case, или, для
последнего предложения, до инструкции End Select.  Затем управление
передается инструкции, следующей за End Select.  Если выражение
совпадает с выражениями из списка в нескольких предложениях Case,
выполняется только первый подходящий набор инструкций.

             Предложение Case Else задает список инструкции_else,
которые будут выполнены, если не обнаружено ни одно совпадение выражения и
компонента списокВыражений ни в одном из остальных предложений Case
Хотя данное предложение не является обязательным, рекомендуется помещать
предложение Case Else в блок Select Case, чтобы предусмотреть
неожиданные значения выражения. Если ни в одном предложении Case
списокВыражений
не содержит компонента, отвечающего аргументу выражение, и
отсутствует инструкция Case Else, выполнение продолжается с инструкции,
следующей за инструкцией End Select.

        В каждом предложении Case допускается использование
нескольких выражений или диапазонов.  Например допустима следующая строка:

Case 1 To 4, 7 To 9, 11, 13, Is >
MaxNumber

Примечание.   Следует отличать оператор сравнения Is от ключевого слова Is,
используемого в инструкции Select Case.

           Имеется также возможность задать диапазоны или несколько
выражений для строковых значений.  В следующем примере предложение Case
выполняется для строк, которые точно совпадают со строкой «все», для
строк, лежащих в алфавитном порядке между «орехи» и «яблоки»,
и для строк со значением, равных текущему значению переменной TestItem:

            Case «все«, «орехи» To «яблоки«,
TestItem

       
Допускаются вложенные инструкции Select
Case
.  Каждой вложенной инструкции Select Case должна
соответствовать инструкция End Select.

    Пр.: по введенному числу определить день недели

        Select Case x

           
Case 1

              
MsgBox
(«Пон-ник»)

 Case 2

              
MsgBox («Вторник»)

Case 3

              
MsgBox («Среда»)

Case 4

              
MsgBox («Четверг»)

Case 5

            
  MsgBox («
Пятница«)

Case 6

              
MsgBox («Суббота»)

Case 7

              
MsgBox («
Воскресенье«)

         
Case
Else

               MsgBox («Такого дня не существует»)

        End Select

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

Label1.Height
= 2000

Label1.Width
= 2000

Label1.Caption
= «
Объект Label1″

Label1.Visible
= True

Label1.Enabled
=True

Во избежании этого и существует инструкция WhithEnd With . WhithEnd With — выполняет последовательность инструкций над
одиночным объектом или определяемым пользователем типом данных.

Синтаксис

      With <объект>

         [инструкции]

End With

Синтаксис инструкции With содержит следующие элементы:

Элемент      Описание

объект
Обязательный.  Имя объекта или определяемого пользователем типа.

инструкции   — Необязательный.  Одна или несколько инструкций, выполняемых над
объектом.

Инструкция With позволяет выполнить последовательность
инструкций над указанным объектом, не повторяя задание имени объекта. 
Например, если имеется несколько свойств , которые необходимо изменить для
одиночного объекта, то удобнее поместить инструкции присвоения свойств внутрь
управляющей структуры With, указав ссылку на объект один раз, вместо
того, чтобы ссылаться на объект при каждом присвоении его свойств.  Следующий
пример демонстрирует использование инструкции With для присвоения
значений нескольким свойствам одного объекта.

With Label1

            .Height
= 2000

            .Width
= 2000

            .Caption
= «
Объект Label1″

          
.Visible = True

          
.Enabled =True

End
With

Примечание.   После
входа в блок With значение аргумента объект изменить невозможно.  В
результате, невозможно использование одной инструкции With для
воздействия на различные объекты.

Допускается создание вложенных конструкций With внутри другого.
Однако, поскольку ссылки на объекты внешних блоков With перекрываются во
внутренних блоках, необходимо во внутренних блоках With задавать полные
ссылки на любой компонент объекта из внешнего блока With.

Внимание!   Нельзя выполнять переходы внутрь или из блоков With. Если не
выполнены инструкции  With или End With, возможно возникновение
ошибок или непредсказуемое поведение объектов.

Пример

В данном примере инструкция With используется для выполнения набора
инструкций над одним объектом.  Объект MyObject и его свойства используются
исключительно в иллюстративных целях.

With
MyObject

            .Height
= 100              ‘
Эквивалентно MyObject.Height = 100.

            .Caption
= «
Привет»  ‘ Эквивалентно MyObject.Caption = «Привет«.

            With
.Font

                        .Color
= Red               ‘
Эквивалентно MyObject.Font.Color = Red.

                        .Bold
= True                ‘
Эквивалентно MyObject.Font.Bold = True.

            End
With

End With

                  Задания для выполнения

     Результат выводить на форму в поле, при этом
размерами его управлять программно в зависимости от результата.

1.     
По введенному числу
определить пору года: 1 — зима и т.д.

2.     
По введенному числу
определить месяц зимы: 1 — декабрь, …

3.     
По введенному числу
определить месяц весны: 1 — март, …

4.     
По введенному числу
определить месяц лета: 1 — июнь, …

5.     
По введенному числу
определить месяц осени: 1 — сентябрь, …

6.     
По введенному числу
определить день недели: 1 — понедельник, …

7.     
По введенному числу
определить областной город Беларусии: 1 — Брест, …

8.     
По введенному числу
определить государственный ВУЗ Могилева.

9.     
По введенному числу
озвучить оценку:»5″ — отлично, …

  Контрольные вопросы.

1.     
Каков принцип работы
инструкции Select Case, особенности применения.

2.     
Когда и как рекомендуется
использовать инструкцию
With…End With .

 

Лабораторная работа№21

VBA. ЦИКЛ С ПАРАМЕТРОМ (ForNext)

КРАТКИЕ
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ.

1.     
Цикл
For.

         Оператор
цикла
For позволяет повторять группу операторов
заданное число раз. Синтаксис:

         For счётчик_цикла =начало TO
конец [
step шаг]

            Тело цикла

Next [счётчик_цикла]

Здесь счётчик_цикла—это числовая переменная. В
начале выполнения цикла она принимает значение, задаваемое числовым выражением начало.
Числовое выражение конец—— задает заключительное выражение
счётчика цикла. Числовое выражение шаг не обязательно и по умолчанию=1. Тело
цикла
— это последовательность операторов которая будет выполнена
заданное число раз. Если шаг положителен, цикл завершится, когда впервые выполнится 
условие:

счетчик_цикла>конец

Если шаг цикла отрицателен, условие его завершения:

счетчик_цикла<конец

Это условие проверяется перед началом выполнения цикла, а
затем—после каждого прибавления шага к счётчику цикла в операторе
Next. Если оно выполнено, управление передается
на оператор, следующий за
Next,
нет—выполняются операторы из тела цикла. Завершить цикл
ForNext можно и с помощью оператора Exit For. Такие операторы могут быть
расположены в тех местах тела цикла, где требуется из него выйти не дожидаясь
выполнения условия завершения.

ПРИМЕР ИСПОЛЬЗОВАНИЯ
ОПЕРАТОРА:

УСЛОВИЕ:

         Вычислить значение функции:

Надпись:       n
Y= SlnX/2n
       1  
  , где n=1,2,…,5

СХЕМА АЛГОРИТМА ПРОГРММЫ

ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:

1.     
Заполнить
диапазон ячеек А1:А5 значениями Х.

2.     
Текст
программы:

Sub mm ()

  N=5
: Y=0

  For i=1 to n

   X=Worksheets(1).Cells(i,1)

   Y=Y+log(x)/2^i

  Next i

  Worksheets(1).Range (“A6”).Value = ”результат

  Worksheets(1).Range (“A7”).Value = Y

End Sub

2.Массивы.

a)     
Описание
массивов

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

  Пр:  Dim A(1 To 10) As Integer — массив состоит из 10
элементов, тип каждого элемента —
Integer.

 б) Обращение к элементу массива

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

  Пр:  A(1)=5 — первому элементу массива А присваивается значение 5

          А(17)=А(1) — 17-ому элементу массива А присваивается
значение первого элемента массива А.

в) Ввод массивов

       Массивы можно вводить как с листа Excel, так и испрользуя встроенную функцию
InputBox.

  Пр: вводятся массивы А,В,С из 15 элементов:

       For i=1 To 15

         ‘ Ввод массива A с листа Excel, используя свойство Range (элементы вводятся из столбца А,
строки изменяютя с 1 по 15.

         A(i)=Worksheets(1).Range(«A» & i).Value

         ‘ Ввод массива B с листа Excel, используя свойство Cells (строки изменяются с 1 по 15,
столбец 2 (столбец
B)

         B(i)=Worksheets(1).Cells(i,2)

         ‘ Ввод массива C через функциюInputBox

         C(i)=InputBox(«Введите » & i & «ый элемент массива»)

       Next i

г) Решение задачи из примера через массивы

1. Заполнить диапазон ячеек А1:А5 значениями элементов
массива.

                    
2. Текст программы:

        Sub mm ()

           Dim A(1 to 5) As Integer

           N=5

           Y=0

           For i=1 to n

             A(i)=Worksheets(1).Cells(i,1)

           Next i

           For i=1 To n

              Y=Y+log(A(i))/2^i

          Next i

  Worksheets(1).Range (“A6”).Value = ”результат

  Worksheets(1).Range (“A7”).Value = Y

End Sub

ЗАДАНИЯ ДЛЯ ВЫПОЛНЕНИЯ

1.     
Найти
количество положительных

2.     
Найти
количество отрицательных чисел.

3.     
Найти
сумму положительных

4.     
 Найти
сумму отрицательных чисел.

5.     
Найти
количество элементов массива больших или равных заданному значению.

6.     
Найти
произведение положительных элементов массива.

7.     
Найти
сумму элементов, стоящих на четных местах .

8.     
Найти
сумму элементов стоящих на нечетных местах.

9.     
Заменить
отрицательные элементы нулями.

10. 
Обнулить
элементы, имеющие четный индекс.

11. 
Найти
произведение, элементов стоящих на четных местах.

12. 
Сформировать
новый массив по правилу: с[i]=x*sqrt(a[i]), где х—некоторая постоянная.

3.Двумерные массивы

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

        Dim
<имя массива>(<начальное значение индекса по строкам>
To <конечное значение индекса по
строкам >,

< начальное значение индекса по столбцам> To < конечное значение индекса по
столбцам>)
As <тип элементов
массива>

  Пр:  Dim A(1 To 10, 1 to 5) As Integer — массив состоит из 50 элементов (10 строк и  5столбцов),
тип каждого элемента —
Integer.

 б) Обращение к элементу массива

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

  Пр:  A(1,4)=15 —  элементу, находящемуся в первой строке и четвертом столбце
массива А присваивается значение 15

в) Ввод массивов

       Массивы можно вводить
как с листа
Excel, так и испрользуя встроенную
функцию
InputBox.

1)     
for i=1 to 10

 for j=1 to 4

  A(i,j)=InputBox(«Введите A(» & i & «,» & j &
«)»)

 next j

next i

2)     
for i=1 to 10

 for j=1 to 4

  A(i,j)=Worksheets(1).Cells(i,j)

 next j

next i

г) Изображение ввода двумерных массивов в
блок-схемах

СОДЕРЖАНИЕ ОТЧЕТА

1.     
Название
лабораторной работы.

2.     
Цель
работы.

3.     
Задание

4.     
Схема
алгоритма.

5.     
Текст
программы.

6.     
Выводы.

КОНТРОЛЬНЫЕ ВОПРОСЫ:

1.     
Приведите 
форму записи оператора
FOR?

2.     
Что такое
счётчик цикла?

3.     
Что такое
тело цикла?

Лабораторная работа №22

VBA. ЦИКЛЫ С ПРЕДУСЛОВИЕМ И
ПОСТУСЛОВИЕМ.

Составим алгоритм
следующей задачи, используя различные циклы с предусловием и постусловием:
вводите числа, пока их сумма не превысит введенного числа
m.

1) Циклы с предусловием

a)      Do While
P                                        
б) Do While P

           S                                                                S

           [Exit Do]                                                          
Wend

        Loop

  Тело цикла S будет выполняться в том случае,
когда условие
P имеет значение истина (цикл
продолжается при истинном значении условия
P). Если условие P ложно, то выполняются
операторы, стоящие после цикла. В первом случае есть возможность досрочного
выхода из цикла (это реализовано через
Exit Do.

 Ниже приведен пример решение
указанной выше задачи, используя цикл с предусловием
Do WhileLoop.

Public Sub uuu()

 Dim x As Integer

 Dim m As Integer

 Dim s As Integer

 Dim i As Integer

 m = InputBox(«Введите число»)

 MsgBox («Вводите числа»)

 i = 1

 s =
InputBox(«Введите  1  число»)

 Do While s <= m

   i = i + 1

   x =
InputBox(«Введите » & i & «число»)

   s = s + x

  Loop

  MsgBox («Количество введенных
чисел » &
i)

End Sub

в) Кроме
уже описанных выше циклов с предусловием существует еще один — это цикл
Do UntilLoop. Тело S этого цикла выполняется до тех пор, пока условие P не примет значение истина (цикл
продолжается при ложном значении условия
P). Есть возможность досрочного выхода из цикла. Его синтаксис следующий:

                      Do Unlil P

                            
S

                        [Exit Do]

                     
Loop

 Далее смотрите
код программы той же задачи, но с использованием цикла
Do UntilLoop.

Public Sub uuu()

 Dim x As Integer

 Dim m As Integer

 Dim s As Integer

 Dim i As Integer

 m = InputBox(«Введите число»)

 MsgBox («Вводите числа»)

 i = 1

 s =
InputBox(«Введите  1  число»)

 Do Until s > m

   i = i + 1

   x =
InputBox(«Введите » & i & «число»)

   s = s + x

  Loop

  MsgBox («Количество введенных
чисел » &
i)

End Sub

2) Циклы с
постусловием.

 а) Do

       S

      [Exit Do]

    Loop While P

  Тело цикла S будет выполняться в том случае,
когда условие
P имеет значение истина (цикл
продолжается при истинном значении условия
P). Если условие P ложно, то выполняются
операторы, стоящие после цикла.Предоставлена возможность досрочного выхода из
цикла

Далее приведен
код программы, с использованием цикла
DoLoop While.

Public Sub uuu()

 Dim x As Integer

 Dim m As Integer

 Dim s As Integer

 Dim i As Integer

 m = InputBox(«Введите число»)

 MsgBox («Вводите числа»)

 i = 0

 s = 0

 Do

   i = i + 1

   x = InputBox(«Введите » & i & «число»)

   s = s + x

  Loop While s <= m

  MsgBox («Количество введенных
чисел » &
i)

End Sub

б) Do

       S

      [Exit Do]

   Loop Until P

 Тело S этого цикла выполняется до тех пор,
пока условие
P не примет значение истина
(цикл продолжается при ложном значении условия
P). Есть возможность досрочного выхода из цикла.

 Ниже находится код все той же
задачи, но с использованием последнего описанного цикла.

Public Sub uuu()

 Dim x As Integer

 Dim m As Integer

 Dim s As Integer

 Dim i As Integer

 m = InputBox(«Введите число»)

 MsgBox («Вводите числа»)

 i = 0

 s = 0

 Do

   i = i + 1

   x = InputBox(«Введите » & i & «число»)

   s = s + x

  Loop Until s > m

  MsgBox («Количество введенных
чисел » &
i)

End Sub

         
Задание для самостоятельного выполнения.

1.       
Присутствует
ли во введенном массиве введенное число (количество элементов массива ввести).

2.       
Присутствует
ли в массиве два равных соседних элемента. Если да, то под какими номерами
имееи место первое равенство.

3.       
Начиная с
какого номера
n имеет место неравенство n!>xn, x — любое
действительное число.

4.       
Вводить
последовательность до тех пор, пока не встретятся три подряд идущих положительных
числа. Тогда прервать ввод и сообщить, сколько во введенной последовательности
было всего чисел.

5.       
Вводить
последовательность до тех пор, пока не встретятся три подряд идущих положительных
числа. Тогда прервать ввод и сообщить, сколько во введенной последовательности
было положительных чисел.

6.       
Вводить
последовательность до тех пор, пока не встретятся три подряд идущих положительных
числа. Тогда прервать ввод и сообщить, сколько во введенной последовательности
было отрицательных чисел.

7.       
Определить
сколько натуральных подряд идущих четных чисел нужно сложить (найти минимальное
число таких слагаемых), чтобы их сумма была больше введенного числа.

8.       
Дано
натуральное
N и первый член бесконечного
ряда:
Y1=1. Вычислить сумму членов
бесконечного ряда, образованного по следующему реккррентному соотношению:
Yi=2*Yi-1 (то есть S=1+2+4+8+16+…). Вычисление суммы
продолжать до тех пор, пока соблюдается условие |
YiYi-1|<N.

9.       
Последовательно
вводятся числа до тех пор, пока во введенной совокупности не окажется три нуля.
Вывести количество введенных чисел.

10.    Присутствуют ли во введенном
массиве отрицательные числа.Если да, то под каким номером встречается первое из
них.

Лабораторная работа №23

VBA.
ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ.

Приведем некоторые общие сведения об организации программ в VBA.
Программа VBA состоит из одного или нескольких модулей. Модуль — это лист с
текстом программы, вставленный в рабочую книгу. Обычно текст программы VBA
начинается с опций, которые управляют описанием переменных, способом сравнения
строк и т. д. Затем следует объявление глобальных переменных или констант для
данного модуля, т. е. таких переменных, которые используются во всех процедурах
модуля. Далее располагается непосредственно текст функций пользователя и
процедур, составляющих саму программу.

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

Правильно организованной программой является такая программа, которая
достигает результата наименьшим количеством итераций и при этом использует
оптимальный вариант решения поставленной задачи. Это достигается многими
компонентами, одним из которых и является функция.

Возьмем к примеру ситуацию, когда при проектировании программы вы
замечаете, что одну и ту же многошаговую операцию необходимо будет произвести с
различными переменными. Разумным шагом в сложившейся ситуации является
следующий — один раз написать код многошаговой операции и использовать его во
всех необходимых местах данной программы, а в последствии и при написании
других программ.

Процедура Function представляет собой набор команд, с помощью
которого можно решить определенную задачу. Отличие процедуры
Function
от процедуры
Sub состоит в том, что процедуры данного типа обязательно
возвращают значение. При создании процедуры
Function можно описать тип данных, который возвращает
функция.

Синтаксис описания функции выглядит следующим образом:

Function имя ([аргументы] )[As тип]

      Инструкции

       имя=выражение

End
Function

1.     
Ключевые слова Function и End Function используются в описании любой функции.

2.     
Параметр имя
определяет имя функции.

3.     
Необязательные параметры аргументы
позволяют передать в функцию требуемые значения.

4.     
Параметр As
тип
позволяет явно задать тип
данных, который возвращает функция. Если он опущен, то по умолчанию
возвращается значение типа
Variant.

5.     
Внутри функции обычно
имеется инструкция имя=выражение, которая используется для задания возвращаемого
значения. Обратите внимание, что имя функции стоит слева от знака равенства, а
параметр выражение определяет значение, которое должно быть совместимым
с объявленным в параметре
As тип типом данных для функции.

Процедуры Function возвращают значение, поэтому они обычно
используются при выполнении вычислений, например, можно создать функцию, которая
возвращает длину окружности заданного радиуса:

Function
Circumference (Radius As Double) As Double

     
Const Pi = 3.14159

      
Circumference = 2 * Pi * Radius

End
Function

1.     
Функция Circumference возвращает значение типа Double.

2.     
Внутри тела функции
определяется константа
Pi и выполняется расчет длинны.

3.     
Обратите внимание, что в
вычисляемом выражении участвуют аргумент
Radius и константа Pi, а результат расчета
присваивается переменной
Circumference, которая является именем функции.

Задания к выполнению

1.     
Создать программу, которая
обеспечит ввод данных
y при помощи InputBox, произведет
вызов функции
g с двумя условиями:

             и выведет результат в MsgBox.

2.     
Создать программу, которая
обеспечит ввод данных
t при помощи InputBox, произведет
вызов функции
z с тремя условиями:

             и выведет результат в MsgBox.

Лабораторная работа №24

VBA.
ПОЛЬЗОВАТЕЛЬСКИЕ ПРОЦЕДУРЫ.

Процедура – это набор описаний и инструкций, сгруппированных для вычисления.
Существует три типа процедур
Sub, Function, Property. Имя  процедуры всегда определяется на уровне
модуля. В процедурах должны содержаться все исполняемые программы. Вложенность
процедуры в другие процедуры не допускается. Для того, чтобы вставить процедуру
необходимо вызвать редактор
VBA и в меню редактора Вставка выбрать
подменю Модуль. Затем снова выбрать Вставка и, в открывшемся
подменю выбрать Процедура…. Появляется диалоговое окно Вставка
процедуры
следующего вида:

В окне Имя пишется
название процедуры. В рамке Тип выбирается необходимая процедура. А в
рамке Область определения выбирается необходимая область определения для
вашей процедуры.

Инструкция Sub
описывает имя, аргументы и текст программы, составляющий тело процедуры Sub.

Синтаксис

[Private | Public]
[Static] Sub имя [(списокАргументов)]

            [инструкции]

            [Exit
Sub]

            [инструкции]

End Sub

Синтаксис
инструкции Sub содержит следующие элементы:

Элемент         Описание

Public              Необязательный. 
Указывает, что процедура Sub доступна для всех других процедур во всех
модулях.  При использовании в личном модуле (модуле, который содержит
инструкцию Option Private) такая процедура является недоступной вне проекта.

Private            Необязательный.  Указывает, что процедура Sub
доступна для других процедур только того модуля, в котором она описана.

Static              Необязательный.  Указывает, что
локальные переменные процедуры Sub сохраняются в промежутках времени
между вызовами этой процедуры.  Атрибут Static не действует на переменные,
описанные вне процедуры Sub, даже если они используются в процедуре.

имя                 Обязательный.  Имя процедуры Sub,
удовлетворяющее стандартным правилам именования переменных.

списокАргументов  Необязательный.  Список переменных, представляющий
аргументы, которые передаются в процедуру Sub при ее вызове.  Имена
переменных разделяются запятой.

инструкции  Необязательный.  Любая группа инструкций,
выполняемых в процедуре Sub.

Дополнительные
сведения

Процедуры Sub,
тип которых не указан явно с помощью слов Public или Private, являются общими
по умолчанию.  Если не используется слово Static, значения локальных переменных
не сохраняются между вызовами процедур.

Допускаются
рекурсивные процедуры Sub; т.е. они могут вызывать сами себя для
выполнения определенных задач.  Однако рекурсия может приводить к переполнению
стека.  Ключевое слово Static обычно не используется с рекурсивными процедурами
Sub.

Все выполняемые
команды должны содержаться в процедурах.  Не допускается определение процедуры Sub
внутри другой процедуры Sub, Function или Property.

Инструкция Exit
Sub
приводит к немедленному выходу из процедуры Sub.  Выполнение программы
продолжается с инструкции, следующей за инструкцией, содержащей вызов процедуры
Sub.  В любом месте процедуры Sub допускается наличие любого
числа инструкций Exit Sub.

Подобно процедурам Function,
процедура Sub является самостоятельной процедурой,  которая может
получать аргументы, выполнять последовательность инструкций и изменять значения
своих аргументов.  Однако в отличие от процедуры Function, которая
возвращает значение, процедура Sub не может применяться в выражении.

 Если в процедуре
используются общие переменные (Public) и они получают там новые значения , то
при вызове этой процедуры другой процедурой Sub, в которой так же
используются эти переменные они будут содержать уже полученные значения.
А вызвать одну процедуру другой можно следующим способом:

Процедура Sub
вызывается в выражении по своему имени, за которым следует список аргументов в
скобках.  Для вызова процедур Sub обычно используют инструкцию
Call.

Call Primer(0)

Вышеуказанная
строка вызывает процедуру
Primer с
аргументом 0 .

Переменные,
используемые в процедурах Sub, разбиваются на две категории: явно
описанные внутри процедуры и не описанные внутри процедуры.  Переменные,
которые явно описаны в процедуре (с помощью ключевого слова Dim или эквивалентного
ему), всегда являются локальными для этой процедуры. Переменные, которые
используются, но явно не описаны в процедуре, также являются локальными, если
они явно не описаны на более высоком уровне. Примером явного описания на более
высоком уровне являются общие переменные:

Public Girl As Integer

Такого рода
переменные описываются в отдельном модуле.

Примечание.   Для входа или выхода из процедуры Sub
нельзя использовать инструкции GoSub, GoTo или Return.

Пример для выполнения

Необходимо вычислить
площадь параллелепипеда со сторонами a, b, c. Для этого нужно создать две
процедуры – Plosh и Argum. В процедуре Plosh обеспечить ввод a, b, c и вывод
результата S. А в Argum  обеспечить расчет площади S. Причем, процедура Plosh
должна получить результат S путем вызыва процедуры Argum.

Решение

Public a As
Integer ‘ Описываются общие  переменные в отдельном модуле

Public b As Integer

Public c As Integer

Public S As Integer

Public
Sub Plosh()

a
= Range(«a1»).Value

b
= Range(«a2»).Value

c
= Range(«a3»).Value

Call
Argum           ‘
Вызов процедуры Argum

Range(«a5»).Value
= S

End
Sub

Public
Sub Argum()

S
= a * b * c

End Sub

Задания к самостоятельному
выполнению:

1.     
Создать одномерный массив
из 10 элементов. Его ввод обеспечить используя
InputBox . Необходимо
отсортировать массив по возрастанию, а так же найти сумму всех его элементов.
Задачу разрешить при помощи создания трех процедур.

2.     
Создать одномерный массив
из 10 элементов. Его ввод обеспечить используя
InputBox . Найти
максимальный и минимальный элементы, а так же найти среднее арифметическое
массива. Задачу разрешить при помощи создания трех процедур.

3.     
Создать одномерный массив
из 10 элементов. Поменять местами соседние элементы массива и вывести
произведение элементов, стоящих на чётных местах преобразованного массива.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Государственное образовательное учреждение высшего профессионального образования

«КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ЭНЕРГЕТИЧЕСКИЙ УНИВЕРСИТЕТ»

Н.К. ПЕТРОВА, М.М. ВОЛЧЕНКО

ПРОГРАММИРОВАНИЕ НА VBA В ПРИМЕРАХ И ЗАДАЧАХ

ЧАСТЬ I. БАЗОВЫЕ АЛГОРИТМИЧЕСКИЕ СТРУКТУРЫ

Практикум к лабораторным работам, практическим занятиям, расчетному заданию и самостоятельной работе студентов по дисциплинам

«Информатика», «Компьютерные технологии в науке и образовании», «Программные средства информатики», «Новые информационные технологии»

Казань 2010

УДК 681.3 ББК 32.973 П78

Рецензенты:

кандидат физико-математических наук, доцент Татарского государственного педагогического университета И.Н. Голицына;

кандидат физико-математических наук, доцент Казанского государственного энергетического университета Р.А. Ишмуратов

П78 Петрова Н.К., Волченко М.М.

Программирование на VBA. Часть I. Базовые алгоритмические структуры. Практикум / Н.К. Петрова, М.М. Волченко. – Казань: Казан. гос. энерг. ун-т, 2010. – 55 с.

Предлагается своего рода «Задачник» по программированию, ориентированный на обучение студентов основам алгоритмизации математических и инженерных задач средствами языка VBA в приложении к Excel.

Содержание I части охватывает разделы программы, посвященные базовым алгоритмическим структурам: линейные программы, «ветвление», «цикл» — арифметический и итерационный. Изложение материала оформлено в виде отдельных разделов, в которых кратко представлены основные теоретические сведения.

Типовые задачи даются с подробными решениями. Имеется большое количество задач для самостоятельной работы. Задания делятся на три типа: 1 – умение «читать» готовые программы, 2 – разрабатывать программы по шаблонному алгоритму и 3 – разрабатывать программы с неявным алгоритмом.

Практикум предназначен для студентов всех специальностей КГЭУ, изучающих «Информатику».

УДК 681.3 ББК 32.973

© Казанский государственный энергетический университет, 2010

3

Предисловие

Вучебной литературе имеется не так много пособий по практической работе на VBA, ориентированных на решение математических, инженерных задач. Данный практикум разработан с целью восполнить существующий пробел. Он предназначен для обучения – самостоятельно или под руководством преподавателя – основам алгоритмизации с использованием языка VBA (Visual Basic for Application) в приложении к одному из самых популярных приложений MS Office – MS Excel.

Впрактикум включены типовые задачи и даются методы и примеры их решения. Каждому разделу предшествует краткое введение, состоящее из определений и описания операторов языка. Многочисленные примеры демонстрируют разные возможности работы с ячейками рабочего листа Excel, с диалоговыми окнами ввода и вывода. Основной акцент сделан на умение работать с математическими формулами, с числами в формате с плавающей и фиксированной точкой, грамотно сопоставлять фактические и формальные параметры при вызове программ как с листа Excel, так и из программ пользователя.

Втексте практикума приняты такие соглашения:

1.Элементы языка VBA в текстовой части практикума выделены

таким стилем.

2.Курсивом выделены новые термины, имена переменных в текстовой части практикума, в комментариях к операторам программ.

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

4.При описании структуры операторов[необязательные операнды] взяты в квадратные скобки, альтернативные параметры – Yes | No

написаны через вертикальную черту.

5. В тексте используются следующие сокращения:

ОП – оперативная память; ПК – компьютер; п/п – программа-процедура; п/ф – программа-функция

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

4

Общие теоретические сведения по программированию на VBA

I. Структура программ на VBA. Процедуры и функции пользователя

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

В VBA программный код, реализующий какие-либо действия, оформляется в виде процедур и функций. Благодаря этому создаваемые программы имеют хорошую структурированность и наглядность. Разработанные отдельные функции или процедуры можно накапливать в библиотеках и в дальнейшем использовать их по мере необходимости.

Программа-процедура (п/п) на VBA имеет следующую структуру:

[Private|Public] Sub ИмяПроцедуры (СпискиПараметров) <<Тело п/п>>

End Sub

где [Private|Public] – необязательные ключевые слова, определяющие область видимости программы; Sub – ключевое слово, определяющее тип п/п. ИмяПроцедуры – имя п/п (дает сам пользователь). СписокПараметров служит для передачи процедуре исходных данных для вычислений (может отсутствовать). Он состоит из элементов списка, разделенных запятыми.

Этот элемент списка параметров имеет синтаксис:

ИмяЭлемента [As ТипДанных]

где ИмяЭлемента идентификатор; As – ключевое слово; ТипДанных – тип данных элемента списка (Табл. 1.1).

Процедура пользователя может быть вызвана из другой п/п оператором Call или указанием ее имени.

5

Например:

Private Sub Prog1( )

Начало процедуры с именем Prog( )

Dim t As Integer

Описание типа переменной t

t = 2

Присвоение переменной t значения 2

Call Prog2 (t)

Вызов процедуры Prog2 (t) с фактическим

[Другие операторы]

параметром t

Prog2 (t)

другой способ вызова п/п Prog2

[Другие операторы]

End Sub

Конец процедуры Prog1

Public Sub Prog2(x As

Начало п/п Prog2 с формальным параметром х

Integer)

MsgBox x

Выдача значения x в специальном окне

End Sub

Конец процедуры Prog2

Программа–функция (п/ф) – это программа, которая выполняет действия в пределах своего блока и возвращает единственное значение. Функция пользователя имеет следующий вид:

[Private|Public]Function ИмяФункции([СпискиПараметров])[As ТипДанных]

<<Тело п/ф>>

ИмяФункции = ВозвращаемоеЗначение

End Sub

Function – ключевое слово, указывающее на то, что это функция; остальные параметры те же, что и в Sub. ВозвращаемоеЗначение – значение, возвращаемой функцией.

Обращение к п/ф может производиться из процедуры другой функции. Если в функции предусмотрено рекурсивное обращение, то ее можно вызвать из нее самой. Если функция записана в модуле, то ее можно вызвать из Excel с помощью Мастера функций, так как функция пользователя заносится в библиотеку функций.

Пример:

Private Sub Prog3( ) Dim u,t As Integer

t = 2

y = Func ( t ) [Другие операторы] End Sub

Public Function Func(x As Integer) As Integer

f % = x ^ 2 + x + 5

func = f % End Function

6

Начало вызывающей п/п Задание типа переменным u,t

Присвоение переменной t значения 2 Вызов п/ф Func с фактическим аргументом t

Конец п/п

Начало п/ф Func, имеющей целочисленный тип. Формальный аргумент t имеет целочисленный тип

Вычисление полинома по t и присвоение результата целочисленной переменной f % Присвоение возвращаемого значения Конец п/ф

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

II. Типы констант. Представление числовых констант в формате с фиксированной и плавающей десятичной точкой

Константой называется некоторая величина, не изменяющая своего числового или символьного значения в течение выполнения всей программы. Имеются два типа константчисловые и символьные.

Числовые константы: представляют собой положительные или отрицательные числа двух видов:

а) целочисленные, представляющие собой положительные и отрицательные числа и ноль, при их записи не должна использоваться

десятичная запятая: -100

2

0 +458 ;

б) вещественные константы – все действительные числа, включая и

целые. Записываются в двух форматах:

100.

–0.001

+2.563

с фиксированной точкой, например,

(вместо десятичной запятой используется при записи точка)

с плавающей точкой, например,

2.5·10-2, записываемое как

2.5Е-02 или 2.5D-02.

Здесь

2.5

мантисса, Е, D

десятичная

экспонента одинарной (Е) или двойной (D) точности.

Например: 1,5 10-3 1.5Е-3=0.15Е-02=15Е-04=0.0015,

150000 1.5Е+05,

0,0000254 2.54Е-05.

7

III. Объявление переменных на VBA

Переменные – это объекты, предназначенные для хранения данных. В различные моменты времени переменные могут хранить разные значения. Имена переменных позволяют различать их в программе, осуществлять доступ к различным участкам памяти для записи данных и их извлечения.

Перед использованием переменных в программе их нужно объявить (декларировать). При объявлении переменной необходимо указать, что объявляется переменная, задать имя переменной и указать ее тип. Тип определяет способ представления/хранения переменной в оперативной памяти.

Для эффективного использования памяти и времени ПК необходимо правильно выбрать тип переменной. Объявить переменную – значит заранее сообщить программе о ее существовании. Объявление переменной производится специальным оператором: Dim переменная [As тип]

Одновременно с объявлением переменной после ее имени можно

записать ключевое слово

As, после которого

задается

тип переменной

(Табл. 1.1).

Dim power As

Например: оператор

single

приписывает

переменной power вещественный тип одинарной точности.

Задать тип переменной также можно, используя специальный символ в конце имени – постфикс (см. табл. 2) – или, используя инструкцию

DefТип.

Например, если на уровне модуля дана инструкция DefInt I-N, это означает, что всем переменным, имена которых начинаются с букв, лежащих в диапазоне от I до N (и прописных, и строчных), в программах данного модуля будет присвоен тип Integer. Другие значения инструкции DefТип представлены в Табл. 1.2.

8

Таблица 1.1 Некоторые типы переменных VBA

Тип

Хранимая

Занимаемая

Диапазон значений

информация

память

Целочисленные типы

Byte

Целые числа

1 байт

От 0 до 255

Boolean

Логические

2 байт

True или False

значения

Integer

Целые числа

2 байт

От -32 768 до 32 767

Long

Длинное целое

4 байт

От -2 147 483 648 до 2 147 483

647

Типы с плавающей точкой

От -3,402823E38 до

Вещественные

-1,401298E-45

Single

числа с плавающей

4 байт

для отрицательных значений;

точкой одинарной

(7 цифр)

от 1,401298E-45 до

точности

3,402823E38

для положительных значений

От -1,79769313486232E308

Вещественные с

до -4,94065645841247E-324

8 байт

для отрицательных значений;

Double

плавающей точкой

(15 цифр)

от 4,94065645841247E-324

двойной точности

до 1,79769313486232E308 для

положительных значений

Строковые типы

Текстовая

String

информация

10 байт + 1 байт

От 0 до приблизительно

(строка) переменной

на каждый символ

2 миллиардов символов

длины

String*n

Строка постоянной

Длина строки

От 1 до приблизительно

длины в n символов

65 400

Типы Variant

Variant

Значения любого из

16 байт для чисел;

Любое числовое или

перечисленных

22 байт + 1 байт

строковое значение вплоть до

типов данных

на каждый символ

границ диапазона для типа

строки

Double.

9

Таблица1.2. ЗначенияинструкцииDefТиписоответствующихпостфиксов

Инструкция

Тип данных

Постфикс

Инструкция

Тип данных

Постфикс

DefBool

Boolean

нет

DefSng

Single

!

DefByte

Byte

нет

DefDbl

Double

#

DefInt

Integer

%

DefStr

String

$

DefLng

Long

&

DefVar

Variant

нет

IV. Значения и типы переменных по умолчанию

Если в программах модуля операторы описания типа или постфиксы в именах переменных отсутствуют, то работает принцип умолчания

(табл. 1.3), согласно которому все переменные принимают тип Variant и

соответствующие значения. Применение данного типа позволяет выполнять операции, не обращая внимания на тип данных, которые они содержат. Удобен для объявления переменных, тип которых заранее неизвестен. Переменные этого типа могут содержать специальные значения: Empty (пусто), Null (Нуль), Error (ошибка).

Таблица 1.3. Значения и типы переменных разных типов по умолчанию

Тип

Значение

Тип

Значение

Тип

Значение

Boolean

Ложь/False

Single

0,0

String

““

Byte

0

Double

0,0

String*n

“¬ . . . ¬“

Integer

0

Long

0

n пробелов

Variant

Empty, Null, Error

Из таблицы следует, что если переменная описана как числовая

(любого типа – Byte, Integer, Long, Single, Double) то ее значение по умолчанию равно 0 (ноль). Для символьных переменных типа String значение по умолчанию «» – отсутствие символов, если String*n, то ее значение будет равно n пробелам. Для логических (Boolean) переменных значение по умолчанию будет «ложь»

Несколько правил для корректного использования разных типов данных в одной программе или в одном выражении:

1. Переменные, описанные с помощью DIM на уровне модуля, доступны для всех процедур в данном модуле. Переменные, описанные на уровне п/п, доступны только в данной п/п.

10

2.В операторах присваивания следует иметь в виду, что значение выражения может быть присвоено переменной, только если оно имеет совместимый с этой переменной тип данных. Невозможно присвоить строковое выражение числовой переменной или числовое выражение строковой переменной. Такая попытка приведет к ошибке во время компиляции.

3.Переменным типа Variant могут присваиваться как строковые, так и

числовые выражения. Однако обратное не всегда верно.

4.Присвоение выражения с одним из числовых типов переменной с другим числовым типом данных преобразует значение выражения в тип данных результирующей переменной. Например: если a % = 2.33, то а % будет иметь целое значение 2 (округление с недостатком) или b % = 2.65, то b % = 3 (округление с избытком), таким образом, присвоение вещественного числа целочисленной переменной приводит к округлению его до ближайшего целого (аналогично функции INT).

5.Если присваивается численное выражение типизированной переменной с меньшей точностью (например, Double → Long), VBA

округляет значение выражения для совпадения с точностью переменной, принимающей новое значение.

6. Если переменной типа String присваивается переменная типа Variant, содержащая число, VBA автоматически преобразует это число в строку.

V. Встроенные математические функции

Таблица 1.4. Некоторые стандартные функции VBA

Функция

Выполняемое действие

Atn(аргумент)

Возвращение арктангенса угла в радианах

Sin (аргумент)

Возвращение синуса угла, заданного в радианах

Cos(аргумент)

Возвращение косинуса угла, заданного в радианах

Tan(аргумент)

Возвращение тангенса угла, заданного в радианах

Exp(аргумент)

Возвращение значения ex, где x — значение переменной

или введенное число

Log(аргумент)

Возвращение натурального ln(x) логарифма числа x

Sqr(аргумент)

Возвращение квадратного куреня числа

Randomize

Запуск генератора случайных чисел

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #


Введение

         Большинство
специалистов используют операционную систему
Windows на
рабочих местах предприятия и на индивидуальных компьютерах. Следует отметить,
что на предприятиях устанавливают требования (внутренние стандарты) на
использование приложений
MS Office для
подготовки распространения файлов. Жизнь показала, что стандарты предприятия на
использование операционных систем и приложений, отстают от тех возможностей,
которые предоставляют пользователям разработчики системы
Windows. Например, широко распространённое приложение для
работы с данными
MS Excel, постоянно добавляется новыми возможностями,
претерпевает некоторые изменения в интерфейсе. По этой причине, автор данного
пособия постарался учесть некоторые особенности версий
MS Office,
раскрывая правила работы пользователя, как с версиями
MS Office 2003 (это
основной стандарт для предприятий), так и с более поздними версиями, для
которых разработчики ввели ленточный  интерфейс
в строке Меню. Для демонстрации различий между отображением интерфейсов
приложений
MS Office, которые работают под управлением одной и той же
операционной системы
Windows
XP, на рис 1 представлено отображение интерфейса
приложения
Word 2003, а на рис 2 – Word 2007. Следует напомнить, что в приложениях MS Office
2003 (или в более ранних версиях) имелась строка Меню, к каждому наименованию в
строке прикреплялся разворачивающийся список с командами для вызова
определённой функции, а также создавалась панель инструментов в виде пиктограмм
с наиболее часто используемыми функциями для поддержки работы пользователя (рис
1). В версиях
MS Office, начиная с 2007, строка Меню состоит из закладок
(Главная, Вставка, Разметка страницы и т.д.), при активизации которых,
раскрывается лента в виде пиктограмм с перечнем функций для работы пользователя
(рис 2).

Рис. 1. Интерфейс приложения Word 2003

Рис. 2. Интерфейс приложения Word 2007

            В предлагаемом пособии рассмотрены конкретные примеры постановки
задач и их реализации в приложениях
MS Office. Задачи предлагаются на
практических занятиях по дисциплинам Информатика, Информационные технологии в
управлении, Исследование социальных и политических процессов. Автор пособия не
ставил перед собой цели по созданию универсального свода примеров по каждой
дисциплине, а лишь предлагает рассмотреть наиболее характерные постановки задач
для ввода, преобразования и обработки данных, которые встречаются в указанных
дисциплинах. Инструментом для обработки и анализа данных на рабочем месте
пользователя, часто являются приложения
MS Office, которые
используются в качестве программных средств подготовки данных для передачи
(экспорта) их в другие приложения, или используются в качестве средства для
обработки данных при получении (импорте) их из других источников и приложений.
На этом основана технология распределённой обработки данных, независимо от той
среды, в которой работает конечный пользователь. Следовательно, целесообразно
вводить в приложения
MS Office элементы
автоматизации работы с данными, для чего используются элементы управления, а
реализуется всё либо с помощью макросов, либо с использованием языка
Visual Basic for Application.


Раздел 1. О назначении
языка программирования
Visual Basic for Application

Событийный подход в программировании

                Событи́йно-ориенти́рованное
программи́рование
(англ. eventdriven
programming; в дальнейшем СОП) — парадигма программирования, в
которой выполнение программы определяется событиями — действиями пользователя
(щелчок по кнопке мыши, попадание курсора в определенную позицию, изменение
атрибутов того или иного объекта, переполнение буфера памяти и т.д.),
сообщениями других программ, событиями операционной системы (например,
поступлением сетевого пакета). Программа
представляет собой совокупность возможных сценариев обработки данных, выбор
которых инициируется наступлением того или иного события. Событийный подход к
программированию включает использование объектов, способных реагировать на
события, происходящие в системе.

                Корпорация
Microsoft интегрировала
в свои офисные продукты, а также во все версии операционной системы
Windows, простой в понимании и удобный в использовании язык
программирования
Visual Basic for Application (VBA), который
берёт своё начало от объектно-ориентированного языка программирования
Visual Basic (VB). Это средство разработки программного обеспечения,
сочетает в себе процедуры и элементы объектно-ориентированных языков
программирования. Среда разработки VB включает инструменты для визуального
конструирования пользовательского интерфейса, в итоге создаётся загрузочный
модуль, который может работать независимо. Язык
VBA позволяет пользователю создавать приложения,
структуры данных и управляющие структуры, что позволяет реализовать следующие
возможности: создание нестандартных диалоговых окон с базовым набором элементов
управления, написание процедур для приложений
MS Office,
обрабатывающих события, которые возникают при тех или иных действиях
пользователя или системы.

Особенности языка программирования VBA

                Язык
программирования
VBA не позволяет создавать
независимое приложение. Проект (программа) в
VBA обязательно должен взаимодействовать с каким-либо
документом (
Word, книга Excel, база данных Access). Документ рассматривается как доступный объект (Application) из программных кодов. Но, вместе с тем, программист
получает возможность автоматизировать работу пользователя с любым приложением
MS Office.
Под автоматизацией работ подразумевается выполнение ряда рутинных операций,
которые приходится осуществлять пользователю при работе как с внутренними
данными (данные в приложении), так и с внешними источниками данных (файлы,
таблицы, гистограммы и т.п.). Чтобы вызвать событие со стороны пользователя или
отобразить результаты выполнения операций над данными в
VBA используют
элементы управления. Следует отметить, что набором типовых элементов
управления, которые наиболее часто встречаются во всех интерфейсах
Windows, являются: кнопки, текстовые окна, надписи, списки,
средства для выбора. Эти элементы управления всегда доступны, хотя, часто
появляется необходимость (как и при использовании
VB) подключать дополнительные элементы управления,
которые можно выбрать из реестра
Windows, раскрыв
пиктограмму  Другие
элементы
, на панели инструментов. Каждый элемент управления связан с
набором событий, которые выбирает разработчик, при создании процедуры обработки
события, так на рис 3 представлен пример набора возможных событий для элемента
управления командная кнопка. После свершения события (нажатие на клавишу,
щелчок мышью и т.п.) подключается процедура, которая включает в себя набор
программных кодов (в основном операторы языка программирования), созданных
программистом по заранее намеченному алгоритму. Как правило, результатом работы
процедуры является преобразование данных (видоизменение, проведение расчетов,
изменение свойств объектов, создание файлов, отображение на экране пользователя
определённых сведений и т.п.).

Рис. 3. Перечень событий для командной кнопки

                Разработчики
интерфейсов для приложений
MS Office наиболее
часто используют стандартные элементы управления, перечень которых приведен в
таблице 1.

Таблица 1. Перечень наиболее часто используемых
элементов управления

Обозначение

Имя в VBA

Название

CommandButton

Кнопка

TextBox

Поле

Label

Надпись

ListBox

Список

ComboBox

Поле со списком

OptionButton

Переключатель

CheckBox

Флажок

Image

Рисунок


Раздел 2. Разработка программных кодов на VBA

Обработка данных с
использованием средств
VBA.

         Предположим,
что в организации не так много сотрудников, поэтому отдел кадров ведёт всю
документацию с использованием приложений
MS Office.
Безусловно, основные данные о сотрудниках целесообразно хранить в виде
отдельных файлов, к которым по мере необходимости можно обращаться. Сведения о
сотрудниках в основном содержат структурированную текстовую информацию, которая
может находиться в книге
Excel
и отображаться в виде таблицы, как это
показано на рис 4.

Рис. 4. Таблица со списком сотрудников

                Таблица с исходными данными (рис
4) может быть использована для обработки данных в
Excel стандартными
приёмами (сортировки, подведение итогов, отборы по заданным параметрам и т.д.).
Можно использовать эту таблицу в качестве источника данных для создания
автоматизированных форм, которые не потребуют от исполнителя каких-либо знаний
функциональных возможностей
Excel. Для этой
цели достаточно провести анализ потребностей исполнителя и создать небольшой
интерфейс с внедрением на лист
Excel
элементов управления, которые позволят в
автоматизированном режиме выполнять набор стандартных операций. В частности,
сохранять требуемые данных в отдельных файлах, осуществлять отбор данных по
заданным параметрам, формировать выходные документы. Автоматизация работы с
Excel предусматривает
внедрение макросов и программ на языке программирования
Visual Basic for Application (VBA), о чём в
дальнейшем и пойдёт речь.

Проектирование
интерфейса анализа количества записей в таблице и отображение данных в виде
списка

         Алгоритм
автоматического определения количества строк в таблице и переноса отдельных
полей в окно со списком очевиден. Необходимо с определённого места
последовательно просматривать данные одного столбца, проверять на наличие
записанного данного в ячейке и передавать в элемент управления поле со списком.
В том случае, если в ячейке ничего не будет записано, тогда следует прекратить
просмотр элементов столбца и отобразить в текстовом окне на листе
Excel количество просмотренных записей  в столбце.

                Воспользуемся уже готовой книгой
Excel с
наименованием
Form1.xls, откроем этот файл и сохраним его под новым именем
(на всякий случай), например, зададим имя файла –
Form2.xls. Прежде всего,
необходимо подготовить среду для разработки интерфейса пользователя и
программных кодов на
VBA. Для этого
(правильнее всего), работая с
Excel 2003, в
строке Меню следует выбрать: Вид→Панели инструментов→
Visual Basic. На
экране появится новая панель инструментов, которую можно ухватить мышкой и
переместить в любое место (лучше на общую панель инструментов), панель
инструментов
Visual Basic с
основными элементами показана на рис 5.

Рис. 5. Панель инструментов Visual Basic

                Активизация кнопки  Элементы
управления
, приведёт к открытию дополнительной панели инструментов с таким
же названием, на которой находятся основные элементы управления, её внешний вид
представлен на рис 6. Если подвести указатель мыши к любой пиктограмме на
панели инструментов, то будет показана подсказка с наименованием элемента.

Рис. 6. Панель – Элементы управления

                Пиктограмма  Режим
конструктора
при нажатом положении позволяет на рабочем листе поместить необходимый
элемент управления, а затем масштабировать его и изменять (задавать) свойства.
Так, для запуска программного приложения на
VBA, необходимо создать событие – нажать на кнопку (Click). После размещения кнопки на рабочем листе, она будет
иметь следующий вид: ,
что не устраивает разработчика. Поэтому, следует воспользоваться пиктограммой  Свойства
(на панели Элементы управления). На рис 7 представлено окно
Properties (Свойства)
для элемента управления – Кнопка,
некоторые свойства были изменены, к ним относятся:
BackColor, Caption, Font, ForeColor и MousePointer. Изменение свойств осуществляется либо путём ввода
текста в окно с наименованием свойства, либо путём выбора варианта свойства из
раскрывающегося списка. Остальные свойства задаются «по умолчанию», т.е. при
размещении элемента на листе книги автоматически запоминаются размеры элемента,
его местоположение, а так же многие свойства оставляются неизменными, например
Visible (Видимость).
Обратите внимание, что имя свойства, состоящее из двух и более слов,
представляется слитно, так как по правилам программирования, в программных
кодах имена переменных и элементов не должны иметь разрывов (символ пробел
недопустим).

Рис. 7. Окно свойств элемента управления – Кнопка

                               Для отображения
количества строк в таблице (в столбце) на листе
Excel размещён элемент  Поле,
которому так же можно задать собственные свойства, например, отображение числа
записей в таблице будет: синим цветом, шрифт которого –
Arial 18pt. Элемент  Надпись
обычно используется для отображения пояснений в виде текста, поэтому его
целесообразно размещать около элементов управления. В данном примере на листе
Excel создано
две надписи около элемента Поле (
TextBox) и элемента  Поле со списком (ListBox). Для удобства работы пользователя целесообразно
создать ещё одну кнопку, при нажатии на которую будут удаляться данные из
текстовых окон. В результате, выполняемых действий при размещении элементов
управления на листе
Excel, внешний вид его будет
таким, как показано на рис 8.

Рис. 8. Элементы управления, размещённые на листе Excel

Разработка программы на
VBA

                После того, как на листе Excel размещены необходимые элементы управления с заданными
свойствами, можно приступать к разработке программных кодов на
VBA и
отладке программы. Удобством
VBA является то, что в нем можно использовать в качестве
имён переменных зарезервированные слова для обозначения книги, листа и ячеек.
Совокупность ячеек представляют двумерный массив, в котором указывается
абсолютная адресация текущей ячейки относительно верхнего левого угла. Если
результаты обработки данных следует отобразить на том же листе, то в программе
нет необходимости указывать имя книги и имя листа.

                Разработка программных кодов
осуществляется в окне программных кодов (
Code), внешний вид которого представлен на рис 9.
Открывать окно для создания программных кодов лучше всего двойным щелчком по
элементу управления. В рассматриваемой задаче, подразумевается, что при нажатии
на кнопку с наименованием «Просмотреть список» будет запущена программа для
подсчёта количества строк в списке и в окне Поле
со списком
будут отображены все фамилии сотрудников.

Рис. 9. Внешний вид окна для записи программных кодов
в процедуру

                Следует напомнить, что в более
сложных задачах возможен вариант, когда потребуется  использовать данные из разных книг
Excel и листов, которые принадлежат этим книгам, по этой
причине следует ориентироваться в именах, которые им присваиваются во время
создания. Так, например, рассматривая рис 9, можно увидеть, что книга имеет имя
Form2, а лист, на котором находятся данные носит название –
Кадры, хотя другие листы этой книги
сохранили свои имена (Лист2 и Лист3), которые им присвоены по умолчанию
системой при открытии книги
Excel. При
внедрении элемента управления Кнопка
на лист, система ей присвоила имя (свойство
Name) – CommandButton1,
которое не менялось (хотя согласитесь, что это слишком громоздко, можно
придумать самому имя, например, С1).

                Обработка события Click, которое вызывает пользователь, нажав на кнопку с
наименованием «Посмотреть список», осуществляется процедурой Private Sub
CommandButton1_Click(), внутри которой расположена программа. Программные
коды представлены на рис 10.

Рис. 10. Программа 
обработки события – нажать на кнопку «Посмотреть список»

                Конструкция условного оператора WhileWend создана для того, чтобы в цикле просматривать
содержимое ячеек, начиная с ячейки
B3, что
соответствует в записи
Cells(i,2), где начальному значению i присвоено число
3 (номер строки), а 2 обозначает номер столбца в таблице. Так как неизвестно,
сколько требуется просмотреть строк, то в качестве условия в операторе
While записано
выражение:
Cells(i,2)<>””. Это условие трактуется следующим
образом: просматривать ячейки до тех пор, пока их содержимое будет иметь
какие-либо символы, в противном случае, когда встретится пустая ячейка –
прекратить просмотр и выйти из цикла. Так как оперируем с текстовой
информацией, то признаком отсутствия данных в ячейке является сочетание
символов “”. Отображение данных
осуществляется в окне со списком (
ListBox1
– это его имя), в который добавляются значения, полученные из ячеек с номерами
сотрудников и фамилий сотрудников.
AddItem
это метод (маленькая стандартная подпрограмма), поэтому присоединение метода к
имени объекта осуществляется через точку. Выражение:
Cells(i, 1) &
» » &
Cells(i, 2), имеет знак & (амперсанд), который показывает,
объединение значений нескольких переменных (в данном случае их 3). Первая
переменная
Cells(i, 1)  – это
значение номера сотрудника, вторая » » – пробел, третья
Cells(i, 2) – значение
из ячейки с фамилией. Таким образом, в окне отобразится номер и фамилия
текущего сотрудника, если предварительно отсортировать данные в таблице
Excel, например, по фамилиям сотрудников, то номер его
сохранится в том виде, какой был ему присвоен 
при вводе данных. В программе использованы переменные
i и k, первая из которых обозначает номер просматриваемого
столбца, а вторая введена для подсчёта количества просмотренных ячеек в цикле.
Отображение количества просмотренных строк осуществляется в текстовом окне (
TextBox) с помощью оператора присвоения TextBox1.Text = k. Следует обратить внимание на то обстоятельство, что
объекту с именем
TextBox1 присваивается
(передаётся) значение переменной
k, поэтому к
имени переменной через точку добавляется имя свойства
Text (TextBox1.Text).

                Пользователь может добавлять в
исходную таблицу новые строки или вводить исправления в данные, поэтому для
того, чтобы посмотреть новый список, целесообразно его очистить. Для этой цели
и была создана кнопка «Удалить сведения», текст этой программы приведён на рис
11.

Рис.11. Программа для очистки текстовых окон на листе Excel

                 Имя кнопки «Удалить сведения» оставлено без
изменения, как это предложила система. После свершения события
Click по
кнопке запускается программа, которая обрабатывает два объекта. Первым объектом
является список с именем
ListBox1,
который содержит несколько строк (комплекс данных), поэтому следует запустить
метод
Clear (Очистить).
Вторым объектом с именем
TextBox1
является текстовое окно (Поле) для обнуления которого достаточно свойству
Text присвоить пустое значение (пробельную строку).
Окончательный вариант интерфейса для пользователя на листе
Excel представлен
на рис 12. Можете
посмотреть пример.

Рис. 12. Отображение данных в виде списка

Особенности разработки
интерфейса пользователя на
Excel 2007

         На
рис 13 представлена книга со списком сотрудников, созданная в
Excel 2007, на которой расположены элементы управления для
автоматизации работы пользователя.

Рис. 13. Отображение панели инструментов для Excel 2007 с размещённой таблицей и элементами управления

                Для того чтобы разместить
элементы управления на листе
Excel 2007,
необходимо открыть вкладку Разработчик,
нажать на кнопку  Режим
конструктора
, а затем открыть панель с элементами
ActiveX (панель инструментов с наименованием «Элементы
управления формы» используется при работе с макросами). Изменение свойств
элементов управления, которые размещены на листе
Excel, осуществляется нажатием на пиктограмму ,
после выделения элемента на листе. Разработка программных кодов для поддержки
работы интерфейса пользователя ничем не отличается от технологии, которая была
описана в разделе выше (можно смело скопировать программные коды с рис 10 и рис
11 в окно
Code Visual Basic),
если работа ведётся в версии
Excel 2007 и
выше.

Можно
посмотреть пример для Excel
2007.

Передача данных из Excel в текстовые файлы

                Данные, которые собирают или
создают в
Excel, часто требуется
использовать в других приложениях. Возникает задача автоматизации формирования массивов
с данными таким образом, чтобы сотрудник не использовал ручные операции для
открытия книги
Excel, поиска и отбора необходимых
данных, их копирования и размещения в собственном приложении. Использование
VBA делает
возможным после обработки данных в
Excel
одним щелчком мыши сформировать выходной файл для других пользователей.
Воспользуемся уже готовым приложением
Excel, в
котором сформирована таблица с данными о сотрудниках (
Form1.xls), добавим в неё столбец «Дата приёма». После
заполнения столбца данными (в примере это год приёма на работу), сохраним
документ под именем
Form3.  Предположим, отделу охраны
потребуются сведения о сотрудниках организации, чтобы подготовить им новые
пропуска. Совершенно очевидно, что, во-первых, отдел кадров не должен
передавать все сведения о сотрудниках, во-вторых, отдел охраны должен готовить
пропуска только тем сотрудникам, у которых они закончили срок действия или для
вновь принятых сотрудников. Следовательно, 
инициатором формирования списков на выдачу пропусков сотрудникам
является отдел кадров, который ведёт учёт движения кадров, в соответствии с
приказами по организации. Поэтому, для формирования списка сотрудников на
выдачу пропусков в отделе кадров должны провести отбор кандидатур из общего
списка, который оформляется в виде отдельного файла и направляется на сервер.

                Решение поставленной задачи
осуществим средствами
Excel. Алгоритм
формирования файла из таблицы
Excel состоит из
ряда последовательных действий, которые включают:


просмотр списка фамилий сотрудников предприятия;


выбор из списка фамилий и других данных, кому потребуются пропуска;


формирование файла с данными и отправка его отделу охраны предприятия.

                Подготовим интерфейс для работы
сотрудника отдела кадров с приложением
Excel, внешний вид заготовки представлен на рис 14.

Рис. 14. Интерфейс пользователя для подготовки файла с
данными

                В качестве нового элемента
управления, который появился на листе
Excel,
выбран:  Поле
со списком
(
ComboBox). Этот элемент управления
обладает дополнительными свойствами по сравнению с элементом Список (
ListBox). Например, можно сделать раскрывающийся список или, непосредственно,
в окне отобразить сведения о его состоянии (чем мы и воспользуемся).

                Разработку программы
целесообразно начать последовательно для каждого элемента. Чтобы не путаться
примем в качестве соглашение – имена объектов на листе (элементов управления)
оставим такими, какие им присваивает система. Первое событие, которое должен
осуществить сотрудник при работе с данным приложением – указать условия отбора
данных из таблицы со сведениями о персонах. Для этого необходимо нажать на
кнопку с наименованием «Ввести условия отбора», по заданному условию в элементе
Поле со списком должны отобразиться
данные о сотрудниках. Поэтому, требуется организовать диалог пользователя с
приложением, для этого воспользуемся стандартным диалоговым окном на основе
функции
InputBox(). Программные коды для обработки события Click по
кнопке представлены на рис 15.

Рис. 15. Программа для обработки события — нажать на
кнопку «Ввести условие отбора»

                Следует напомнить, что в
программах используют переменные, зона действий которых распространяется
по-разному. Чтобы переменная была доступной в пределах приложения для всех
процедур, тогда её необходимо объявить в общей области, если нет необходимости
использовать имя переменной во всех процедурах, тогда её объявляют внутри
процедуры или внутри оператора. При рассмотрении данной задачи, на это будет
обращено внимание. Для отбора сведений из таблицы
Excel по заданному
критерию необходимо сформировать промежуточные массивы, в которых будут
находиться данные, предназначенные для записи в файл. Массивы будут создаваться
в процедуре отбора данных из таблицы, а использоваться в процедуре записи
данных в файл, поэтому оператор:
Dim M1(20), M2(20), M3(20), M4(20) As String,
создан раньше объявления всех процедур. По той же причине объявление  переменной Dim k As Integer для подсчёта
количества отобранных записей вынесено в начало программы. Обратите внимание,
что оператор
Dim i As Integer находится внутри процедуры, т.к. действие переменной i распространяется только при просмотре ячеек таблицы.
Операторы, позволяющие осуществлять удаление данных из поля со списком и из
заголовка списка, используются для того, чтобы пользователь мог несколько раз
менять своё решение при вводе критерия отбора, не выполняя при этом
дополнительных действий. Организация диалогового окна осуществляется функцией
InputBox(), у которой задаются аргументы, а результаты ввода
сохраняются в переменной
y. Рассмотрим несколько подробнее содержимое функции InputBox().

    y = InputBox(«Введите год, ниже
которого будут отобраны сведения из таблицы», _

    «Вы указываете критерии отбора»)

Диалоговое
окно для ввода критерия отбора данных из таблицы представлено на рис 16, у
которого есть поле для заголовка, тело для отображения инструкций, указаний и
т.п., а так же есть текстовое окно для ввода данных. При нажатии на кнопку ОК
на диалоговом окне, значение из текстового окна передаётся переменной
y. Если
пользователь нажмёт на кнопку
Cancel, то будет
сгенерирован код конца работы, который передаётся переменной
y, обычно
программисты это учитывают и создают программные коды, которые анализируют,
какую кнопку нажал пользователь. В рассматриваемом примере оператор If y
<> «» Then проверяет наличие любого кода, введённого в
текстовую строку. В том случае, если нажата кнопка
Cancel, то код будет пустым, после этого оператора ни одна
инструкция в программе не будет выполнена (завершение проверки условия
End If стоит в самом конце процедуры).

Рис. 16. Диалоговое окно для ввода критерия отбора
данных из таблицы

                Далее, в процедуре по отбору
данных встречается конструкция
WhileWend, которая была описана в предыдущем примере. Внутри
этой конструкции встроен условный оператор
IfThenElse. Условием является сравнение текущего значения в
ячейках с датой поступления сотрудников на работу с критерием отбора. Так как в
ячейках находятся данные в числовом формате, а критерий отбора введён в
текстовом виде, то использована функция
Int(), с помощью которой текстовые данные преобразуются в
целые числа (заметим, что аргументы функции всегда заключены в круглые скобки).
При выполнении заданного условия (“<=”) осуществляется  сохранение данных в массивах (Фамилия, Имя,
Отчество, Должность) и идёт заполнение строк элемента управления —Поле со списком. По окончанию просмотра
ячеек таблицы со сведениями о годе поступления на работу, осуществляется замена
текста в заголовке элемента – Поле со
списком
. На рис 17 показан результат отбора записей при заданном критерии
отбора (в диалоговом окне указан 2008 год).

Рис. 17. Пример отбора данных по заданному критерию

                Передача, отобранных сведений из
таблицы, осуществляется после того, как пользователь нажмёт на кнопку
«Подготовить файл». В этом случае будет запущена процедура, текст которой
представлен на рис 18.

Рис. 18. Программные коды процедуры — запись данных в
файл

                Самым простым способом создавать
файл является — указать полный путь к файлу в программе, хотя есть и другие
способы, о которых будет сказано ниже. В данном примере рассмотрим, как
работает оператор
Open. Для создания файла
необходимо задать путь к файлу: «
C:PrimvbaSved.txt«, режим
For Output
(открыть файл для записи), и задать указатель файла — 
As #1
(цифра может быть любой). Если файла с указанным именем нет, то он будет
создан, если такое имя существует, то запись начнётся с начала, а все
предыдущие записи будут удалены. Путь к файлу
C:Primvba — содержит: имя диска, и наименования папок. В том
случае, если наименований указанных папок не существует, то система даст сообщение
об ошибке. Завершение записи осуществляется операцией закрытия (добавление
специального символа в конец файла) с помощью оператора
Close #1. В данном примере, необходимо содержание массивов
с данными передать в файл, для чего использована конструкция
ForNext.

В операторе Write #1,
M1(j); M2(j); M3(j); M4(j) даётся ссылка
на указатель файла и после запятой указывается список переменных, отделяемых
друг от друга знаком разделителя (в данном примере знаком разделителя данных
является – точка с запятой «;»). Результаты созданного файла с оператором
Write показаны
на рис 19. Вместо оператора
Write можно
использовать оператор
Print, тогда
знак разделителя не будет отображаться.

Рис. 19. Отображение в приложении Блокнот, записанных
сведений в файл

                Пользователь получает на экране
компьютера подтверждение (рис 20), которое создано с помощью функции
MsgBox(). Обратите внимание, что при задании в функции
аргумента – vbInformation, на диалоговом окне отображается только одна кнопка и
символ информация.

Рис. 20. Сообщение пользователю о завершении записи
данных в файл

                Процедура очистки окон
запускается нажатием на кнопку «Очистить список», как она создавалась описание
дано в предыдущем примере.

Посмотрите
работу примера в Excel
2003

Посмотрите
работу примера в Excel
2007

Использование файлов с
данными для работы в
Excel

         Созданный
файл со списком сотрудников удобно использовать для работы различных
подразделений. Предположим, что отдел охраны просматривает на сервере вновь
поступившие файлы для выполнения функции – подготовка пропусков сотрудникам
организации. Попробуем упростить работу сотрудника отдела охраны, для чего
рассмотрим два варианта работы со списком, который находится в отдельном файле.
Для достижения, поставленной цели, необходимо создать шаблон выходного
документа – это образец пропуска на работу, а так же необходим интерфейс на
листе
Excel, с помощью которого можно отобрать данные и заполнить
бланк пропуска. Откроем новую книгу в
Excel
2003 (попутно покажем, какие различия встретятся при работе с
Excel 2007). В новой книге создадим шаблон для типового
пропуска, который после заполнения будет распечатывать сотрудник отдела охраны.
Назовём лист «Пропуск», а шаблон будет выглядеть, как показано на рис 21.

Рис. 21. Лист Excel с заготовкой для вывода данных

                Рамка обозначает внешний вид
документа (Пропуск), внутри рамки обведены ячейки, которые залиты одним цветом.
На документе размешены его атрибуты (рисунок в виде флага; название
организации; заголовок документа 
«Пропуск»; реквизиты документа фамилия, имя, отчество, должность).
Ячейки
B3:G3 объединены ,
в которых записано название организации, в строке 4 крупным шрифтом написано
слово «ПРОПУСК», в ячейке
B8 – Должность и
т.д. (все ячейки, которые использованы для шаблона на рис 21 выделены другим
цветом). В ячейке С10 изменён формат представления данных с Общего на формат Дата, обратите внимание, что в эту ячейку вставлена формула:
=СЕГОДНЯ(). Варианты автоматизации получения пропуска для сотрудника с
заполненными данными, отличаются друг от друга интерфейсом, который расположен
на листе с наименованием «Список».

Вариант 1. Импорт текстовых данных на
лист
Excel

 Список
сотрудников из файла поместим на листе
Excel с наименованием «Список», для чего откроем в строке Меню→ Данные→ Импорт внешних
данных→ Импортировать данные
, как показано на рис 22.

Рис. 22. Подготовительные действия для импорта таблицы
из файла

                При импорте внешних данных на
лист
Excel, сначала следует найти местоположение файла (с
помощью окна – Импорт текстового файла),
а затем провести три последовательных шага в приложении – Мастер текстов.

                Для тех, кто работает с Excel 2007, необходимо в Меню раскрыть вкладку Данные,
чтобы обратиться к списку команд группы – Получить
внешние данные
. На рис 23 выделена пиктограмма – Из текста, которая запускает диалоговое окно для поиска файла и Мастер текстов, при работе с этими
диалоговыми окнами, все последующие действия при импорте текстового файла будут
аналогичны, как в
Excel 2003.

Рис. 23. Импортирование внешних данных, созданных в
виде текста

                Приложение Мастер текстов преобразует строки в отдельные записи (создаёт
списки), поэтому при выполнении второго шага, следует указать, что является
символом-разделителем в файле. На рис 24 показано окно Мастер текстов, в котором отмечен символ-разделитель – запятая.

Рис. 24. Пример преобразования строк текста в
табличные данные с помощью приложения Мастер
текстов

Теперь следует позаботиться, чтобы данные о сотруднике
с листа «Список» попали на лист «Пропуск». Передача сведений о сотруднике,
которые предварительно выделяют в списке, будет осуществляться после нажатия на
кнопку с наименованием «Подготовить пропуск» на листе с наименованием «Список»,
как показано на рис 25.

Рис. 25. Пример импортированного списка на лист Excel для
подготовки пропуска сотруднице Вавиловой

                Так как на листе Excel размещена
одна кнопка, то только для неё создаётся программный код, представленный на рис
26. Рассмотрим некоторые особенности программы, с помощью которой создаётся
диалоговое окно для ввода диапазона ячеек со сведениями о сотруднике, а затем
эти сведения передаются на лист «Пропуск» в шаблон.

                Воспользуемся возможностями
объекта
Application, который обладает обширной коллекцией свойств,
позволяет программно установить значения многих опций для объектов, которые
используются в программе
VBA (подробно об
объекте
Application можно
ознакомиться в литературе, например, [1]). В данной программе используем
функцию
InputBox() в качестве диалогового окна для сбора параметров о
сотруднике. Поэтому, сначала дадим описание параметров этого окна в операторе
Set (Установить), запись будет выглядеть следующим
образом:

  Set input_sveden = Application.InputBox( _

        Title:=»Найдите необходимую ячейку», _

        Prompt:=»Выделите в таблице ячейки в строке,»
&
Chr(13) _

                   & «которые
относятся к сотруднику», _

       Type:=8)

Зададим имя переменной — input_sveden, которой
будут передаваться сведения из текстовой строки диалогового окна. 
Application.InputBox — это новый объект (на основе функции InputBox). Объекту следует задать параметры, которые являются
атрибутами функции, к которым относятся:

Title – строковое выражение, отображаемое в строке
заголовка диалогового окна;

 Prompt
строковое выражение, отображаемое как сообщение в диалоговом окне;

Type – параметр, указывающий что должно отображаться в текстовом
окне (код 8 – адрес выделяемой ячейки на листе).

Рис. 26. Программные коды для обработки выделенной
строки после свершения события
Click
при передаче в шаблон документа

                Для того, чтобы осуществить
работу с выделенными ячейками на листе, необходимо выяснить их количество
(количество столбцов и количество строк), что осуществляется операторами:

    Num_col = input_sveden.Columns.Count

    Num_row = input_sveden.Rows.Count

Операторы цикла осуществляют просмотр содержимого
переменной
input_sveden с последующей записью в индексированный массив
Mas(i), далее формируется общая строка
FIO, содержащая фамилию имя и отчество сотрудника.  Для создания сообщения о выполнении работы использован
оператор
MsgBox (обратите внимание, в
операторе не используются круглые скобки). Но вместе с тем, в этот оператор
встроена функция Chr(13), которая воспринимает код 13, как возврат каретки и
перевод курсора на новую строку, что позволяет в диалоговом окне сообщение
делить на несколько строк. Пример результатов выполнения запроса показан на рис
27.

Рис. 27. Пример использования оператора MsgBox для формирования
сообщения в виде диалогового окна

                Сохранив значения в переменных FIO и Mas(4) для заполнения пропуска (так можно собрать из
таблицы большое количество данных, а в нашем примере показано, как выбирать
данные и объединять в одну строку), осталось их передать на другой лист, что
выполняется с помощью следующих кодов:

     Worksheets(«Пропуск«).Cells(6, 2) = FIO

     Worksheets(«Пропуск«).Cells(8, 3) = Mas(4)

Посмотрите
пример работы программы для Excel

Пример,
который работает только в
Excel 2007 и
выше

Вариант 2. Использование данных
непосредственно из файла.

Можно создать интерфейс для пользователя на листе Excel, для того, чтобы (в данном примере) сотрудник отдела
охраны, имел возможность выбирать файл, отбирать необходимые сведения,
распечатывать бланк пропуска с готовыми данными. Создадим новую книгу
Excel, присвоим ей имя – Form5. Первый лист книги назовём «Сотрудники», а второй
лист с наименованием «Пропуск» скопируем из предыдущего примера. На листе
«Сотрудники» расположим необходимые элементы управления как показано на рис 28.

Рис. 28. Проект интерфейса пользователя на листе Excel

Для осуществления операции просмотра файлов введём
новый элемент управления, на панели инструментов пиктограммой  Другие
элементы
, После нажатия на эту пиктограмму, откроется список, из которого
выберем — 
Common Dialog (Общий диалог). Класс объектов
управления Общий диалог позволяет открыть в работающем приложении одну из
стандартных диалоговых панелей, например, Открытие файла (
File Open), Сохранение
файла (
File Save As), Выбор шрифта (Select Font) и
другие, как показано на рис 29 выделяют название элемента, а затем нажимают на
кнопку ОК.

Рис. 29. Выбор дополнительного объекта в разделе Windows
Другие элементы

Пиктограмма  Общий
диалог
появится на листе
Excel, после
чего необходимо установить свойства элемента. В данном примере, свойству
Name (Имя)
присвоим –
CD1. Напомним, что элементы
управления, которые относятся к интерфейсу пользователя,  по умолчанию имеют заданные свойства, изменим
некоторые свойства, которые перечислены в таблице 2.

Таблица 2. Наименования элементов управления и их
свойства в программе

Наименование элемента

Свойство

Значение

CommandButton1

Name

CB1

Caption

Посмотреть файлы

Label1

Caption

Для выбора фамилии из
списка, выделите её мышкой

ListBox1

Name

LB1

CommandButton2

Name

CB2

Caption

Подготовить пропуск

Label2

Caption

Вы выбрали фамилию, можете
сделать новый выбор

Label3

Name

LL2

Caption

«Пусто»

                Интерфейс пользователя включает
две кнопки. Первая кнопка с наименованием «Посмотреть файлы» должна обеспечить пользователя
поисковым средством для выбора файла (где бы он не находился), отобразить
фамилии сотрудников в виде списка на экране в объекте с именем
LB1. Программа обработки события, представлена на рис
30.

Рис. 30. Программа обработки события при нажатии на
кнопку с наименованием «Поиск файлов»

                Обратите внимание, что в общую
область вынесено два оператора
Dim, для
описания переменных, которые будут использованы во всех процедурах. В то время
как переменные
Puti и k
используются только в процедуре CB1_Click(). В
предыдущих примерах было дано подробное описание работы с оператором
Ifelseend и функцией MsgBox(),
поэтому покажем новые элементы программы. Так, запись CD1.ShowOpen, есть не что
иное, как открытие диалогового окна для поиска файлов. Метод
ShowOpen позволяет
запустить диалоговое окно в режиме поиска файлов, как показано на рис 31.

Рис. 31. Диалоговое окно для поиска файлов

                Путь к файлу (перечень устройств
и папок), а так же имя файла сохраняются в переменной: Puti = CD1.Filename, где
CD1 – имя объекта Общий
диалог
, а
Filename – свойство, которому передаётся путь к файлу.

Оператор
Open Puti For Input As #2
указывает, что необходимо открыть содержимое файла, находящегося по адресу
Puti.

Новый
приём создания цикла основан на конструкции
WhileWend. Внутри
цикла необходимо заполнить строки поля со списком (его имя
LB1), и передать все значения о сотрудниках в массивы.
При просмотре файла, неизвестно, сколько находится записей в нём, поэтому, в
операторе начала цикла в качестве условия стоит признак конца файла –
EOF (End of File).
Когда условие выполнится, произойдёт выход из цикла.

                Следующее действие, которое
должен совершить пользователь, это отметить в списке фамилию и нажать на кнопку
«Подготовить список» (можно упростить задачу, ликвидировать эту кнопку, а
обрабатывать событие щелчка мышью в строке списка). Для обработки события –
щелчок мыши, программа будет выглядеть, как показано на рис 32.

Рис. 32. Программа формирования документа на листе
«Пропуск»

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

j
= LB1.ListIndex переменная
j используется
для получения данных из массивов. Результаты работы пользователя представлены
на рис 33.

Рис. 33. Результаты работы с интерфейсом на листе Excel

Посмотрите
пример в Excel

Пример,
который работает только в Excel
2007 и выше


Раздел 3. Макросы в Excel

Направления
использования макросов

         При автоматизации работ с часто повторяющимися
действиями, процесс их выполнения осуществляется с помощью макросов. Макрос (
macro) – это последовательность команд, которые написаны на
VBA и
которые хранятся в стандартном модуле среды разработки
VBA приложений.
Макросы могут осуществлять широкий спектр задач от простых вычислений до
создания пользовательского интерфейса вашего приложения. Выделяются три
основные разновидности макросов
[3]:

Ø  Командные – основными предназначениями, которых
является выполнение действий, аналогично командам меню.

Ø  Пользовательские функции – работают аналогично
встроенным функциям
Excel. Особенностью
пользовательских функций в том, что они используют значения передаваемых им
аргументов, производят некоторые вычисления и возвращают результат в точку
вызова, но не изменяют среды приложения.

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

Корпорация Microsoft
разработала и внедрила в приложения
MS Windows специальную программу, которую назвали – Макрорекордер.
С его помощью осуществляется формирования программного кода, который
оформляется в виде отдельного модуля. Суть работы макрорекордера заключается в
следующем:

§  Пользователь запускает программу – Начать запись (в дальнейшем –
программа).

§  Программа перехватывает события, которые вызывает
пользователь (выделение ячеек на листе, нажатие в строке меню на строку с
указанием программы, например, копировать) и преобразует эти события в
стандартные команды и операторы на языке
VBA.

§  Пользователь завершает создание макроса – Остановить запись.

§  Программа формирует модуль, имя которому присваивает
пользователь.

Необходимо отметить, что модуль относится к открытой
книге
Excel, в которой создавался макрос, хотя его можно скопировать
и перенести в другую книгу.

Создание макросов

         Прежде
чем запустить макрорекордер для создания макроса, надо тщательно спланировать
ваши действия. Чтобы освоить порядок работы, создадим интерфейс пользователя в
виде командного макроса. Например, созданный список сотрудников (пример 1 –
Form1.xls) необходимо
скопировать в новую книгу
Excel и
сохранить её в определённой папке. Для выполнения данной работы потребуются
типовые команды, которые нет смысла самому писать на
VBA, пусть это сделает макрорекордер.

                Для активизации макрорекордера в
Excel 2003 в строке Меню→ Сервис→Макрос→
Начать запись, как показано на рис 34.

Рис. 34. Порядок запуска макрорекордера через строку
Меню

                Тот, кто работает с Excel 2007
и выше, следует в строке меню открыть вкладку Вид, а затем раскрыть пиктограмму
Макросы, чтобы выбрать команду Запись макроса, как показано на рис 35.

Рис. 35. Последовательность доступа к команде Запись
макроса

                После того, как будет выполнена
команда Запись макроса, на экране
появится окно с одноимённым названием, которое показано на рис 36.

 

Рис. 36. Окно для записи параметров макроса

                В диалоговом окне Имя макроса предлагает система, можно
дать ему любое имя, например, Копия_списка.
Обратите внимание, что в именах не должно быть пробелов. Поле Сочетание клавиш состоит из обязательной
клавиши
Ctrl и той, которую назначает пользователь (можно не
назначать). Система предлагает сохранить
макрос в различных вариантах, выбираем – Эта
книга
.

Поле
Описание макроса заполняется
пользователем в текстовом окне.

После того, как будет нажата кнопка ОК в окне Запись макроса, макрорекордер начнёт
отслеживать действия пользователя и создавать программу на
VBA. Алгоритм действий понятен, состоит из следующих
этапов: открыть имеющийся файл с данными; выделить область ячеек, которые
следует скопировать; выбрать из меню команду копировать; открыть новую книгу
Excel; дать команду вставить на лист содержимое буфера
обмена; сохранить новую книгу в виде файла; закрыть этот файл. Завершение
работы макрорекордера осуществляется командой ,
которая находится в группе команд Макрос.

                 Посмотрите, как работает созданный макрос,
который можно запустить сочетанием клавиш
Ctrl+a.

Работа с макросом

                Созданный макрос «Копия_списка»
сохраняется в виде отдельного модуля в книге файла
Form1.xls. Для того,
чтобы посмотреть содержимое программы на
VBA или запустить макрос, достаточно открыть диалоговое
окно, нажав на команду в меню ,
представленное на рис 37.

Рис. 37. Диалоговое окно Макрос с вариантами работы с
макросом

Кнопка
 предназначена для запуска, выбранного из
списка макроса (в данном примере всего один макрос).

Кнопка
 предназначена для просмотра текста макроса в
редакторе и исправления необходимых параметров (прежде чем начать
редактирование кодов, следует запустить режим конструктора). Для рассматриваемого
примера, программные коды макроса показаны на рис 38.

Рис. 38. Программные коды макроса

Кнопка
 позволяет открыть режим редактирования
программных кодов, аналогично кнопке «Войти», но сразу входит в режим
конструктора.

Кнопка
 находится в неактивном состоянии, для того
чтобы её активизировать, необходимо перейти в режим работы с формой.

Кнопка
 позволяет из имеющегося списка макросов
удалить тот, который будет выделен.

Кнопка
 запускает диалоговое окно Параметры макроса,
которое показано на рис 39.

Организовать командные функции с помощью макроса
довольно просто, но, как можно заметить существуют некоторые неудобства.
Во-первых, макрос это статичная программа, например, если исходный список будет
расширен, то запуск макроса приведёт к тому, что копироваться будут ячейки
таблицы, которые были заданы диапазоном при записи макроса. Во-вторых, путь к
файлу, который должен быть создан, задаётся в абсолютном виде, следовательно,
всегда следует соблюдать порядок перечня устройств и папок, которые записаны в
макросе. В-третьих, запуск макроса осуществляется самим пользователем либо с
помощью сочетания клавиш, либо через меню. Указанные недостатки, можно обойти
путём введения на лист
Excel
элементов управления, которые находятся
на панели инструментов Формы.

Рис. 39. Диалоговое окно для изменения параметров уже
созданного макроса

Использование панели
инструментов Формы при создании макросов

         Панель
инструментов Формы содержит в своём составе элементы управления, к которым
можно «привязаться» с помощью макрорекордера. Для открытия указанной панели
инструментов в
Excel 2003, следует в строке Меню→Вид→Панели
инструментов→Формы, внешний вид которой показан на рис 40.

Рис. 40. Панель инструментов Формы

                Тот, кто использует Excel 2007, панель инструментов Формы может найти через
открытие вкладки Разработчик→ Вставить (режим конструктора не активизировать),
как показано на рис 41.

Рис. 41. Элементы управления формы

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

  1. Откроем файл с
    исходными данными под именем
    Forma1.xls.
  2. Создадим новую книгу
    в
    Excel, сохраним её под именем Form6.xls.
  3. Откроем панель
    инструментов Формы для файла
    Form6.xls.
  4. Поместим на листе с
    наименованием «Просмотр списка» элемент управления  — список.
  5. Запустим команду  для записи макроса, в окне Запись макроса присвоим имя макросу
    Получить_список.
  6. Сделаем щелчок
    правой клавишей мыши по элементу Список, в открывшемся окне выберем строку
    с наименованием «Формат объекта».
  7. В открывшемся окне,
    которое показано на рис 42, под названием Форматирование объекта на вкладке Элемент управления необходимо щёлкнуть по значку  — Формировать список по диапазону, а
    затем в книге под именем
    Form1
    выделить столбец с фамилиями.
  8. Закрыть окно Форматирование объекта кнопкой ОК.

После выполнения пункта 8 список будет заполнен
фамилиями, которые получены с листа под наименованием «Кадры» из книги –
Form1.

Рис. 42. Окно для форматирования объекта – Список

Закройте эту форму, сохраните книгу Form6 и тоже закройте. Можете убедиться, что макрос
заполнения списка создан, программа которого представлена на рис 43.

Рис. 43. Программа макроса для заполнения объекта Список данными

 Теперь
попробуйте открыть файл
Form6.xls, к сожалению, в открытой книге будет только элемент
управления Список совершенно чистый,
хотя, макрос был создан. Причина такого результата кроется в том, что источника
информации нет (книга со списком сотрудников закрыта). Создадим ещё один
макрос, обращение к которому, позволяет открыть книгу с именем
Form1. В книге Form6
дадим команду для макроса – Начать запись,
откроем файл
Form1.xls, дадим команду – Остановить
запись
. Таким образом, создан второй модуль, программа которого показана на
рис 44.

Рис. 44. Программный код макроса для открытия файла Form1.xls

                Таким образом, создано два
модуля с программами, которые необходимо объединить. Это делается с помощью
командной кнопки, которую разместим на листе книги
Form6. Используем панель элементов Формы, на которой выбираем элемент  — кнопка, располагаем его на листе.

Для
такого элемента система открывает диалоговое окно — Назначить макрос объекту, которое представлено на рис 45. В том
случае, если макрос ещё не готов, то нажмите на кнопку «Отмена» в окне
«Назначить макрос объекту». Когда понадобится выполнить операцию привязки
макроса к кнопке, тогда щёлкните правой клавишей мыши по объекту, а затем в
открывшемся списке выберите необходимую строку с наименованием команды, как это
показано на рис 46.

Обратите внимание, что панель инструментов Формы самостоятельно создаёт процедуры
для обработки событий, не требует перехода в режим конструктора, но вместе с
тем, имеет ограниченные возможности для изменения свойств объектов.

Рис. 45. Диалоговое окно назначения макроса объекту
кнопка

Рис. 46. Пример использования всплывающего меню для
работы с объектом

                Посмотрите работу
примера в Excel 2003

                Этот
вариант будет работать только в Excel
2007 и выше


Раздел 4.
Пользовательские функции в
VBA

Создание
пользовательских функций

         Пользовательские
функции оформляются в виде отдельных модулей, используются для организации
вычислений, решения аналитических задач, создания гистограмм и графических образов
на листе
Excel. Каждый модуль представляет
собой законченный процесс обработки информации, часто модули используют
неоднократно в различных областях приложения. Отличительной особенностью
пользовательской функции является то, что в ней изменяются параметры, в
зависимости от условий текущего момента, что делает приложение и интерфейс
более универсальными. В предыдущих разделах было показано, как составлять
программы с помощью редактора
VBA и макрорекордера при написании макросов. Следует
заметить, что внимательный просмотр кодов для макросов во многом упрощает
изучение приёмов программирования на
VBA.
Напомним, что
Excel обладает собственными объектами, такими, как книга,
листы, ячейки, области, поэтому, при написании программы приходится
использовать их имена, а так же менять им свойства, поэтому, легче всего
написать простейший макрос, а затем коды перенести в программу, которая и
называется пользовательской функцией. Любое приложение, которое создаётся на
VBA, программируется по заданному алгоритму. Разработке
алгоритма предшествует постановка задачи. Очень часто задачу ставят в общем
виде, когда указывают цель, а затем разделяют (декомпозируют) её на отдельные
элементы, состоящие из одного или нескольких модулей. Связывание модулей
осуществляется с помощью элементов управления и событиями, которые они
вызывают.

                Начало работы пользователя
осуществляется с открытия новой или уже существующей книги
Excel. Для Excel 2003 при
обращении к макросам необходимо щёлкнуть по строке ,
после чего будет открыто окно редактора
Visual Basic, в этом
окне существует строка меню, пиктограммы, которые отражают наиболее часто
используемые команды меню, окно для отображения объектов
Excel (слева),
рабочее поле для просмотра кодов или элементов формы. На рис 47 отображено
открытая книга
Excel и текстовый редактор Code.

Рис. 47. Книга Excel и редактор Visual Basic для создания модуля

                В данном разделе будет
рассмотрена практическая задача, которая требует ввода данных, их
преобразования, проведение сложных вычислений, отображение результатов в
табличном виде и в форме диаграммы. Цель рассмотрения примера – ознакомиться с
встроенными функциями, организации работы с массивами, передачи данных на
другие листы, создание диалоговых окон и правила работы с условными
операторами.

Постановка задачи

         Необходимо
создать приложение на
Excel, которое позволяет
обрабатывать анкеты, полученные от экспертов, в которых эксперты оценивали
проекты (факторы, объекты) с помощью баллов. Конечной целью обработки данных
является получение консолидированного мнения совокупности экспертов по
распределению порядковых мест, оцениваемых проектов. Исследователь должен
получить аналитическую оценку согласованности мнений экспертов, чтобы принять
гипотезу о достоверности полученных результатов. В основу работы с бальными
оценками закладывается метод ранжирования объектов (проектов). Предположим, что
сбор мнений экспертов осуществляется в виде анкет, в которых просят установить
приоритеты среди проектов, причём, чем лучше (весомее, важнее) проект, тем балл
эксперт устанавливает более высокий. Интерфейс пользователя (того, кто
обрабатывает содержимое анкет) должен позволять вводить по строкам оценки
экспертов, получать окончательные результаты. Внешний вид приложения в
Excel для обработки материалов из анкет экспертов методом
ранжирования (данные введены) представлен на рис 48.

Рис. 48. Интерфейс пользователя для обработки
материалов из анкет экспертов методом ранжирования

Проект приложения на Excel

         На
рис 48 показано, что книга
Excel
содержит три листа. На первом листе
расположены командные кнопки и поле для ввода данных из анкет экспертов. Кнопка
 позволяет пользователю удалять ранее введённые
данные с листа под наименованием «данные». Эта кнопка создана с помощью панели
инструментов
Visual Basic, в
дальнейшем будет сказано,  почему так
поступили. Кнопка  предназначена для запуска  процедуры подготовки работы с данными, что
требует вывода на экран дополнительных диалоговых окон. Кнопка создана с
помощью панели инструментов Формы,
что позволяет процедуру обработки данных сохранить в виде отдельного модуля
(хотя, модуль можно создать и по-другому). Кнопка  позволяет запускать процедуру преобразования
бальных оценок экспертов в ранги (порядковые места), вычислять коэффициент согласованности
мнений экспертов, который в статистике называют коэффициентом конкордации
W [4], а так же построить диаграмму распределения мест
ранжируемых проектов (объектов). Отражение результатов работы модуля после
вызова процедуры «Расчёт» осуществляется на листах книги с наименованиями
«результаты» и «график». Кнопка создана с помощью панели инструментов Формы.

                Посмотрите,
как работает приложение.

Описание процедур
обработки событий для приложения – «ранжирование объектов»

Процедура – Очистить
поле

         Прежде,
чем заполнить таблицу, пользователь удаляет с листа под наименованием «данные»,
те числа, которые могут остаться после предыдущей работы. Для этого достаточно
нажать на кнопку «Очистить поле». В качестве примера, как можно использовать
макрос в программе обработки события при нажатии на кнопку, поступим следующим
образом. Создадим макрос с помощью макрорекордера, который назовём «Очистить».
Запустим макрорекордер, выделим на листе с именем «данные» область
A7:P48, выполним
команду
Delete (Удалить), откроем лист с именем «результаты», выделим
область
A2:R26, всё удалим,
откроем лист с именем «график», удалим содержимое из области
A2:R2, откроем лист
с именем «данные», установим указатель курсора в ячейку
A7, остановим запись макрорекордера. В итоге,
программный код для удаления данных от предыдущих расчётов будет сформирован
(самим ничего писать не пришлось), который показан на рис 49. Может быть, это
не самый лучший вариант создания кода, т.к., на всякий случай, выделяли
избыточное количество ячеек на листах, но результат достигнут – получен макрос
(создан модуль). Тогда достаточно для кнопки  написать всего один оператор: Call Очистить, где оператор
Call (вызвать)
использует в качестве метода макрос под именем «Очистить».

Рис. 49. Программные коды макроса и процедуры
обработки события
Click при нажатии на командную кнопку с наименованием
«Очистить поле»

                Процедура по удалению данных со
всех листов книги
Excel работает автономно, это сделано специально.
Пользователь должен иметь возможность неоднократно проводить расчёты с уже
введёнными данными, расширять количество столбцов и количество строк в исходной
таблице или вносить изменения в некоторых ячейках таблицы (часто это делают,
когда задаются вопросом «что будет, если?», т.е. исследователь начинает
изменять данные и просматривать новый вариант результатов).

Процедура — Подготовка
к вводу данных

         Автор
не стремился создать универсальную программу для ввода данных на лист
Excel. Это вызвано тем обстоятельством, что основной целью
разбора, используемых приёмов при составлении программы, демонстрация правил
работы с
VBA и некоторых его возможностей. Процедура подготовки к
вводу данных представлен на рис 50.

Рис. 50. Программные коды процедуры подготовки к вводу
данных

                В разрабатываемых процедурах, будут использоваться
переменные, которые содержат данные и сведения о количестве, рассматриваемых
проектов (количество заполненных столбцов), а так же сведения о количестве
экспертов, чьи мнения необходимо учесть при выполнении расчётов (количество
строк в таблице), это целые числа. Матрица с оценками должна храниться в виде
массива. Поэтому, введены операторы
Global для описания указанных
переменных, действие которых распространяется на все процедуры.

                Ещё один приём создания объекта
в виде диалогового окна в программе на
VBA отображён программными кодами (рис 50):

 
ThisWorkbook.Sheets(«данные»).Activate

      u = InputBox(«ВВЕДИТЕ К-ВО
ПРОЕКТОВ», «ВВОД ПАРАМЕТРОВ»)

    u1 = InputBox(«ВВЕДИТЕ К-ВО
ЭКСПЕРТОВ», «ВВОД ПАРАМЕТРОВ»)

                Где, ключевое слово This указывает, что на листе с именем «данные» формируются
диалоговые окна для ввода данных.

Оператор: If u = «» Or u1 = «» Then проверяет
одновременно содержимое введённых пользователем данных в диалоговые окна, в
случае, если пользователь не заполнит одно из окон, программа даст сообщение с
помощью оператора
MsgBox. Для задания имени листа, с
которым необходимо работать, в программе требуется указать оператор
With
(совместно с), который заканчивается
оператором
End With. Внутри
этой конструкции можно вставлять любые операторы и функции, которые будут
участвовать в обработке данных на указанном листе книги. Как видите, для
каждого листа осуществляется очистка рабочего диапазона ячеек методом
Clear (очистить). Обратите внимание, что в каждом цикле (их
три) используется переменная
i, действие которой распространяется только на момент
работы оператора цикла.

Процедура
выполнения расчётов

                Для того, чтобы заменить бальные
оценки экспертов на ранги, необходимо выполнить несколько последовательных
действий, которые выделены в отдельные блоки в программе.

Первый блок (рис 51) предназначен для считывания с
листа под наименованием «данные» введённые баллы по проектам от каждого
эксперта. Вначале объявляются переменные оператором
Dim, которые участвуют в различных блоках программ.
Переменные
a() и b() являются массивами для хранения бальных оценок от
эксперта и преобразованные в дальнейшем в ранги. Обратите внимание, что
оператор .Cells(i + 6, 1) = i начинается
с точки, в котором ячейке с заданными параметрами (номер строки и номер
столбца) на листе с наименованием «данные» присваивается порядковый номер
эксперта, что отображается на листе в ячейках, начиная с ячейки
A7 и ниже. Точка перед методом Cells ставится без
указания имени книги и листа, что было назначено в операторе With Worksheets(«данные»).

Рис. 51. Программные коды для обработки строки с
введёнными баллами от одного эксперта

                Второй блок (рис 52)
предназначен для выяснения величин баллов в просматриваемой строке оценок,
которые присвоил эксперт, рассматриваемым проектам. В массиве
o3() создаём просто номера с 1 до n, где n – число
проектов, которые оценивал каждый эксперт. При нахождении максимального числа
баллов в строке (цикл просмотра строки ниже), осуществляется хранение в
переменной
f — максимального числа, 
а в переменной
j1 — порядкового
номера в строке.

Рис. 52. Выбор наибольшего балла в строке оценок

                Третий блок (рис 53)
предназначен для преобразования баллов в ранги. Преобразование бальных оценок в
ранги (порядковые места) несколько позволяет независимо от выбранной шкалы
экспертами для оценки проектов, свести все мнения экспертов к единой порядковой
шкале. Комментарии, которые находятся на рис 53, созданы для того, чтобы
просматривался алгоритм перехода от одной шкалы измерения к другой. Основой
этого алгоритма является – работа с массивами данных, поэтому для этой цели
использована конструкция оператора
For Next.

                Четвёртый блок (рис 54)
предназначен для записи рангов (порядковых мест, которые были получены после
преобразования баллов) на лист с наименованием «результаты». Обратите внимание,
что в первом блоке обработка введённых данных осуществлялась по строкам,
поэтому, в четвёртом блоке результаты передаются на лист с наименованием
«результаты» тоже по строкам. Но, необходимо было обработать все строки, для
этой цели, в начале программы был введён оператор For ij = 1 To m, действие которого заканчивается в четвёртом блоке
оператором  Next ij.

Рис. 53. Преобразование баллов в ранги

Рис. 54. Перенос оценок в виде порядковых мест на лист
с наименованием «результаты»

                Пятый блок (рис 55) предназначен
для вычисления коэффициента конкордации (
W) и для отображения результатов в виде гистограммы на
листе с наименованием «график». Коэффициент
W вычисляется по
стандартной формуле [4], который очень полезен для анализа, полученных
результатов. Статистически доказано, что значимость коэффициента конкордации
зависит от числа рассматриваемых объектов (в данном примере под объектом
понимают проекты) и количества экспертов, которые принимали участие в
оценивании объектов. Используя соответствующие таблицы [5], можно сделать заключение
о приемлемости результатов (чем величина коэффициента конкордации ближе к
единице, тем лучше). Пользователь приложения может удалить из общего массива
оценки того эксперта, которые значительно отличаются от оценок большинства
экспертов, а затем снова провести расчеты, чтобы убедиться, что согласованность
мнений экспертов стала выше.

Рис. 55. Программные коды для отображения результатов
на листе с наименованием «график»

                Наглядное представление
выполненных расчётов всегда помогает исследователю (пользователю программы)
принимать решение о том, на сколько, его удовлетворяют результаты. На листе с
наименованием «график» отображается гистограмма, которая содержит сведения о суммарных
количествах рангов по каждому, оцениваемому объекту (проекту). На рис 5
6 показан лист с наименованием «график».

Рис. 56. Результаты оценки семи проектов девятью
экспертами

                Для
того чтобы построить диаграмму, используя язык
VBA, потребуется воспользоваться методом Add Charts, указать ссылку на тот диапазон, на основе которого
строится диаграмма, задать тип диаграммы, ввести в свойства текстовые значения
наименования осей и названия диаграммы (как это делается при работе с мастером
диаграмм). Получится достаточно большое количество программных кодов. Можно всё
сделать гораздо проще, как это выполнено в данном примере. А именно, на листе с
наименованием «график» с помощью мастера построения диаграмм задан диапазон
ячеек с данными (в данном случае ограничились 15 ячейками второй строки листа,
в котором отображаются суммарные величины рангов по проектам), выбран вид
диаграммы и внесены описания осей. После заполнения данных на первом листе
приложения, диаграмма появится автоматически.

Если вы полностью ознакомились с алгоритмом проведения
расчётов коэффициента конкордации при вводе бальных оценок проектов от
нескольких экспертов, то можете
использовать приложение для собственных исследований.


Список литературы

1.       Гарнаев А.Ю. Самоучитель VBA. – 2-е изд. Перераб. И допю – СПб.: БХВ-Петербург,
2004.

2.       Джон Уокенбах. Microsoft Office Excel 2007.
Библия пользователя.: Пер. с англ. – М.:
ООО «И.Д. Вильямс», 2008.

3.       Рудикова Л.В. Microsoft Excel для студентов. –Спб.:
БХВ-Петербург, 2007.

Hosted by uCoz

Понравилась статья? Поделить с друзьями:
  • Практические задания по microsoft word 2007
  • Практические задания по excel формула если
  • Практические задания по excel спо
  • Практические задания по excel создание таблица
  • Практические задания по excel создание таблиц