Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Интерфейс среды Microsoft Visual Basic (MVB)




Для открытия «среды» MVB быстрее всего нажать “Alt F11”. Ниже заголовка окна MVB располагается главное меню, а ниже главного меню панель инструментов. (Заголовок, главное меню и панель инструментов кратко описаны в приложении 5.2.A). Ниже панели инструментов идут основные окна: окно проекта (Project), окно свойств (Properties), окно (редактора) кода либо окно (редактора) формы (UserForm). (На. рис. 5.2.A в правом верхнем углу отображено окно кода, а на рис. 5.2.B — место окна кода занимает окно формы.) Ниже окна кода (или формы) при необходимости помещаются одно-два дополнительных окна. На рис. эти два дополнительных окна — окно просмотра значений переменных (Watches) и окно локальных переменных (Locals) — расположены рядом, но они могут быть расположены и одно под другим.

Рисунок 5.2.A — Пример вида среды MVB. В правом верхнем углу отображено окно кода (code) модуля формы

В проекте автоматически создается модуль для каждого рабочего листа и для всей книги, для каждой формы пользователя, классов и модуль для макросов. По своему предназначению модули делятся на два типа: модули объектов и стандартные. К стандартным модулям относятся те, которые содержат макросы. [Такие модули могут добавляться в проект командой Вставка►Модуль(Insert Module)]. К модулям объектов относятся модули, связанные с рабочей книгой, рабочими листами, формами и модули класса.

Рисунок 5.2.B — Пример вида среды MVB. В правом верхнем окне отображено окно редактора формы. В левом верхнем углу этого окна отображена конструируемая форма с заголовком Info, а в правом нижнем — панель Toolbox

Основная задача окна проекта — перемещение разработчика между различными компонентами проектов и различными проектами, а также удаление (экспорт), вставка (импорт) элементов проекта и копирование частей одного проекта в другой. В окне проекта отображаются проекты всех открытых книг. Например, в верхней части окна проекта, приведенного на рис., видны проекты загруженных надстроек: AcrobatPDFMaiker и funcres. Если проект защищен, то код его модулей нельзя просмотреть. Содержание незащищённых проектов можно открыть. Это позволяет легко копировать формы и коды из одного проекта в другой, что убыстряет процесс создания новых приложений.

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

В окне Properties выводятся основные установки свойств выбранной формы или её элемента управления, и изменяются эти значения. В верхней части формы находится список (), позволяющий выбирать: чьи свойства отображать в форме. Можно выбрать саму форму или размещенный на ней элемент управления.

Более детальное описание окон приведено в приложении 5.2.B.

Пример 5.2, демонстрирующий введенные понятия и возможности среды. Пусть на одном из листов книги, допустим «Основы программирования», нужно создать кнопку с именем Greeting и текстом Hello world. При нажатии на эту кнопку должна вызываться форма с заголовком Info, выводящая информацию:
приветствие Hello world! (увеличенным размером)
количество открытых книг;
количество листов в активной книге;
количестве диаграмм на отдельных листах в открытой книге;
количестве внедрённых диаграмм на указываемом пользователем листе.

К форме предъявим дополнительные требования:
она должна закрываться только по нажатию размещенной на ней кнопки “Ok”;
при нажатии в заголовке этой формы кнопки x, должно выдаваться поясняющее сообщение:
Эта форма закрывается нажатием кнопки "Ok".

0. Если панель Visual Basic в Office 2003 или раздел ленты Разработчик в Office 2007 отсутствуют не выведены, то удобно добавить эти элементы[*]

1. Для создания кнопки

Office 2003 на панели Visual Basic нажать на кнопку Control Toolbox и в открывшейся панели инструментов навести на элемент Command Button, щелкнуть по нему, а затем на перейдя на лист поставить кнопку.

Office 2007 на вкладке Разработчик в группе Элементы управлении на комбинированной кнопке Вставить из верхней группы Элементы управления формы раскрывающегося списка выбрать Кнопка, перетащить на лист и растянуть.

Открыв в Office 2003 на вставленной кнопке локальное меню, выберем пункт Свойства (Properties). В открывшемся окне присвойте свойству Name (левая колонка) значение Greeting, а свойству Caption значение Hello world. После этого двойным щелчком откроем форму листа, в которую уже будет вставлена заготовка обработчика нажатия на кнопку:
Private Sub Greeting_Click()

 

End Sub

В Office 2007 отредактировать текст на кнопке, введя Hello world!, а затем изменить название кнопки, например, редактируя в самом левом окне строки формул. Вызвав локальное меню выбрать Назначить макрос. В открывшемся диалоговом окне перейти к созданию макроса. Заготовка для обработчика нажатия кнопки будет вставлена в стандартный модуль.

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

