Лекция Основы программирования Эта лекция введение в Visual Basic for Applications, из которой вы узнаете, как запустить среду программирования и как в ней создавать, редактировать, сохранять и выполнять код

Вид материалаЛекция

Содержание


Написание новой процедуры
Передача аргументов в процедуру
Написание процедур для обработки событий
Средства, ускоряющие написание программ
Require Variable Declaration (Явное описание переменных)
Auto List Member
Auto Indent
Как написать легкочитаемую программу
Подобный материал:

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



Эта лекция – введение в Visual Basic for Applications, из которой вы узнаете, как запустить среду программирования и как в ней создавать, редактировать, сохранять и выполнять код.

Основные темы этой лекции:
  • создание, редактирование и запуск программ в Visual Basic Editor;
  • переменные, константы и типы данных;
  • управляющие конструкции.



Запись макроса



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

Чтобы записать макрос надо находиться в окне приложения, а не в окне редактора Visual Basic:
  1. Сделайте видимой панель инструментов Visual Basic.
  2. На панели инструментов Visual Basic щелкните кнопку Записать макрос (Record Macro).
  3. В диалоговом окне Запись макроса (Record Macro) в поле Имя макроса (Macro Name) замените имя макроса, предлагаемое по умолчанию, на нужное Вам и щелкните кнопку ОК.
  4. В том же окне в списке Макрос доступен для (Store Macro In) укажите, где хранить новый макрос. На данном этапе пока выберите: в Microsoft Excel - This Workbook (Эта книга), в Word – All Documents (Normal.dot) [Всех Документов (Обычный.dot)].
  5. Выполните операции, для которых вы хотите сгенерировать код на Visual Basic.
  6. На панели инструментов Stop Recording (Остановка записи) щелкните кнопку Stop Recording (Остановить запись).

Итак, макрос записан. Чтобы просмотреть его код, выберите из меню Тооls (Сервис) команду Macro (Макрос), а затем – строку Macros (Макросы). В диалоговом окне Macros (Макрос) выберите имя нужного макроса и щелкните кнопку Edit (Изменить).

Найти записанный макрос вы можете также и в окне проекта в папке Модули (Modules). Обычно в Excel вы найдете его в модуле Module1 в папке Modules данной рабочей книги. А при работе с MS Word . в модуле NewMacros в папке Modules проекта Normal.

Написание новой процедуры



Если Вы хотите написать код, не связанный с каким-либо объектом или событием, создайте процедуру в стандартном модуле. Процедура . это блок кода между операторами Sub и End Sub или Function и End Function. Процедуры могут быть личными (Private) – доступными только в том модуле, где они определены, и общими (Public) – доступными во всех модулях проекта (по умолчанию). Упоминавшиеся нами макросы – специфический термин, относящийся только к открытым (public) процедурам Sub без параметров.

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

Примеры открытых и закрытых процедур:

Public Sub Proc1()

MsgBox “Это открытая процедура (макрос). Доступна во всех модулях проекта”

End Sub

Function Proc2(Param1 As Long, Param2 As String) As Long

MsgBox “Это тоже открытая процедура (функция)”

для возврата значения, его надо присвоить в имя этой функции

Proc1 = 0

End Sub

Private Sub Proc3(Param3 As Decimal, Param4 As Variant)

MsgBox “Закрытая процедура. Доступна только внутри модуля”

End Sub

примеры вызова этих процедур из другой процедуры

Sub Test()

...........................................

Proc1

C = Proc2(100, B) * 10 ‘ параметры функции – в скобках

Proc3 100.5, “12345” ‘ а параметры процедуры – без скобок

............................................

End Sub

Процедуры не обязательно вызывать из других процедур (как показано выше). Вы можете сделать так, чтобы процедура Sub:
  • Запускалась при возникновении определенного события – добавьте ее вызов к процедуре обработки этого события.
  • Выполнялась из редактора Visual Basic - установите курсор ввода в любой участок процедуры и либо нажмите клавишу F5, либо щелкните кнопку Run Sub/UserForm (Запуск подпрограммы/UserForm) на панели инструментов Standard (Стандарт) или Debug (Отладка).
  • Запускалась из окна вашего приложения (для этого она должна быть макросом) - выберите ее имя в диалоговом окне Macros (Макрос) приложения и щелкните кнопку Run (Выполнить).



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



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

Структура отдельного аргумента может быть представлена в следующем виде:

[Optional] [ByVal | ByRef] [ParamArray] имя_переменной [( )] [As тип]

[=значение_по_умолчанию]

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

Если перед аргументом поставить ключевое слово Optional, то такой параметр считается необязательным и должен иметь тип Variant. Причем, если какой-то параметр описан как необязательный, то и все последующие параметры тоже должны быть описаны как необязательные.

Ниже объявлена процедура MyProc, принимающая 3 аргумента:

Sub MyProc(ByVal ТабНом As Long, Optional Должность, Optional ByRef Оклад As Variant)

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

Dim ТН As Long, Должность As Variant, Money As Variant

ТН = 20256

Должность = “доцент”

MyProc ТН, ФИО, Money

MyProc 30231, , 3.62

MyProc 100

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

Sub MyProc(ByVal ТабНом As Long, Optional Должность, Optional

ByRef Оклад As Variant = 1000)

