Сделай Сам Свою Работу на 5

Создание нестандартных функций





 

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

Синтаксис написания нестандартной функции:

Function имя [список аргументов] as тип_данных

тело функции

End Function

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

Function имя_функции (аргумент1 as тип_данных, аргумент2 as тип_данных, …) as тип_данных

Тип данных, указанный после списка аргументов – тип данных, возвращаемого функцией значения.

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



Имя__функции = значение

Тело функции может содержать объявление переменных, которые требуются для выполнения работы функции, эти переменные недоступны вне функции. Для выхода из функции в любом месте и прекращения ее работы можно использовать инструкцию Exit Function.

Пример функции:

Function Len_R(r as Single) as Single

Len_R = 2*3.14*r

End Function

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

Function Power(num As Double, pwr As Integer) As Double

If pwr = 0 Then ‘ условие нужно для того, чтобы циклическая структура рекурсивной функции имела точку завершения

Power = 1 ‘присвоение значения вместо вызова функции для завершения циклической структуры рекурсии



Else

Power = num * Power(num, pwr - 1) ‘вызов функцией самой себя

End If

End Function

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

 


Создание UDF-функций

В данной главе будут рассмотрены способы создания и использования функций, которые можно создавать самостоятельно для последующего использования их в рабочих листах Excel на равнее с встроенными функциями. Такие функции носят название User defined functions (UDF) и на их действия накладываются определенные ограничения. Эти функции могут быть использованы в качестве формулы в ячейках листов Excel. Ограничения, накладываемые на действия таких функций, вытекают из одного условия: UDF никоим образом не должна изменять среду Excel, т.е. она не может выделять, вставлять, удалять или форматировать данные рабочего листа, диаграммы рабочего листа или любого другого листа, не может добавлять, удалять или переименовывать рабочий лист или рабочую книгу, а так же изменять вид экрана и т.д.

Создавать такие функции можно только в модулях! При этом необходимо добавить имя функции в список функций: Вставка → Функции → Функции, создаваемые пользователем.

Создание необязательных аргументов функции



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

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

Пример:

Функция, выводящая на экран дату в определенном формате. Необязательным аргументом будет формат вывода даты на экран. Обязательный аргумент – значение даты.

В функции будет использована стандартная функция Format.

Описание стандартной функции Format:

Format(arg1 as Date, arg2 as String) as String

Примеры вызова функции:

MsgBox Format(#3/8/2001#, "Short Date")

Результат: 08.03.2001

MsgBox Format(#3/8/2001#, "Medium Date")

Результат: 08-мар-01

MsgBox Format(#3/8/2001#, "Long Date")

Результат: 8 Март 2001г.

 

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

Function FDate (Date_ as Date, Optional Format_ as String = “S”)

По умолчанию, дата выводится в кратком формате, например: 08.03.2001.

 

В случае нашей функции “L” обозначает длинный формат даты, “M” – средний формат даты, “S” – короткий формат даты.

Рассмотрим теперь полный текст функции, где выбор типа форматирования будет осуществляться посредством оператора выбора Select Case:

 

Function FDate(Date_ As Date, Optional Format_ As String = "L")

Dim s As String

Select Case Format_

Case Is = "M"

s = Format(Date_, "Medium Date")

Case Is = "S"

s = Format(Date_, "Short Date")

Case Is = "L"

s = Format(Date_, "Long Date")

End Select

FDate = s

End Function

 

Вызов функции:

 

Sub MacroF()

MsgBox FDate(Now, "M")

End Sub

 

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

 

Рассмотрим, какие еще форматы может возвращать функция Format:

В VBA существует два способа задания формата вывода данных:

· с помощью поименованных форматов

· с помощью символов для создания формата

Поименованные форматы

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

Формат Currency преобразует число в денежный формат со знаком доллара перед числом, разделителем тысяч и двумя знаками после запятой.

Формат Fixed форматирует число таким образом, что имеется хотя бы один символ перед десятичной точкой и хотя бы два символа - после. Например:

Format(5.6, “Fixed”) результат: 5.60

Формат Percent форматирует число в процентный вид путем умножения его на 100 и добавлением символа процента. Например:

Format(0.56, “Percent”) результат: 56%

Формат Scientific форматирует число в стандартную экспоненциальную форму. Например:

Format(0.56, “Scientific”) результат: 5.6E-01

Форматы Yes/No, True/False, On/Off возвращают соответственно строку Yes, True или On, если числовой аргумент функции Format не равен нулю, и строку No, False или Off, если аргумент равен нулю.

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

0 – количество этих символов указывает количество символов, которые необходимо показать при выводе числа, например:

Format (15.68, 000.0000) результат: 015.6800

# - показывает цифру, если она присутствует в позиции, в противном случае не показывает ничего, например:

Format(4.5556, "#.#") результат: 4.5

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

Format(44.5556, "#.#") результат: 44.5

$ - выводит на экран в соответствующей позиции символ $, напрмер:

Format(4.5556, "$#.#") результат: $4.5

% - умножает число на 100 и выводит знак % в указанной позиции, например:

Format(4.5356, "#.#%") результат: 453.5%

. – понятно из предыдущих примеров. Не рекомендуется ставить десятичную точку перед символом решетки #, т.к. это может привести к нежелательному виду числа, напрмер:

Format(4.55, "#.#%") результат: 455.%

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

Format(3.6556, "0,000,000") результат: 0 000 004

Е- - представление числа в виде экспоненты только для отрицательных степеней

Е+ - представление числа в виде экспоненты для положительных и отрицательных степеней, примеры:

Format(3.6556, "0,000E-00") результат: 3 656Е-03

Format(253.6556, "#.#E+00") результат: 2.5Е+02

/ - разделитель в форматах даты, например:

Format(#12/3/1998#, "dd/mm/yy") результат 12.03.98

Одиночный символ y – отображает день года как число от 1 до 366

Format(#12/3/1998#, "y") результат: 337

w – показывает день недели как число от 1 до 7 (1 соответствует воскресению, 2 – понедельнику и т.д.)

ww – показывает неделю года как число от 1 до 54

если вы напишете www, то выведется сначала порядковый номер недели в году, а потом день недели, например:

Format(#7/7/2007#, "ww") результат: 27

Format(#7/7/2007#, "w") результат: 7

Format(#7/7/2007#, "www") результат: 277

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

Format(Now, "hh:mm:ss") результат: 13:50:02

@ - выводит пробел, если в соответствующей строке отсутствует соответствующий символ, например:

Format(“yes”, @@@@@) результат: “ yes” (два пробела yes)

 


Обработка ошибок

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

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

Если ошибка времени выполнения происходит в любой строке после инструкции On Error GoTo метка,то вместо выдачи сообщения об ошибке и прерывания выполнения программы, управление переходит к строке, идентифицированной меткой. В этой строке или начиная с этой строки должны располагаться инструкции по обработке ошибки. Это могут быть действия, предлагающие исправить ошибку, например, повторить ввод данных, если он был ошибочным, выбрать выполнение пользователем других действий или сообщение об ошибке, но уже более содержательное, дающее представление о конкретной причине невозможности дальнейшего выполнения программы, чем стандартное сообщение об ошибке времени выполнения, генерируемое компилятором VBA. Сообщение так же может содержать информацию об изменении хода выполнения программы. В любом случае, реакция на возникновение обрабатываемой ошибки определяется и задается разработчиком с целью повышения удобства работы с программой.

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

После строк, в которых возможно возникновение ошибки, должна быть расположена инструкция On Error GoTo 0,которая отменяет действие инструкцииOn Error GoTo метка.Эта инструкция обязательно должна присутствовать, т.к. в последующих строках программы может возникнуть ошибка, требующая другой обработки.

Таким образом, место в программе в котором возможно возникновение ошибки, которая будет обработана разработчиком, должно начинаться с инструкции On Error GoTo метка, заканчиваться инструкциейOn Error GoTo 0и иметь программные строки обработки, начинающиеся со строки, обозначенной меткой.

 

Пример: Проинициализировать массив целых чисел из 5 элементов.

Sub test_err()

Dim a(1 To 5) As Integer, i As Integer

On Error GoTo 10

For i = 1 To 5

a(i) = InputBox("Введите значение " & i & "-го элемента массива:", "Ввод данных")

Next i

On Error GoTo 0

GoTo 15

10: MsgBox ("Ошибка ввода данных")

GoTo 20

15: MsgBox ("Массив удачно проинициализирован")

20:

End Sub

В данном примере производится обработка ошибки ввода. Ошибка возникает в случае несоответствия типов, т.е. если в строку ввода вводится не целое число. Тогда управление программой переходит к строке с меткой 10, где осуществляется вывод сообщения об ошибке. Далее производится безусловный переход к строке 20, после которой следует завершение программы, т.к. необходимо пропустить строку об удачной инициализации массива. Если же массив проинициализирован без ошибок, то производится безусловный переход к строке с меткой 15, где выводится сообщение об удачной инициализации массива.


Работа с формами

 

 

Формы – это возможность визуального представления различных данных, используемых в программе (приложении, макросе). Данные можно разделить на входные, выходные и промежуточные.

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

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

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

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

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

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

Объект – основной элемент VBA MS Excel. Каждый объект обладает набором методов и свойств, через которые осуществляется работа с ним.

Методы – это действия, которые можно совершать над объектом. Методы по своей сути очень похожи на функции или процедуры. Например, метод Clear служит для очистки объекта от его содержимого. Метод Show делает объект видимым, метод Hide, наоборот, скрывает из видимости объект. Синтаксис использования объекта:

Имя_объекта.метод

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

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

Range(“A1:A10”).Select ‘к объекту диапазона ячеек от А1 до А10 применяется метод выделения. В результате этого действия будут выделены соответствующие ячейки.

UserForm1.Show ‘к объекту формы с именем UserForm1 применяется метод появления формы на экране.

Application.Quite ‘к объекту приложение применяется метод его завершения.

Свойства служат для описания, задания характеристик объектов. Например, размера объекта, его цвета, шрифта, положения на экране и т.д. изменение характеристик объекта производится посредством изменения значений его свойств.

Синтаксис присвоения или изменения значения свойства объекта:

Имя_объекта.свойство = значение

Все свойства имеют значения по умолчанию.

 

 

Объект UserForm

 

Объект, представляющий пользовательскую форму носит соответствующее название UserForm. Каждому объекту UserForm присущи определенные свойства, методы и события, которые он наследует от класса объектов UserForms. Формы и элементы управления составляют основу современного визуального интерфейса. Все элементы управления и технология работы с ними в основном стандартизованы и похожи для разных платформ и программных сред. Эти объекты помещены в специальную библиотеку MSForms.

Отдельная форма представляет собой один элемент коллекции – объект класса UserForm и задает одно окно. Все формы приложения представляют собой коллекцию UserForms и имеют стандартные методы и свойства. Каждая форма имеет свое имя, которое является ее свойством и может (рекомендуется) быть изменено пользователем. При создании формы (добавлении формы в приложение) ей автоматически присваивается имя UserFormN, где N – порядковый номер формы в данном файле MS Excel.

Чтобы создать новую форму нужно перейти из области данных в MS Excel в область разработки (Alt+F11), в проектной части нажать правую кнопку мыши, выбрать в меню пункты Insert→UserForm (рис. 50).

 

 

Рис. 50. Создание формы

 

При этом автоматически будет создана новая форма с именем UserForm1 (рис. 51). Окно формы появится на экране, вместе с ним появится еще одно окно под названием ToolBox, в котором содержатся обозначения компонентов, которыми можно наполнять форму, а также окно Properties – UserForm1, которое содержит свойства созданной формы. В названии окна свойств присутствует имя формы, которое можно изменять. Свойства формы можно устанавливать в окне свойств или программным путем.

 

Рис. 51. Окна формы, компонентов и свойств формы

 

Рассмотрим свойства объекта UserForm.

Свойства формы могут быть заданы в процессе редактирования через окно Properties (свойства), которое имеет две вкладки Alphabetic и Categorized. Свойства в этих вкладках расположены по алфавиту и по категориям соответственно.

Не зависимо от того, какая вкладка будет выбрана, работа с назначением свойств будет одинаковой: слева располагается имя свойства, а справа – поле для задания его значения.

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

Первое свойство Name задает имя формы. Чтобы задать имя формы нужно стереть написанное по умолчанию имя и написать новое, затем перейти с этой строки на другую и новое имя формы сразу отобразиться в названии объекта в панели окна Microsoft Visual Basic. Имя формы не появляется на самой форме. Имя используется для ссылок на объект в программном коде, например, когда требуется активизировать в программе один из методов объекта или изменить одно из свойств объекта. Чтобы изменить заголовок формы, которое будет отображаться на панели окна формы нужно изменить свойство Caption.

Свойство BackColor задает цвет поля формы. Цвет отображается в поле свойства в виде буквенно-цифрового кода, но чтобы изменить цвет не требуется разбираться в значении символов кода. При установке курсора в поле изменения цвета, в его правой части появляется кнопка выпадающего меню, при нажатии на эту кнопку всплывает панель с двумя вкладками (рис. 52), пользуясь данными которых можно выбрать желаемый цвет. Левая панель Palette (рис. 52, а) содержит ряд наиболее контрастных цветов, а правая панель System содержит стандартные цвета выбранной системной палитры с наименованиями применения каждого цвета в системе (рис. 52, б).

Свойство BorderColor устанавливает цвет бордюра, но по умолчанию бордюр у формы отсутствует, а чтобы он стал виден нужно установить значение 1-fmBorderStyleSingle свойства BorderStyle. Бордюр формы – окантовка рабочего поля формы.

 

Рис. 52

Свойство Cycle имеет смысл только при наличии в одной программе нескольких окон-форм, это свойство определяет, должно ли нажатие клавиши табуляции вызывать последовательный выбор всех элементов управления во всех группах и на каждой странице многостраничных элементов управления или только в пределах текущей группы или страницы. Может содержать одну из двух встроенных констант: 0-fmCycleAllForms или 2-fmCycleCurrentForm. В случае выбора первого значения перемещение будет происходить только в пределах одного текущего активного окна, при выборе второго варианта – переход будет осуществляться по всем окнам.

Свойство DrawBuffer определяет максимальное количество пикселей, которые перерисовываются одновременно при обновлении дисплея. Фактическая память, используемая объектом зависит от разрешения экрана дисплея. Если установить большое значение свойства DrawBuffer, производительность работы программы будет ниже. Большой объем буферной памяти следует устанавливать только в том случае, когда одно большое изображение должно изменяться на другое, во избежание наложенного изображения. Значение свойства может принимать значение от 16000 до 1 048 576 и должно быть целым числом.

Если свойство Enabled принимает значение False, то пользователь не имеет возможности работать с формой. Это свойство используется для временного отключения формы, например, пока не будут обеспечены какие-то условия для ее работы.

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

Свойство ForeColor устанавливает цвет текста объекта, размещенного на форме. При этом, если объект был размещен на форме до изменения свойства, то его цвет не изменяется, т.о. изменение этого свойства распространяется только на объекты, созданные после его изменения.

Свойства Height и Width обозначают высоту и ширину окна формы в пикселях соответственно.

Свойство KeepScrollBarsVisible может иметь четыре различных значения, которые управляют наличием линии прокрутки окна формы (скроллинга) в случае возникновения такой потребности, например, когда расположение элементов формы выходит за ее пределы. Значение 0-fmScrollBarsNone не допускает появления линии скроллинга ни в каких случаях. Значения 1-fmScrollBarHorizontal и 2-fmScrollBarVertical обеспечивают появление только горизонтальной или только вертикальной линии скроллинга соответственно. Значение 3-fmScrollBoth обеспечивает появление вертикальной или горизонтальной или обеих одновременно линий скроллинга в зависимости от ситуации.

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

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

Теперь рассмотрим свойство ScrollTop, которое зависит от значения свойства ScrollHeight. Если значение свойства ScrollHeight не превосходит высоты формы, то значение свойства ScrollTop вообще не может отличаться от нуля. Если значение свойства ScrollHeight превосходит высоту формы, то значение свойства ScrollTop может отличаться от нуля только на величину разности значений свойств ScrollHeigh и Heigh. Значение свойства ScrollTop устанавливает начальную величину прокрутки формы, или, другими словами, на сколько полотно формы «уходит» вверх изначально. Свойство может принимать только положительные значения.

Свойства ScrollWidth и ScrollLeft работают точно также, но не в вертикальном, а в горизонтальном направлении.

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

Свойства Left и Top устанавливают расположение от левого и верхнего краев формы или окна, включающего текущий объект (в том числе и форму) в пикселях соответственно. Таким образом очевидно, что эти свойства имеют смысл применительно к объекту UserForm только для модальных форм, т.е. форм, подчиненных другой форме.

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

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

Для установки фоновой картинки для формы и управления параметрами ее размещения используются четыре свойства: Picture, PictureAlignment, PictureSizeMode, PictureTiling.

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

Рис. 53.

 

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

Таблица 14

Значение константы Имя константы Расположение картинки
fmPictureAlignmentTopLeft От левого верхнего угла
fmPictureAlignmentTopRight От правого верхнего угла
fmPictureAlignmentCenter По центру
fmPictureAlignmentBottomLeft От левого нижнего угла
fmPictureAlignmentBottomRight От правого нижнего угла

 

Свойство PictureSizeMode позволяет растянуть картинку на весь экран (значение свойства fmPictureSizeModeStretch) или увеличить ее, сохраняя пропорции до максимального размера, при котором вся картинка будет видна на экране (значение свойства fmPictureSizeModeZoom). Если свойство принимает значение fmPictureSizeModeClip, то изображение будет иметь реальный размер.

Свойство PictureTiling позволяет размножить фоновый рисунок на те части полотна, которые им непокрыты. Если это свойство установить в значение True, то рисунок подобно мозаике из одинаковых кусочков покроет всю форму, иначе (значение False) будут видны свободные места (рис. 54).

Рис. 54.

 

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

Свойство ShowModal имеет логический тип, его значение True (это значение установлено по умолчанию) указывает, что форма модальная и при активации этой формы в процессе выполнения программы можно будет работать только с ней, другие формы программы будут в это время недоступны и получить возможность работать с ними можно только закрыв модальную форму. Одно приложение (программа) может включать в себя несколько форм, при этом для каждой из этих форм можно назначить или отменить свойство модальности. Если все формы приложения немодальны, то между ними можно переключаться в любой момент выполнения приложения без каких-либо ограничений, но если в приложении присутствует хотя бы одна модальная форма, то пока она активна, к остальным формам доступ будет закрыт.

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

Потльзователь может самостоятельно задавать место, где именно на экране должна появляться форма при отображении ее программой. Для этого используется свойство StartUpPosition. Изначально для этого свойства установлено значение 1-CenterOwner, которое расположит окно формы в центре окна VBA-приложения, независимо от его размеров и положения на экране. Если форма при этом частично оказывается за пределами экрана, то она придвинется своим краем вплотную к краю экрана, но никак не дальше. Если нужно, чтобы форма всегда появлялась посередине экрана, независимо от того, где размещено окно VBA-приложения, нужно выбрать значение 2-CenterScreen. Чтобы установить свои собственные координаты расположения она формы, нужно выбрать значение свойства 0-Manual, а после этого задать значения свойств Left (Левый край) и Тор (Верх).

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

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

Свойство Zoom позволяет масштабировать изображение на форме. Это свойство может принимать числовые значения в диапазоне от 10 до 400 и это число является процентным соотношением уменьшения или увеличения изображения по сравнению с исходным. По умолчанию значение свойства равно 100%, т.о. значения меньшие ста приводят к увеличению изображения, а меньшие ста – к уменьшению.

Свойства формы можно изменять в режиме редактирования в специальном окне или в процессе выполнения программы. Таким образом, в разные моменты выполнения программы (работы формы) форма может иметь разный вид и вести себя по-разному.

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

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

UserForm1.Show

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

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

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

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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.