2.1. Выбрав в меню Insert Form вставим заготовку формы. Поскольку это первая форма в проекте, то она будет иметь имя UserForm1. Перейдем в окно Properties и изменим заголовок формы, присвоив свойству Caption значение Info. Если форм в проекте много, то полезно им задавать «содержательные» имена. Несмотря на то, что в данном проекте будет одна форма, в учебных целях присвоим свойству (Name) значение frm_Info.

2.2.0 Добавим на форму Label (на панели Toolbox, кнопка с буквой A). Свойству Caption присвоим значение Hello world! На формах метки могут размещаться «в двух качествах»: «поясняющие надписи» и «поля для вывода результатов». Удобно называть и «поясняющую надпись», и «поле для вывода результата» практически одним именем. В связи с этим, в случае меток первого типа, почти всегда к содержательному имени спереди добавляется префикс указывающий: эта метка служит для вывода поясняющей надписи. Не без недостатков, но вполне приемлемым способом является добавление перед содержательным именем метки, играющей роль надписи, префикса lbl (см. приложение 5.2.D, где приведен один из вариантов префиксов имён). В данном примере шуточный текст “Hello world!” можно причислить к поясняющей надписи. Поэтому, присвоим свойству (Name) значение lbl_Gretting. Далее, увеличим размер шрифта этой метки. Для этого перейдем к строке свойства Font. В правой колонке появится квадрат с троеточием. После щелчка по этому квадрату откроется диалоговое окно Шрифт, в котором можно выбрать параметры шрифта. Выбрав размер шрифта, нажмем Ok. После изменения размера, текст может не поместиться в первоначально заданные границы. Размеры метки можно изменить при помощи мыши.

После этого перейдем к добавлению следующих меток. Как и в этом пункте будем по очереди перетаскивать новые метки с панели Toolbox, изменять (Name) и Caption, а у меток для вывода результатов ещё и цвет.

2.2.1 Для отображения на форме числа открытых книг понадобится поясняющая надпись

(Name) — tbl_Books_Count, Caption — “Открыто книг:”

и «поле» для вывода самого числа

(Name) — Books_Count, Caption — “”.

Цвет поля для вывода информации удобно изменить. Например, задать свойству BackColor значение &H8000000E&, выбрав его из раскрывающегося списка.

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

2.2.2 Для отображения на форме числа листов в Активной книге понадобится поясняющая надпись

(Name) — lbl_AB_Sheets_Count, Caption — “В активной книге листов:”

и «поле» для вывода самого числа

AB_Sheets_Count, Caption — “”

2.2.3 Для отображения на форме числа диаграмм на отдельных листах в Активной книге понадобится поясняющая надпись

(Name) — lbl_AB_Charts_Count, Caption — “В активной книге диаграмм:”

и «поле» для вывода самого числа

(Name) — AB_Charts_Count, Caption — “”.

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

(Name) — lbl_AB_List, Caption — “В листе N”

(Name) — lbl_AB_List_Chart, Caption — “активной книги диаграмм:”

(Name)— ListChart_Count, Caption — “”

А для поля ввода номера используем элемент управления TextBox (кнопка с надписью ab| на панели Toolbox).

(Name) — tb_AB_List, Value — 0.

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

2.2.5 Наконец создадим на форме кнопку Ok, воспользовавшись элементом управления CommandButton (кнопка с изображением прямоугольника на панели Toolbox).

(Name) — cb_Ok, Caption — “Ok”.

В результате на шаге 2 построена форма с внешним видом, отображенным на рис. 5.2.B.

2.3 На этом шаге выполним программирование обработчиков событий и макроса заготовка которого была получена на шаге 1.

2.3.1 Перейдем к модулю содержащему макрос и введем тело процедуры: frm_Info.Show. Выполнение этой строки приводит к отображению формы при нажатии кнопки на листе. В результате процедура обработки нажатия кнопки на листе будет иметь вид

Private Sub Greeting_Click()

frm_Info.Show

End Sub

2.3.2.A Для начального присвоения значений полям формы напишем процедуру обработки события инициализации. Поскольку свойство Count имеет тип Long — длинное целое (о типах переменных будет подробней рассказано в разделе 5.3), а свойство Caption имеет тип String, то значение Count следует преобразовать в строку. Простейшим способом является использование функции Str. Далее, до того как пользователь выберет номер листа, можно вывести данные о числе внедрённых диаграмм на первом листе.

Private Sub UserForm_Initialize()

Books_Count.Caption = Str(Workbooks.Count)

AB_Sheets_Count.Caption = Str(Worksheets.Count)

AB_Charts_Count.Caption = Str(Charts.Count)

tb_AB_List.Value = 1