If IsMissing(Должность) then Должность = .преподаватель.

..................

End Sub

Ключевое слово ParamArray – позволяющее задать массив неопределенной длины из элементов типа Variant – используется в случае, когда количество передаваемых параметров заранее неизвестно. ParamArray не может использоваться совместно с Optional, ByRef, ByVal и должен определять самый последний аргумент в списке. Данные, передаваемые посредством ParamArray, обрабатываются как элементы массива.

Приведенная ниже функция Summa суммирует значения передаваемых ей аргументов:

Function Summa (ParamArray A() As Variant) As Integer

Dim i As Integer, S As Integer . или Dim i As Variant, S As Integer

S = 0 ‘ S = 0

For i = LBound(A) To UBound(A) ‘ For Each i In A

S = S + A(i) ‘ S = S +i

Next i ‘ Next i

Summa = S ‘ Summa = S

End Function

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

S1 = Summa (1,2,3,4,5,6)

S2 = Summa ()

S3 = Summa (1)

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

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

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

Но он так и провоцирует на ошибки, ведь в такой массе запятых запутаться немудрено. Да и код читать очень трудно . не понятно, к чему относится конкретный аргумент. Поэтому гораздо лучше написать так, используя имена аргументов и операцию :=:

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

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

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

Написание процедур для обработки событий



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

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

Процедура обработки события хранится там, где генерируется обрабатываемое ею событие. Например, процедура, выполняемая при открытии документа Word будет сохранена в объекте Document элемента ThisDocument.

Имя процедуры, предназначенной для обработки события, формируется из имени объекта, поддерживающего это событие (например, ”Document”, “Worksheet”, “UserForm” или “CommandButton1”), знака подчеркивания (_) и имени события (скажем, “Open”, “Calculate” или “Click”). Таким образом, процедура, запускаемая при открытии документа Word, называется Document_Оpen.

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



Многие ключевые слова Visual Basic очень длинные, и их трудно написать без ошибок. Чтобы сократить время на набор кода и уменьшить число вероятных опечаток, в Visual Basic предусмотрены средства, ускоряющие ввод ключевых слов и выражений.

Набрав несколько букв, достаточных для того, чтобы Visual Basic распознал ключевое слово, нажмите клавиши Ctrl+Пробел или щелкните кнопку Complete Word (Завершить слово) на панели инструментов Edit (Правка) . Visual Basic допишет его сам.

С помощью диалогового окна Options (Параметры), вызываемого через меню Tools (Сервис), можно включить автоматическую проверку синтаксиса после набора каждой строки – тогда Visual Basic будет .на лету. сообщать об ошибках и предлагать варианты их исправления.

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

Также откройте в меню Сервис (Tools) режим Параметры (Code Settings) и на вкладке Редактор (Editor) пометьте соответствующие флажки:

Проверка синтаксиса (Auto Syntax Check) Указывает Visual Basic, надо ли автоматически проверять синтаксис после ввода очередной строки кода.

Require Variable Declaration (Явное описание переменных)

Определяет, требуется ли явное объявление переменных в модулях. Если этот флажок активен, в раздел общих объявлений каждого нового модуля автоматически вставляется оператор Option Explicit.

Auto List Member (Список компонентов) Открывает список с информацией, которая позволяет логически закончить оператор в текущей позиции курсора ввода.

Auto Quick Info (Краткие сведения) Выводит информацию о функциях и их параметрах в процессе набора текста.

Auto Data Tips (Подсказки значений данных) Отображает значение переменной, поверх которой находится курсор мыши. Это средство действует только при пошаговом исполнении программы.

Auto Indent (Автоотступ) При нажатии клавиши Enter автоматически повторяет отступ предыдущей строки. Таким образом, все последующие строки сдвигаются вправе на одно и то же расстояние. Для удаления автоотступов используйте клавишу Backspace.

Tab Width (Интервал табуляции) Устанавливает размер табулятора в диапазоне от 1 до 32 пробелов (по умолчанию – 4).

Как написать легкочитаемую программу



Чтобы сделать код на Visual Basic легкочитаемым добавляйте в программу комментарии, начиная их с апострофа.

эта процедура вычисляет расходы, связанные с наймом сотрудника

Dim baseSalary As Currency ‘ зарплата без учета премий и надбавок

baseSalary = employeeLevel * 2500 ‘ employeeLevel передается как аргумент

Чтобы добавить признак комментария в начало всех строк выделенного блока кода, щелкните кнопку Закомментировать блок (Comment Block) на панели инструментов Правка (Edit), а чтобы удалить его из начала всех строк выделенного блока, щелкните кнопку Раскомментировать блок (Uncomment Block)

Длинные операторы разбивайте на несколько строк, используя признак продолжения строки – пробел в сочетании со знаком подчеркивания ( _). Взгляните на один и тот же оператор, записанный двумя способами: в одну строку и с переносом на вторую: Если Вам нужно разбить строковую константу на несколько строк, используйте оператор конкатенации (& или +):

Set myField = ActiveDocument.Fields.Add _

(Range:=Selection. Range, Type:=wdFieIdDate)

MsgBox “This is a string that I have to break up “ & _

“so that I can continue it on another line”

За признаком продолжения строки нельзя ставить комментарий.




Офисное программирование Лекция 1. Основы программирования