Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SrrazOffpril_Vecher.rtf
Скачиваний:
8
Добавлен:
18.09.2019
Размер:
1.9 Mб
Скачать

Тема 1. Основы программирования

    1. Создание, редактирование и запуск программ

1.1.1. Редактор Visual Basic

Свойство – некий атрибут объекта, например, его цвет или название. Устанавливая значение свойства, определяется соответствующий атрибут или поведение объекта.

Окно свойств (properties) позволяет определять свойства объекта на этапе разработки программы. Оно весьма полезно при работе с элементами управления на базе ActiveX и с собственными диалоговыми окнами (таблица 1.1). Однако на этапе разработки свойства большинства объектов удобнее задавать привычными командами пользовательского интерфейса.

Таблица 1.1

Фрагмент свойств объекта User Form и их описание

Наименование свойства

Описание свойства

1

2

Left

Определяет положение объекта слева от экрана

Special Effect

Определяет объем объекта

Start Up Position

Определяет положение объекта от верхнего левого угла экрана

Text Align

Определяет положение текста на объекте

Top

Определяет положение объекта сверху

Zoom

Определяет размер элементов управления на объекте в диалоговой форме

1.1.5. Выполнение процедуры Sub

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

Sub Auto_Open ( )

ThisWorkbook.WorkSheet (“Титул”).Activate

End Sub

