Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава

Основы

программирования наVBA

Вэтой главе...

Обзор элементов и конструкций VBA

Комментарии

Переменные, типы данных и константы

Операторы присваивания

Массивы

Объектные переменные

Пользовательские типы данных

Встроенные функции

Управление объектами и коллекциями

Контроль за выполнением кода

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

Обзор элементов и конструкций VBA

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

В главе 7 речь шла об объектах, свойствах и методах. Но этих знаний еще недоста­ точно для выполнения сложных задач. Данная глава введет вас в курс дела: в ней анали­

212 Часть III. Visual Basic for Applications

зируются элементы языка VBA, такие как ключевые слова и операторы, используемые для написания процедур VBA.

Для начала в качестве примера рассмотрим простую процедуру VBA типа Sub. Она хранится в модуле VBA и вычисляет сумму первых ста положительных целых чисел. По окончании вычислений процедура отображает сообщение с результатом.

Sub

V B A _ D em o()

'

Пример

 

п р о с т о й п р о ц е д у р ы VBA

 

D im T o t a l A s L o n g , i A s L o n g

 

T o t a l

=

0

 

F o r

i

=

1 To 100

 

T o t a l = T o t a l + i

 

N e x t

i

 

 

 

M sg B o x

 

T o t a l

E n d

Sub

 

 

 

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

комментарий (строка, начинающаяся апострофом);

оператор объявления переменной (строка, начинающаяся ключевым словом Dim);

две переменные ( T o t a l и i);

два оператора присваивания ( T o t a l = 0 и T o t a l = T o t a l + i);

циклическая структура (F o r -N e x t);

функция VBA (M sgBox).

Все перечисленные элементы языка рассматриваются в следующих разделах главы.

Примечание

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

Ввод кода VBA

Код VBA, находящийся в модуле VBA, состоит из инструкций. Общепринято вводить в каждой строке по одной инструкции. Но это необязательное требование; можно ука­ зывать несколько инструкций в одной строке, разделяя их двоеточием. В следующем примере в одной строке находятся четыре инструкции.

S ub

O n e L i n e ()

 

Х= 1 : у= 2 : Z= 3 : M sg B o x х + у + Z

En d

Sub

Многие программисты полагают, что код воспринимается легче, если в каждой строке находится по одной инструкции.

Sub O n e L i n e ()

х= 1

у= 2

z

= 3

M sg B o x х + у + z

E n d

Sub

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

Глава 8. Основы программирования на VBA

213

Sub

L o n g L in e ()

 

 

SummedValue = _

 

 

W o r k s h e e t s ( " Л и с т 1 " ) . R a n g e ( " A l " ) . V a l u e + _

 

 

W o r k s h e e t s ( " Л и с т 2 " ) . R a n g e ( " A l " ) . V a l u e

 

End

Sub

 

При написании макросов Excel достаточно часто символы подчеркивания применя­ ются для разбиения длинных операторов на несколько строк.

После ввода инструкции редактор VBA выполняет следующие действия для улучше­ ния удобочитаемости кода.

Вставляет пробелы между операторами. Например, если ввести Ans=i+2 (без пробелов), VBA преобразует это выражение следующим образом:

Ans = 1 + 2

Изменяет регистр символов ключевых слов, свойств и методов. Если ввести вы­

ражение Result=activesheet.range ( "al") .value=12, VBA преобразует его так:

R e s u l t = A c t i v e S h e e t . R a n g e ( " a l " ) . V a l u e = 12

Обратите внимание, что текст в кавычках (в рассматриваемом случае — " a l " ) не изменился.

Поскольку названия переменных VBA нечувствительны к изменению регист­ ра символов, интерпретатор по умолчанию изменяет имена всех перемен­

ных, состоящих из букв одного регистра, чтобы их регистр соответствовал последнему введенному варианту. Например, если сначала переменная опре­ делялась как m y v a lu e (все символы нижнего регистра), а затем была переопреде­ лена в виде M y V a lu e (смешанный регистр), VBA изменит название переменной во всех остальных случаях на M y V a lu e . Исключение бывает в том случае, когда пере­ менная объявляется с помощью ключевого слова D im либо похожего оператора; название переменной остается неизменным в процессе ее применения.

Редактор VBA просматривает инструкции с целью выявления синтаксиче­

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

редактора Visual Basic Editor Tools^Options (Сервис^Параметры) для перехода вдиалоговое окно Options (Параметры), в котором можно выбрать цвет выделения ошибки (с помощью вкладки Editor Format (Формат редактора)), а также указать, следует ли отображать сообщение об ошибке (с помощью параметра Auto Syntax Check (Автоматическая проверка синтаксиса) на вкладке Editor (Редактор)).

Комментарии

Комментарий— это описательный текст, который включается в код. VBA полно­ стью игнорирует текст комментария. Комментарии можно использовать произвольно для описаний действий в коде (назначение оператора не всегда очевидно).

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

Msg = "Продолж ение н е в о зм о ж н о "

214 Часть III. Visual Basic for Applications

В следующем примере показана процедура VBA с тремя комментариями.

Sub

Comments()

1

Э та п р о ц е д у р а не д е л а е т н и ч е г о с е р ь е з н о г о

 

х = 0 'х н и ч е г о не со д е р ж и т

1

О то бра ж ен ие р е з у л ь т а т а

 

MsgBox х

End

Sub

Как правило, в качестве индикатора комментария используется апостроф, однако можно применить для обозначения строки комментария ключевое слово Rem.

Rem - - следующ ий о п е р а т о р з а п р а ш и в а е т имя файла

Ключевое слово Rem (сокращение от слова R em ark — “пометка”) — это, по сущест­ ву, пережиток старых версий BASIC; его включили в VBA из соображений совместимо­ сти. В отличие от апострофа, Rem используется только в начале строки, он не допускает­ ся в той же строке, что и инструкция.

Совет

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

Ниже приведено несколько общих советов по эффективному использованию коммен­ тариев. Итак, обращайтесь к ним:

для краткого описания назначения каждой созданной процедуры;

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

для указания функции или конструкции, использующейся нестандартным способом;

для описания назначения переменных (чтобы и вы, и другие пользователи могли истолковать названия переменных, которые без комментария понять сложно);

для описания способов, которые помогут избежать влияния внутренних ошибок Excel на ваше приложение;

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

Совет

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

Панель инструментов Edit (Редактирование) в VBE содержит несколько по­ лезных кнопок. Выделите группу инструкций, а затем используйте кнопку Comment Block (Комментировать блок операторов), чтобы преобразовать инструкции в комментарии. Кнопка Uncomment Block (Раскомментировать блок операторов) преобразовывает группу комментариев обратно в инст­ рукции. Указанные кнопки применяются очень часто, поэтому с целью по­ вышения удобства работы можно скопировать их на стандартную (Standard) панель инструментов.