ListChart_Count.Caption = Str(Worksheets(1).ChartObjects.Count)

End Sub

2.3.2.B Запрограммируем событие QueryClose. Для вывода сообщения в VBA есть функция Msg. Подробное описание этой функции можно прочесть в справке. В редакторе кода есть часто используемая возможность. Если в нём набрать название функции, поставить на него курсор и нажать “Ctrl + F1”, то будет открыта страница справки с описанием этой функции. Для реализации нашего примера нам понадобится только текст сообщения, кнопка и заголовок (title) — заголовок разрабатываемой формы (в более сложном случае это может быть название программы «макроса»). Код vbInformation — обеспечивает вывод на сообщении значка (i), см. рис. 5.3. Значение возвращаемое функцией не используется.

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

Dim Response As Integer

If CloseMode <> 1 Then

Cancel = 1

Response = MsgBox("Эта форма закрывается нажатием кнопки Ok", vbInformation + vbApplicationModal, "Info")

End If

End Sub

Теперь форма не будет закрыта, пока не будет выполнена команда Unload.

2.3.2.C Обработчик нажатия на кнопку Ok.

Private Sub cb_Ok_Click()

Unload Me

End Sub

2.3.2.D Обработчик события BeforeUpdate. После ввода пользователем номера листа, в обработчике проверяется его допустимость. Номер введённого листа возвращает свойство Value элемента управления tb_AB_List. Если номер листа не попадает в допустимый диапазон (от 1 до числа листов в книге), то параметру Cancel присваивается значение True, свойству Value — значение до изменения, и выдаётся звуковой сигнал командой Beep. [Команда Beep выдаёт сигнал при помощи системного динамика. В Windows поданный таким образом сигнал может быть достаточно тихим. Кроме того, не во всех современных компьютерах подключён системный динамик.] Для ветвления кода по условию «номер листа не попадает в допустимый диапазон» используем оператор if. Простейшая форма этого оператора имеет вид:

If condition Then

statement

statement

End if

Здесь condition — логическое выражение. Если это выражение принимает значение True, то выполняются операторы между Then и End if. (Более детально оператор if рассмотрен в следующем разделе)

Private Sub tb_AB_List_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

If (tb_AB_List.Value < 1) Or (tb_AB_List.Value > Application.Worksheets.Count) Then

Cancel = True

tb_AB_List.Value = tb_AB_List.BoundValue

Beep

End If

End Sub

В результате выполнения этой процедуры, при воде пользователем нуля, отрицательного или положительного номера, большего числа страниц в книге, будет восстанавливаться прежнее значение. Также будет восстановлено прежнее значение, если случайно будет введено текстовая строка, например, буква “s”. Однако, если пользователь введёт дробное значение[†], то обработчик пропустит эту оплошность.

Рисунок 5.3 — Слева — вид окна с сообщением слева, справа — вид формы

2.3.2.E Обработчик события AfterUpdate. Свойство Value содержит номер листа — «введённый пользователем текст», а для доступа к определенному листу семейства может использоваться строка («имя листа») и индекс в семействе (номер листа). Для преобразования хранимого в свойстве Value текста (номера листа) в число можно воспользоваться функцией Val. Эта функция может преобразовывать не только строку, содержащую целые числа в число, но и строку, содержащую число с плавающей точкой. Однако она рассчитана только на точку в качестве разделителя дробной и целой части.

Private Sub tb_AB_List_AfterUpdate()

ListChart_Count.Caption = Str(Worksheets(Val(tb_AB_List.Value)).ChartObjects.Count)

End Sub

 

2.4 На этом написание кода завершено. Можно перейти на лист, содержащий кнопку, и выполнить тестирование. На рис. 5.3 справа приведен вид формы, после того как пользователь ввел в поле 2 (на втором листе участвовавшей в тестировании книги, действительно, размещено три внедрённых диаграммы). Если не закрыть форму и попытаться выполнить «Завершение работы Windows», то при выполнении завершения будет выдано сообщение «Невозможно закрыть Microsoft Office Excel» и после некоторого ожидания сообщение, приведенное на рис. 5.4. Нажав на этом сообщении кнопку Отмена, можно вернуться в Excel,

Рисунок 5.4 — Сообщение системы при завершении работы без закрытия разработанного окна «Info»

закрыть форму, нажав на кнопку Ok, и после этого, повторить «Завершение работы Windows». К сожалению, несмотря на ожидание, возможно повторение ситуации: будет опять выдано сообщение «Невозможно закрыть Microsoft Office Excel». Однако, если после закрытия формы также закрыть и сам Excel, то завершение работы Windows пройдет успешно.




Поделиться с друзьями:


Дата добавления: 2014-11-07; Просмотров: 623; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.043 сек.