Чтобы запустить процедуру Sub из редактора Visual Basic, необходимо установить курсор на любое место программы и нажать клавишу F5 или на панели инструментов Standard (Стандарт) или Debug (Отладка) кнопку Run Sub/Userform (Запуск программы/ UserForm.

Чтобы запустить процедуру Sub, которая является макросом, необходимо выбрать ее имя в диалоговом окне Macros (Макрос) приложения и нажать кнопку Run (Выполнить).

Чтобы вызвать процедуру Sub из другой процедуры, следует использовать ее имя со встроенными ключевыми словами. Пример процедуры, вызывающей процедуру DisplayWelcome:

Sub TestCall ( )

DisplayWelcome

End Sub

Процедуру, объявленную закрытой, нельзя вызывать из процедур за пределами модуля, в котором она находится. Открытую процедуру можно вызывать извне ее модуля. Если вызывается процедура, расположенная не в текущем модуле, Visual Basic просматривает другие модули и выполняет первую найденную открытую процедуру с указанным именем. Если имя открытой процедуры не уникально, лучше явно задать модуль, в котором она находится. Пример процедуры, вызывающей процедуру DisplayWelcome из явно заданного модуля TestTools:

Sub TestCall ( )

TestTools.DisplayWelcome

End Sub

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

Sub TestCall ( )

TestDocument.TestTools.DisplayWelcome

End Sub

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

Если необходимо вызывать процедуру из других модулей проекта, но не из других проектов, следует объявить ее открытой, а модуль, в котором она находится, - закрытым. Для этого следует добавить в раздел Declaration (Описания) данного модуля оператор Option Private Module.

Чтобы процедуры одного проекта можно было вызывать из другого проекта, в последнем должна быть ссылка на проект, содержащий вызываемый код. Создаются такие ссылки с помощью диалогового окна References (Ссылки), которое вызывается из меню Tools (Сервис). При создании ссылок нужно иметь ввиду, что кодовое имя проекта, на который организуется ссылка, не должно совпадать с кодовым именем текущего проекта. Кроме того, недопустимы «круговые» ссылки: если есть ссылка на проект В из проекта А, то создать ссылку на проект А из проекта В уже нельзя.

1.1.6. Передача аргументов в процедуру

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

Sub UpdateRecord (ByVal custId As Long, _

ByRef custName As String, Optional _

custRepeat As Boolean)

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

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

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

Пример вызова процедуры UpdateRecord:

Dim newId As Long

Dim newName As String

Dim newRepeat As Boolean

newId = 3452

newName = “Mary Stuart”

newRepeat = True

UpdateRecord newId, newName, newRepeat

Имя переменной, передаваемой в процедуру, необязательно должно совпадать с именем аргумента в объявлении этой процедуры.

1.1.7. Именованные аргументы

Если у созданной процедуры или у встроенной функции, оператора, метода есть несколько необязательных параметров, то удобнее передавать аргументы по их именам, а не по позициям. Например, метод Open объекта Workbooks в Microsoft Excel, открывающий рабочую книгу, принимает 13 аргументов. Если необходимо написать код, отрывающий рабочую книгу Book2.xls и добавляющий ее в список последних открытых рабочих книг, следует использовать оператор:

Workbooks .Open “book2.xls”, , , , , , , , , , , , True

или

Workbooks .Open FileName := ”book2.xls”, AddToMru := True

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

Workbooks .Open AddToMru := True, FileName := ”book2.xls”

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

Sub FormatList (startRow As Integer, startCol As Integer, _

Optional redText, Optional sortList)

Другая процедура (DoList) вызывает процедуру FormatList с передачей аргументов по именам:

Sub DoList ( )

FormatList redText := True, startCol := 2, start Row := 2

End Sub

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

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

1.1.8. Процедуры для обработки событий

Некоторые объекты в приложениях Office распознают предопределенный набор событий, инициируемых системой или пользователем. К числу таких событий относятся Open и Close для документов Word; Open, BeforePrint, BeforeSave, BeforeClose для рабочих книг Microsoft Excel; Calculate и SelectionChange для рабочих листов Microsoft Excel; Click, Initialize и Terminate для пользовательских диалоговых окон; Click, GotFocus, LostFocus для элементов управления на базе ActiveX.

Можно управлять тем, как приложение реагирует на предопределенное событие, написав соответствующий код для объекта. Этот код или процедура обработки событий выполняется всякий раз, когда возникает данное событие. Например, если написать процедуру для обработки события Open какого-нибудь документа Word, она будет автоматически выполняться при каждом открытии этого документа.

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

Имя процедуры, предназначенной для обработки события, формируется из имени объекта, который поддерживает это событие (например, Document, UserForm, CommandButton1), знака подчеркивания (_) и имени события (например, Open, Calculate, Click). Таким образом, процедура, запускаемая при открытии документа Word, называется Document_Open. Имена процедур обработки событий для большинства объектов включают имена классов (также как Document, WorkSheet или UserForm), а имя процедуры обработки события для элемента управления на базе ActiveX включает кодовое имя этого элемента – предлагаемое по умолчанию или присвоенное пользователем. Если изменяется имя элемента управления уже после написания процедур обработки событий, следует соответственно переименовать и эти процедуры; иначе они не будут выполняться в ответ на события, распознаваемые элементом управления.

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

1.1.9. Средства, ускоряющие написание программ

Чтобы сократить время на набор кода и уменьшить вероятность ошибок, Visual Basic предлагает:

  • использование ключевых слов, для этого предусмотрено сочетание клавиш Ctrl + пробел или кнопка Complete Word (Завершить слово) на панели инструментов Edit (Правка);

  • автоматическую проверку синтаксиса после набора каждой строки (меню Tools (Сервис) -> диалоговое окно Options (Параметры)), в этом случае VB сообщит об ошибке и предложит варианты ее исправления. Кроме того, синтаксис слова могут помочь узнать такие кнопки, как List Properties/Methods (Список свойств/методов), List Constants (Список констант), Quick Info (Сведения), Parameter Info (Параметры) и Complete Word (Завершить слово) на панели инструментов Edit (Правка);

  • сделать код легкочитаемым, добавив в программы комментарии о ходе выполнения программы, используя знак апострофа (’). Выполняя программу, Visual Basic игнорирует все, что находится между апострофом и символом конца строки. Можно автоматически закомментировать любой код программы с помощью кнопки Comment Block (Закомментировать блок) на панели инструментов Edit (Правка);

  • длинные операторы разбивать на несколько строк, используя признак продолжения строки – пробел в сочетании со знаком подчеркивания (_). Признак продолжения строки недопустим в строковом литерале. Чтобы разбить текстовую константу, используют знак конкатенации (&) в сочетании с признаком продолжения строки. За признаком продолжения строки комментарии ставить нельзя;

  • выделять логические уровни в коде программы. Для этого предусмотрены кнопки Indent (Увеличить отступ), Outdent (Уменьшить отступ) на панели инструментов Edit (Правка) или клавиша Tab, сочетание клавиш Shift+Tab;

  • использование закладок для быстрого перехода из одного пункта программы в другой, которые устанавливаются на строке с помощью кнопки Toggle Bookmark (Закладка) на панели инструментов Edit (Правка). Для перехода между закладками используются кнопки Next Bookmark (Следующая закладка) и Previous Bookmark (Предыдущая закладка) на панели инструментов Edit (Правка);

  • использование точки останова и цвета шрифта. Так, например, синим шрифтом Visual Basic выделяет операторы, методы, объекты; черным – текст программы; зеленым – комментарии; красным – ошибки.

  • использование точки в сочетании с оператором With как ссылки на объект более высокого иерархического уровня.

1.1.10. Проекты документов и шаблонов

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

После подключения шаблона в документе доступны все процедуры из этого шаблона. Изменения программного кода в шаблоне распространяются на любые, основанные на нем документы. Чтобы процедура стала доступна всем документам Word независимо от используемых в них шаблонов, следует поместить ее в шаблон Normal.dot, ссылки на который делаются в каждом документе автоматически.

Когда применяется шаблон к рабочей книге или презентации, код из проекта шаблона копируется в проект рабочей книги или презентации. В отличие от Word, Microsoft Excel и Power Point не присоединяют шаблоны к рабочей книге или презентации, и поэтому, изменения, внесенные в шаблон после его подключения, не отражаются на проектах соответствующих рабочих книг или презентаций. Если необходимо сделать процедуру доступной всем рабочим книгам Microsoft Excel независимо от используемых в них шаблонов, следует поместить ее в Personal.xls.

1.1.11. Модули классов

Модули классов предназначены для создания новых типов объектов – в тех случаях, когда нужны инкапсулируемые, повторно используемые блоки кода. Процедуры Sub и Function, объявляемые в модуле класса, становятся методами пользовательского объекта, а свойства, определяемые с помощью операторов Property Get, Property Let и Property Set, - свойствами этого объекта.

После добавления в проект модулей классов – выбрав из меню Insert (Вставка) команду Class Module (Модуль класса) или скопировав их из другого проекта, - в окне проекта появится папка Class Modules (Модули классов). Причем описание каждого класса размещается в отдельном (одном) модуле.

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