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

Глава 9. Работа с процедурами VBA

273

1

Цикл

по в се м р а б о ч и м

к н и га м

 

 

F o r E a c h b o o k I n W o rk b o o k s

 

 

I f

U C a s e (b o o k .N a m e )

= F ile N a m e T h e n F i l e E x i s t s

= T ru e

N e x t

b o o k

 

 

 

 

 

'

О тображ ение с о о т в е т с т в у ю щ е го сооб щ ени я

 

 

I f F i l e E x i s t s T h e n

 

 

 

 

 

M sg B o x

F ile N a m e

&

"

о т к р ы т ."

 

 

E ls e

 

 

 

 

 

 

 

M sgB o x

F ile N a m e

&

"

не о т к р ы т ."

 

 

End I f

 

 

 

 

 

End

Sub

 

 

 

 

 

 

В этой процедуре в цикле For Each-Next просматриваются все объекты коллек­ ции Workbooks. Если книга открыта, переменная FileExists получает значение True. В результате отображается сообщение, указывающее пользователю, открыта ли рабочая книга.

Предыдущую процедуру можно переписать так, что для определения “открытости” будет использоваться метод обработки ошибок. В следующем примере оператор On Error Resume Next указывает VBA игнорировать любые ошибки. В инструкции мы обратимся к рабочей книге, присвоив ей объектную переменную (с помощью ключевого слова Set). Если рабочая книга закрыта, происходит ошибка. В структуре If-Then- Else проверяется значение свойства Err и отображается соответствующее сообщение.

Sub

C h e c k F o r F ile ()

 

 

 

 

Dim

F ile N a m e A s S t r i n g

 

 

Dim

x

A s

W o rk b o o k

 

 

 

 

F ile N a m e

= "B U D G ET . X L S X "

 

On

E r r o r

Resum e N e x t

 

 

 

S e t

x

= W o rk b o o k s ( F ile N a m e )

 

I f E r r = 0 T h e n

 

 

 

 

 

M sg B o x

F ile N a m e

&

"

о т к р ы т ."

 

E ls e

 

 

 

 

 

 

 

M sgB o x

F ile N a m e

&

"

не о т к р ы т ."

 

End

I f

 

 

 

 

 

 

On

E r r o r

GoTo 0

 

 

 

End

Sub

 

 

 

 

 

Перекрестная ссылка

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

Реальный пример

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

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

274

Часть III. Visual Basic for Applications

Компакт-диск

Готовое приложение можно найти на прилагаемом к книге компакт-диске.

Цель

Цель этого упражнения — разработать утилиту, которая изменяет порядок следова­ ния листов рабочей книги, сортируя их названия по алфавиту (с помощью одних только функций Excel это сделать невозможно). Если вы часто создаете книги с большим коли­ чеством листов, то знаете, что иногда сложно найти интересующий вас лист. Если же их упорядочить по названиям, то любой рабочий лист найти будет значительно проще.

Требования к проекту

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

Требования к разрабатываемому приложению приведены далее.

1.Приложение должно сортировать листы (т.е. рабочие листы и листы диаграмм) активной книги по названиям в алфавитном порядке.

2.Приложение должно легко выполняться.

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

4.Приложение должно правильно выполняться по отношению к любой открытой рабочей книге.

5.В приложении не должны отображаться сообщения об ошибках VBA.

Исходные данные

Часто самой сложной частью проекта является определение того, с чего же начать. В данном случае начнем с перечисления особенностей Excel, которые могут повлиять на соблюдение требований к проекту.

В Excel отсутствует команда сортировки листов. Следовательно, отпадает вариант записи макроса для упорядочивания листов в алфавитном порядке.

Лист можно легко переместить, перетащив его за ярлычок.

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

В Excel можно открыть диалоговое окно Переместить или скопировать (Move or Сору), щелкнув правой кнопкой мыши на ярлычке листа с последующим выбо­ ром команды контекстного меню Переместить/скопировать (Move or Сору). Бу­ дет ли при записи макроса для этой команды генерироваться код, который работа­ ет иначе, чем операция перемещения листа вручную?

Следует знать, сколько листов содержится в активной рабочей книге. Эту инфор­ мацию можно получить с помощью VBA.

Узнайте названия листов (вновь воспользовавшись VBA).

Глава 9. Работа с процедурами VBA

275

В Excel существует команда, сортирующая данные в ячейках рабочего листа.

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

Благодаря диалоговому окну Параметры макроса (Macro Options) несложно бу­ дет назначить для макроса комбинацию клавиш.

Если макрос сохранен в личной книге макросов, он всегда доступен.

Вам понадобится тестировать приложение по мере разработки. Естественно, нель­ зя тестировать приложение в той же рабочей книге, в которой оно разработано.

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

Если разработать программу правильно, то VBA не будет отображать сообщения об ошибках.

Примечание. Не будем принимать желаемое за действительное...

Подход

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

1)идентифицировать активную рабочую книгу;

2)получить список названий всех листов в рабочей книге;

3)посчитать листы;

4)отсортировать их (определенным образом);

5)изменить порядок следования листов в соответствии с параметрами сортировки.

Что необходимо знать

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

идентифицировать активную рабочую книгу;

сосчитать листы активной рабочей книги;

получить список названий листов;

отсортировать список;

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

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

полнения действий, связанных с решением поставленной задачи. Это заня­ тие принесет вам немало пользы.Совет