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

352

Часть III. Visual Basic for Applications

Методы программирования на VBA

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

Переключение значения булева свойства

Булево свойство — это логическое свойство, принимающее одно из двух значений:

T ru e

(ИСТИНА) или F a ls e (ЛОЖЬ). Самый простой способ изменить булево свойст­

во— использовать оператор N o t,

как показано в следующем примере, в котором акти­

визируется свойство переноса по словам W ra p T e x t в выделенном диапазоне ячеек.

Sub

T oggleW rapT ext()

 

в выделенных ячейках

1

Управляет переносом слов

 

I f

TypeN am e(S election)

=

"Range" Then

 

 

S e le c tio n . W rapText

= Not A c t iv e C e ll. W rapText

 

End I f

 

 

End

Sub

 

 

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

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

Оператор N o t можно использовать для переключения значений многих свойств. На­ пример, для отображения заголовков строк и столбцов в рабочем листе примените сле­ дующую команду.

A ctive W in d o w . D isp la yH e a d in g s = Not _

A ctive W in d o w . D isp la yH e a d in g s

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

A c tiv e W in d o w .D is p la y G rid lin e s = Not _

A ctive W in d o w . D is p la y G rid lin e s

Определение количества страниц для печати

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

Sub

PageCount()

 

 

 

MsgBox (A c tiv e S h e e t. HPageBreaks. Count

+ 1 )

* _

 

(A c tiv e S h e e t.VPageBreaks. Count + 1 )

& "

страниц"

End

Sub

 

 

Представленная ниже процедура VBA циклически просматривает все листы в актив­ ной рабочей книге и отображает общее количество страниц для печати (рис. 11.13).

T im e V a lu e ,

354

 

 

 

Часть III. Visual Basic for Applications

' О бработка

си туац и и ,

ко гд а в имени нет

пробела

I f SpacelnName = 0 Then SpacelnName =

Len(FullN am e)

FirstN am e

=

L e ft(F u llN a m e , SpacelnName)

G re e tin g

=

G re e tin g

& FirstN am e

 

'Отображение сообщения

MsgBox TheDate & vb C rL f & vb C rL f & "Сейчас " & TheTime, vbOKOnly, G re e tin g

End Sub

В данном примере использованы именованные форматы (“Long Date” и “Medium Time”) для обеспечения работоспособности макроса независимо от региональных настроек компьютера пользователя. Однако вы можете обратиться к другим форматам. Например, чтобы отобразить дату в формате м м /дд/гг, воспользуйтесь следующим оператором:

TheDate = F orm at(D ate, " м м /д д /гг " )

Чтобы отобразить в зависимости от времени суток приветствие в строке заголовка, ис­ пользуется конструкция S e le c t Case. Значения времени задаются в VBA так же, как в Excel. Если время меньше 0,5 (полдень), то это утро. Если время больше 0,7083 (5 часов вечера), то это вечер. Все остальное время — это день. Мы выбрали простой способ и ис­ пользовали функцию VBA которая возвращает значение времени из строки.

Следующие операторы определяют имя пользователя, указанное на вкладке Общие (General) диалогового окна Параметры Excel (Excel Options). Для нахождения первого пробела в имени пользователя использована функция VBA I n S t r . Когда я создавал рас­ сматриваемую процедуру впервые, то не учел, что в имени пользователя пробел может отсутствовать. Поэтому, когда процедура была запущена на компьютере с именем поль­ зователя N obody, программа выдала ошибку, из чего следует, что нельзя предусмотреть все, и даже самые простые процедуры могут дать сбой. (Кстати говоря, если поле для введения имени пользователя не заполнено, то Excel всегда использует значение User.) Решение этой проблемы состоит в следующем: присвойте переменной SpacelnName длину полного имени пользователя, и функция L e f t извлечет полное имя.

Функция MsgBox объединяет дату и время, но использует встроенную константу v b C rL f для вставки между ними разрыва строки. v b O K O n ly — предопределенная кон­ станта, возвращающая 0; в результате окно сообщения содержит только кнопку ОК. По­ следний аргумент — приветствие G r e e tin g , составленное ранее в процедуре.

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

Процедуру DateAndTime можно найти на прилагаемом к книге компактдиске в файле d a te and tim e .xlsm .

Отображение списка шрифтов

Если вам необходимо познакомиться со списком всех установленных шрифтов, помни­ те, что в Excel нет прямого способа получить эту информацию. Описанная в этом разделе методика основана на том, что в Excel 2010 для обеспечения совместимости поддержива­ ются свойства и методы объекта CommandBar. Эти свойства и методы использовались для работы с панелями инструментов и меню в версиях Excel, предшествующих Excel 2007.

Макрос S h o w In s ta lle d F o n ts отображает список установленных шрифтов в столб­ це А активного рабочего листа. При этом создается временная панель инструментов (объект CommandBar), добавляется элемент управления F o n t, а также считываются шрифты из этого элемента управления. Затем временная панель инструментов удаляется.