ПЗ-9. Использование VBA для разработки модулей программ (массивы). 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

ПЗ-9. Использование VBA для разработки модулей программ (массивы).



Решим несложную задачу розыгрыша одномерных случайных массивов с использованием редактора Visual Basic Excel. Окно этой прикладной программы можно вызвать несколькими способами:

1) вкладка Разработчик- Visual Basic;

2) сочетание клавиш Alt-F11, (повторное сочетание возвратит нас в окно Excel);

3) щелчок правой кнопкой мыши (ПКМ) по корешку листа, пункт Исходный текст.

 

 

Экран редактора разбит на три части. Справа одно большое окно кода. Здесь будем писать программу на VBA. Слева вверху " Project - VBAProject " - Окно проекта. Это окно, в котором выбираем расположение того кода, который будем писать (если вы его закроете, вновь открыть можно, нажав Ctrl+R). В этом окошке находится папка "Microsoft Excel Objects", а в ней список листов книги и ниже сама книга (ЭтаКнига). Каждый лист, а также сама книга Excel считается отдельным объектом. Нажатие двойным кликом на любом из них открываем окно кода для этого объекта. Увидеть, чье окно кода открыто, можно, посмотрев на заголовок редактора кода (UserForm - на рисунке), или на список элементов (активный подсвечен).

Есть особенность: код, написанный в окне конкретного объекта (листа или книги), доступен только этому объекту. Чтобы писать универсальный код (макрос), который можно применять без привязки к документу, нужно создать Модуль. (Мы создавали макрос Возврат, применяемый на любом листе книги, в отдельном модуле, создаваемом автоматически при написании макроса).

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

Есть еще одно окно - это Окно отладчика (Immediate). Как правило, оно закрыто. Открыть его можно, нажав Ctrl+G (или найти в меню View). Оно расположено по умолчанию под окном кода.

Модуль. Создание. В окне проекта (VBA Project(аКнигаСодержание…)) или в папке "Modules" нажимаем ПКМ, выбираем Insert/ Module. Видим, что появилась новая "папочка" "Modules" и в ней новый документ "Module1" (если папка была, то появится только очередной экземпляр модуля).

Сразу переименуем его в " Module_Form1mer ". Для этого становимся курсором в окне проекта на Module1. Ниже, в окне свойств, видим всего одну строчку: надпись "(Name)" и правее "Module1". Изменяем эту надпись на указанную, нажимаем Enter. Видим, что модуль везде поменял название.

В поле кода запишем заголовок программки (процедуры), это имя будет именем макроса. Нажмем Enter и внутри заготовки напишем строку команды для открытия (Show) формы:

Sub massiv1mern()

Form1merMassiv.Show

End Sub
Саму форму Form1merMassiv нам предстоит еще создать.

Форма. В окне проекта (VBA Project(аКнигаСодержание…)) нажимаем ПКМ, выбираем Insert/UserForm. Сразу же меняем ее имя в окне свойств (рис.выше). Затем свойство Caption меняем на надпись «Одномерный массив из 10 случ.чисел» В этой форме разместим (нарисуем) элементы управления: текстовый бокс и 2 командные кнопки, эти элементы находятся в окошке Toolbox, которое появляется при активизации формы (см.рисунок ниже, кружочком выделено текстовое поле). Меняем свойства Caption кнопок, как показано на рисунке, имена оставляем по умолчанию.

Процедуры (подпрограммы, командные коды).

Щелкаем 2 раза ЛКМ по второй кнопке, в окне кода появляется заготовка процедуры щелчка (Click) кнопкой, где мы набираем команду скрытия формы и очистку текстового поля:

Private Sub CommandButton2_Click()

Form1merMassiv.Hide

TextBox1 = ""

End Sub

Щелкаем 2 раза ЛКМ по первой кнопке и пишем программу (блок команд):

Option Explicit 'оператор проверки объявлений используемых переменных

Private Sub CommandButton1_Click()

Dim M(1 To 10) As Integer ‘Объявление массива целых чисел

Dim N(1 To 10) As Single ‘Объявление массива дробных чисел

Dim i%, k% ‘Объявление переменных в виде целых чисел

TextBox1 = "" ‘Очистка текстового бокса перед новым массивом

Randomize 'оператор, который запускает начальное значение случайных чисел

Debug.Print "массив M(i) от 0 до 100" 'Заголовок массива

For i = 1 To 10 'цикл от 1 до 10

M(i) = Rnd() * 100 'генерирование случайного числа

Debug.Print M(i); ' так будет печать в одной строке, напр.: 74 38 37 12 37 2 9 24 45 75

' если; (точку с запятой) не поставить, будет печать чисел в столбик!!!!

' ниже печать чисел в текстовом окне формы в виде нарастающего итога

TextBox1 = TextBox1 + CStr(M(i)) + " " ' пробел для раздела чисел

Next i

Debug.Print 'пустая строка

Debug.Print "массив N(k) от -1 до 1" 'Заголовок массива

