Читаем Интернет-журнал "Домашняя лаборатория", 2007 №3 полностью

Здесь из процедуры Main вызывается процедура uvelich, которой передаются два параметра — а (равный 1) и второй — число 3. Процедура uvelich увеличивает первую переданную переменную на значение второго переданного числа, а затем Main отображает результат.

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

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

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

К примеру, если бы заголовок процедуры uvelich в вышеприведенном примере имел вид Sub uvelich(ByVal b As Integer, с As Integer), то никакого увеличения переменной "а" не произошло бы и программа отобразила бы в качестве результата число 1. Однако в самой процедуре uvelich соответствующая переменная увеличилась бы на 3 и, если бы последняя ее команда была бы MsgBox b, то она отобразила бы значение 4.

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

Sub Main

   Dim a As Integer

   Dim d As Integer

       a = 1

       d = uvelich(a, 3)

       MsgBox d

End Sub


Function uvelich(ByVal b As Integer, ByVal с As Integer) As Integer

       uvelich = b + с

End Function

Как нетрудно видеть, программа присваивает переменной "d" значение, вычисленное функцией.

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

Sub Main

   Dim a As Integer

   Dim d As Integer

       a = 1

       d = uvelich(a, 3)

       MsgBox d

       MsgBox a

    End Sub


    Function uvelich(b As Integer, с As Integer) As Integer

       uvelich = b + с

       b = 1555

    End Function,

то программа бы в качестве значения переменной "а" отобразила бы число 1555, а не 1.

Указания типов переменных в заголовках функций и процедур необязательны — их можно опустить. В этом случае будет считаться, что все передаваемые переменные могут иметь любой тип (точнее, они просто преобразуются в тип Variant и такими уже используются в подпрограмме). Однако необходимо строго следить за соответствием типов переменных в заголовках подпрограмм и в вызывающей их программе. Так, если в заголовке функции указано, что первая переменная, передаваемая ей, имеет тип Integer, то та переменная, которая передается в функцию как первая (в последнем примере — "а"), должна быть определена именно как Integer до вызова функции (что мы и видим в этом примере).

Перед заголовком функции или процедуры можно поставить инструкции Public или Private ("Private Function uvelich(b As Integer, с As Integer) As Integer"). Функция или процедура, объявленная как Public, может вызываться и из других модулей, в то время как функция или процедура, объявленная как Private, доступна только из данного модуля.

По умолчанию все функции и процедуры считаются объявленными как Public (а переменные — объявленные как Private!).

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



Рис. 2.3.Окно Стек вызова.


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

Главная процедура — собственно программа — не может иметь параметров (в ее заголовке должны стоять пустые скобки). Только таким процедурам можно назначать кнопки и сочетания клавиш для их вызова на выполнение.

Перейти на страницу:

Похожие книги

Гостиная
Гостиная

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

Линиза Жалпанова , Линиза Жувановна Жалпанова , Наталья Михайловна Сухинина , Наталья Сухинина

Сделай сам / Дом и досуг
Справочник настоящего мужчины
Справочник настоящего мужчины

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

Андрей Петрович Кашкаров

Сделай сам / Хобби и ремесла / Прочая справочная литература / Дом и досуг / Словари и Энциклопедии