For k = 1 To 10

N(k) = (Rnd() * 2) - 1

Debug.Print N(k) ' будет печать в столбик!!!!

' здесь можно задать распечатку массива в текстовом окне формы в любом виде

Next k

MsgBox "Оба массива в окне отладки!!!"

End Sub

Все готово.

Эту программу можно запустить на исполнение прямо из окна VB, нажав кнопку Run Sub (рис.слева).

Результат можно посмотреть в окне отладки, который вызывается из меню View VB или сочетанием Ctrl+G.

 

 

Но сделаем доработку.

На титульном листе через Разработчик вставляем элемент управления формы Кнопка. [Если вкладки Разработчик нет, активизируем ее: Файл à Параметры Excel à «птичка» в квадратике Разработчик]. В появившемся окне Назначение макроса щелкаем по подпрограмме (макросу) massiv1mern. Тем самым присваиваем его кнопке, меняем ее название на «Построить одномерные массивы». Щелкаем по этой кнопке. Появляется форма. Щелкаем по кнопке «Заполнить два 1-мерных массива» на форме. Один массив появляется в текстовом окне, а второй (вместе с первым) находится в окне отладки в редакторе Visual Basic:

Массив M(i) от 0 до 100

1 43 42 17 49 74 56 86 37 52

Массив N(k) от -1 до 1

-0,6241974

-0,4315228

-0,283106

0,9673221

0,5040017

0,9050713

0,0435375

-0,5218856

0,999457

-0,1647906

Окно отладки Immediate вызывается (см.выше).

Итак, мы разработали программы обработки событий (нажатие кнопки). Кроме того, применили макрос с одной командой для открытия формы.

Давайте разберем приведенный выше в качестве примера макрос (процедуру) massiv1mern.

  • Любой макрос должен начинаться с оператора Sub, за которым идет имя макроса и список аргументов (входных значений) в скобках. Если аргументов нет, то скобки надо оставить пустыми.
  • Любой макрос должен заканчиваться оператором End Sub.
  • Все, что находится между Sub и End Sub - тело макроса, т.е. команды, которые будут выполняться при запуске макроса. В данном случае макрос открывает форму. Можно в событие открытия поместить и другие команды, например, вывести окно сообщения (MsgBox) с приглашением разыграть массивы элементов.

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

[Мы уже использовали этот способ при создании кнопок открытия листов книги в ПЗ-4.]

Макрорекордер - это небольшая программа, встроенная в Excel, которая переводит любое действие пользователя на язык программирования VBA и записывает получившуюся команду в программный модуль. Если мы включим макрорекордер на запись, а затем начнем выполнять какие-либо действия (построение прогрессии, например), то макрорекордер начнет записывать команды вслед за каждым нашим действием и, в итоге, мы получим подробную программу (процедуру).

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

У такого способа есть свои плюсы и минусы:

  • Макрорекордер записывает только те действия, которые выполняются в пределах окна Microsoft Excel. Как только вы закрываете Excel или переключаетесь в другую программу - запись останавливается. Более того, он не понимает команды, которые вы будете давать с командной строки (например, открыть другой документ).
  • Макрорекордер может записать только те действия, для которых есть команды меню или кнопки в Excel. Нельзя написать макрос, который делает то, что Excel никогда не умел (сортировку по цвету, например, или что-то подобное).
  • Если во время записи макроса макрорекордером вы ошиблись - ошибка будет записана. Однако можно давить на (кривую) кнопку отмены последнего действия (Undo) - во время записи макроса макрорекордером она не просто возвратит действия в предыдущее состояние, но и стирает последнюю записанную команду в коде VBA.

Чтобы начать запись, необходимо нажать кнопку Запись макроса на вкладке Разработчик (стр.23),а затем настроить параметры записываемого макроса в окне Запись макроса (там же). Записав необходимые действия, надо нажать кнопку окончания записи.

Управление всеми доступными макросами производится в окне, которое можно открыть с помощью кнопки Макросы на вкладке Разработчик, или сочетанием клавиш Alt+F8.

  • Любой выделенный в списке макрос можно запустить кнопкой Выполнить.
  • Кнопка Параметры позволяет посмотреть и отредактировать сочетание клавиш для быстрого запуска макроса.
  • Кнопка Изменить открывает редактор Visual Basic (см. выше) и позволяет просмотреть и отредактировать текст макроса на VBA.

 

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

 

В качестве дополнительного задания для конструирования объектов с помощью VBA ниже приведена распечатка программы ZadanieAAA() моделирования двумерного массива случайных целых чисел. Для нее можно создать форму с текстовым полем, куда (дополнительно к распечатанной программе) отправлять получаемые результаты обработки массива (суммы строк и столбцов, …), как это было сделано выше в одномерном массиве. Либо ограничиться просмотром результата программы в окне Immediate.

=========================================================================

Option Explicit



Поделиться:


Последнее изменение этой страницы: 2017-01-20; просмотров: 497; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.22.100.180 (0.02 с.)