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

Глава 22. Работа с лентой

695

Вид (View): " %w{ F6 } M;

Разработчик (Developer): " %1 {F6}";

Надстройки (Add-Ins): " { F6} " .

Настройка ленты

С помощью VBA невозможно изменять ленту произвольным образом. Для этого

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

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

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

Дополнительные сведения о структуре файла Excel можно найти в главе 4.

ОВ данном разделе описан порядок просмотра данных файла рабочей книги X LS X .

Простой пример кода RibbonX

В этом разделе приводится пошаговая инструкция по изменению ленты Excel. В дан­ ном примере создается новая группа команд ленты (под названием Custom (Пользова­

тельская)), которая находится на вкладке Данные (Data). В новой группе ленты также создаются две новые кнопки под названием Hello World (Здравствуй мир) и Goodbye

World (Прощай мир). Щелчок на каждой из этих кнопок вызывает соответствующий макрос VBA.

Примечание

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

Сохранение изменений интерфейса пользователя

Пользователи Excel 2010 могут вносить изменения в ленту и панель быстрого досту­ па. В частности, не составляет особого труда добавление команд на панель быстрого доступа либо ленту. Каким же образом Excel отслеживает подобные изменения?

Сведения об изменениях, внесенных в панель быстрого доступа, хранятся в файле Excel .o f fic e u i. Местоположение этого файла различно. Например, в моей системе он находится в такой папке:

С:\Users\<HMir_noj7b30BaTej7.ff>\AppData\Local\Microsof t\Of fice

Дополнительные сведения о файле E x c e l. o f f ic e u i можно найти в главе 4.

696

Часть VI. Разработка приложений

Использование метода SendKeys далеко не всегда дает хороший результат. Напри­ мер, если вызвать на выполнение предыдущий пример во время отображения пользова­ тельской формы, коды нажатых клавиш будут пересланы форме UserForm, а не ленте.

Просмотр ошибок

Прежде чем выполнять любые настройки ленты, следует включить отображение ошибок, возникающих при использовании метода RibbonX. Выполните команду Файл1^ Параметры Excel (File^Excel Options) для открытия диалогового окна Параметры Excel, затем выберите вкладку Дополнительно (Advanced) и перейдите в раздел Дополнитель­ но (General). Здесь установите флажок Показывать ошибки интерфейса пользователя надстроек (Show Add-in User Interface Errors).

После выбора этой настройки будут отображаться ошибки RibbonX (в случае их на­ личия) при открытии рабочей книги — очень полезная возможность на этапе отладки.

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

1.Создайте новую рабочую книгу Excel, вставьте модуль VBA и введите код двух

процедур обратного вызова.

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

 

Sub

H e llo W o rld (c o n tro l

As IR ib b o n C o n tro l)

 

 

MsgBox "Здравствуй

мир"

 

End

Sub

 

 

Sub

G o o d b ye W o rId (co n tro l As IR ib b o n C o n tro l)

 

 

ThisW orkbook. C lose

 

 

End

Sub

 

2.

Сохраните рабочую книгу, присвоив ей имя rib b on m o d if ic a t io n . xlsm .

3.

Закройте рабочую книгу.

 

4.

Активизируйте папку, которая содержит файл rib b o n m o d ific a tio n .x ls m ,

и создайте папку custom UI.

5.Находясь в этой папке, воспользуйтесь текстовым редактором (например, Windows Notepad) для создания текстового файла customUI .xml, который содержит сле­ дующий XML-код RibbonX.

<customUI

xm ln s= "h t t p : //s c h e m a s .m ic ro s o ft. c o m /o ffic e /2 0 0 6 /0 1 / _

cu s to m u i">

 

 

< ribb on >

 

 

 

<tabs>

 

 

 

<tab idM so="TabD ata">

 

 

<group

id = "G ro u p l"

la b e l= " C ustom ">

 

< b u tto n id = " B u tto n l"

 

 

la b e l= " Здравствуй мир"

 

 

s iz e = "n o rm a l"

 

 

 

o n A c tio n = "H e llo W o rld "

 

 

imageMso="HappyFace" />

**

< b u tto n id = "B u tto n 2 "

 

la b e l="Прощай

мир"

 

 

s iz e = " n o rm a l"

 

 

 

onAction="G oodbyeW orId"

/>

 

im a g e M s o = "D e c lin e ln v ita tio n "

698

Часть VI. Разработка приложений

"/c u s to m U I/c u s to m U l.x m l" Id = "12345" />

13.Сохраните файл с расширением . r e ls , затем перетащите его обратно в область ZIP-файла, заменив прежнюю версию этого файла.

14.Удалите расширение .z ip . После этого возвращается прежнее название файла: rib b o n m o d ific a tio n .x ls m .

Откройте рабочую книгу в Excel. Если все было сделано правильно, вы увидите но­ вую группу с двумя новыми кнопками (Hello World и Goodbye World), находящуюся на вкладке Данные (Data), как показано на рис. 22.5.

Ф

Группировать'r

‘• j

ф Hello World

Ф

Разгруппировать

" j

X Goodbye World

f*p§ Промежуточный итог

i

 

________ Структура____________ faj____ Custom____________________

Рис. 22.5. С помощью кода RibbonX была соз­ дана новая группа, содержащая две кнопки

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

Рассматриваемая в этом примере рабочая книга находится на прилагаемом компакт-диске в файле rib b o n m o d ific a tio n , xlsm .

Обратите внимание, что новая группа на вкладке ленты появляется только в том слу­ чае, когда код RibbonX находится в активной рабочей книге. Именно в этом заключается основное отличие от изменений пользовательского интерфейса, выполненных в преды­ дущих версиях Excel.

Совет

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

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

Усоверш енствование простого примера кода RibbonX

В этом разделе приводится пошаговая инструкция по внесению изменений в ленту, которые аналогичны изменениям, описанным в предыдущем разделе. В данном случае использовалось приложение Custom UI Editor для Microsoft Office. Эта программа позво­ ляет не только создавать код RibbonX, но и проверять ранее созданный код. Она также устраняет необходимость в выполнении сложных манипуляций с файлами. Наконец, эта программа в состоянии генерировать объявления процедур обратного вызова VBA, ко­ торые можно скопировать и вставить в модуль VBA.

Загрузите свободно распространяемую программу Custom UI Editor для Microsoft Office по такому адресу:

h t t p : //o p e n x m ld e v e lo p e r. o r g /a r tic le s / c u s to m u ie d ito r . aspx

Для добавления на ленту новой группы и кнопок с помощью Custom UI Editor (как описано в предыдущем разделе) выполните следующие действия.

Id ) .
< R e la t io n s h ip > ,

Глава 22. Работа с лентой

701

Процедуры обратного вы зова V B A

Как вы помните, рабочая книга включает две процедуры VBA: H elloW orld и Good­ byeWorld. Имейа этих процедур соответствуют параметрам onA ction в коде RibbonX. Именно с помощью параметра onA ction код RibbonX может быть связан с кодом VBA.

Обе процедуры VBA содержат аргумент c o n t r o l , который представляет собой объ­ ект I R ib b o n C o n t r o l. Этот объект включает три свойства, доступ к которым обеспе­ чивается с помощью кода VBA.

C o n t e x t . Дескриптор активного окна, содержащий ленту, которая была активи­

зирована с помощью обратного вызова. Например, воспользуйтесь следующим выражением для получения имени рабочей книги, которая включает код RibbonX:

c o n t r o l . C o n te x t. C a p tio n

I d . Включает имя элемента управления, указанного с помощью его параметра Id.

T a g . Содержит произвольный лист, который связан с элементом управления. Процедуры обратного вызова VBA могут иметь произвольную степень сложности.

Файл . r e l s

После вставки файла, содержащего код RibbonX, эффект достигается после установки связи между файлами документа и настроек. Эти связи создаются с помощью XML-кода и хранятся в файле с расширением . r e l s , который находится в папке _ r e ls . Ниже представлена связь для примера, представленного в предыдущем разделе.

R e la tio n s h ip

Type="h t t p : / /s c h e m a s .m ic ro s o ft. c o m /o ffic e /2 0 0 6 /

r e la t io n s h ip s / u i/ e x t e n s ib ilit y "

T a rg e t= " /c u s to m U I/c u s to m U I. x m l"

Id = "12345"

/>

 

Параметр T a r g e t указывает на

файл c u s to m U I. x m l, который содержит код

RibbonX. Значение параметра I d — любая строка, выбранная случайным образом. Та­ ким образом, эта строка может содержать любую информацию, а ее длина выбирается из соображений уникальности файла (т.е. длина должна быть настолько большой, чтобы не нашелся другой тег использующий тот же параметр

Код RibbonX

А теперь рассмотрим более сложный вопрос — создание XML-кода, который выполня­ ет изменение пользовательского интерфейса. Как отмечалось ранее, в этой книге не рас­ сматриваются методы написания кода RibbonX. Все ограничивается несколькими приме­ рами, и для получения другой информации следует обращаться к другим источникам.

Использование изображ ений im ageM so

ВMicrosoft Office 2010 поддерживается более 1000 именованных изображений, ко­ торые связаны с различными командами. Если вы знаете имя изображения, можете связать это изображение с пользовательскими элементами управления ленты.

На следующем рисунке показана рабочая книга, которая содержит имена всех изо­ бражений imageMso. При просмотре имен изображений можно видеть одновременно до 50 изображений (маленького либо среднего размеров), начиная с имени изображе­ ния, находящегося в активной ячейке. Эта рабочая книга под именем mso image brow ser. xlsm находится на прилагаемом к книге компакт-диске.

iaea 22. Работа с лентой

703

ет новую группу на вкладке Разметка страницы (Page Layout), а также добавляет гажок, который включает отображение разрывов.

П ри м еч ан и е

Несмотря на то что в Excel находится более 1700 команд, отсутствует ко­ манда, предназначенная для отображения разрывов страниц. Помимо печа­ ти и предварительного просмотра страниц, единственный способ скрыть разрывы страниц— использование диалогового окна Параметры Excel (Excel Options). Поэтому этот пример имеет также праетическую ценность.

Этот пример довольно сложен, поскольку он требует, чтобы новый элемент управле- 1я лентой был синхронизирован с активным листом. Например, если был активизиро- рабочий лист, который не отображает разрывы страниц, флажок должен быть уста- )вленным. Более того, разрывы страниц не могут отображаться на листе диаграммы, )этому флажок должен быть сброшен, если активизируется лист диаграммы.

од RibbonX

Следующий код RibbonX добавляет новую группу (с флажком) на вкладку Разметка границы (Page Layout).

:ustomUI

xm ln s= "h t t p : //s c h e m a s .m ic r o s o ft. c o m /o ffic e /2 0 0 6 /0 1 /c u s to m u i" onLoad=" I n i t i a l i z e " >

ribbon > tabs>

tab idM so= "T abP ageLayoutE xcel">

<group id = "G ro u p l"

la b e l= "C u s to m ">

ccheckBox id = "C h e c k b o x l"

la b e l= "P a g e

B reaks"

o n A ctio n = "T o g g le P a g e B re a kD isp la y" g etP re ssed = "G etP resse d"

g e tE n a b le d = "G e tE n a b le d "/ > </g ro u p >

/tab>

/tabs>

/ribbon>

/custom U I>

Этот код RibbonX ссылается на четыре процедуры обратного вызова VBA, каждая из оторых описана ниже:

I n i t i a l i z e — вызывается при открытии рабочей книги;

T o g g le P a g e B r e a k D is p la y — вызывается после щелчка мышью на флажке;

G e tP r e s s e d — вызывается при деактивизации элемента управления (нажи­

 

мается клавиша);

G e tE n a b le d — вызывается при деак­

тивизации элемента управления (активи­ зируется другой лист).

На рис. 22.8 показан новый элемент управения

4

Переместить вперед

|=> Выровнять '■

О

Page Breaks

L4

Переместить н а з а

д Г р у п п и р о в а т ь '

 

 

&

Область выделения

Повернуть

 

 

_______________Упорядочить_______________ |

 

Custom

Рис. 22.8. Этот флажок определяет отображение разрывов страниц на активном листе

704 Часть VI. Разработка приложений

К о д У В А

Тег <C ustom U I> включает параметр onLoad, который определяет процедуру об­ ратного вызова VBA, код которой приводится ниже.

P u b lic MyRibbon As

IR ibbonU I

Sub

I n itia liz e ( R ib b o n As IR ibb on U I)

1

Вызывается при

з а гр у з к е рабочей кн и ги

 

Set MyRibbon = Ribbon

End

Sub

 

Процедура I n i t i a

l i z e создает объект IR ib b o n U I, который называется M yR ib ­

bon. Обратите внимание на то, что M yR ib bo n — это глобальная переменная, поэтому доступ к ней возможен со стороны других процедур в этом модуле.

Затем была создана простая процедура обработки событий, которая вызывается в случае активизации рабочего листа. Эта процедура, находящаяся в модуле кода T h is ­ W o rkbo ok (ЭтаКнига), вызывает процедуру C h e c k P a g e B re a k D is p la y .

P riv a te

Sub W o rkb o o k _ S h e e tA ctiva te (B yV a l Sh As O b je c t)

C a ll

C heckPageBreakD isplay

End Sub

 

Процедура C h e c k P a g e B re a k D is p la y отменяет установку флажка. Другими сло­ вами, она разрушает все данные, связанные с этим элементом управления.

Sub

C heckP ageB reakD isplay()

 

'

Вызывается при а кти ви за ц и и

л иста

 

M y R ib b o n .In v a lid a te C o n tro l

( "C h e c k b o x l")

End

Sub

 

После отмены установки флажка вызываются процедуры G e tP re s s e d

и GetEn-

a b le d .

 

 

 

 

 

 

Sub

G e tP re s s e d (c o n tro l As

IR ib b o n C o n tro l,

ByRef re tu rn e d V a l)

 

'

Вызывается

после

д е активизац и и элемента

управления

 

 

On E rro r Resume

N ext

 

 

 

 

 

re tu rn e d V a l

= A c tiv e s h e e t. D isplayP ageB reaks

 

End

Sub

 

 

 

 

 

 

Sub

G e tE n a b le d (c o n tro l As

IR ib b o n C o n tro l,

ByRef re tu rn e d V a l)

 

'

Вызывается

после

отмены

у с та н о в ки флажка

 

 

re tu rn e d V a l

= T ypeN am e(A ctivesheet)

= "W orksheet"

 

End

Sub

 

 

 

 

 

 

Обратите внимание

на то,

что аргумент

r e tu r n e d V a l передается

по ссылке

(B yR ef). Это означает, что код может изменять значение— именно это и происходит в данном случае. При выполнении процедуры G e tP re s s e d переменной re tu rn e d V a l присваивается значение, соответствующее состоянию свойства D is p la y P a g e B re a k s активного листа. В результате параметру P re s s e d элемента управления присваивается значение T ru e (если отображаются разрывы страниц). При этом флажок установлен. Если же значение этого параметра F a ls e , флажок не устанавливается.

В процедуре G e tE n a b le d переменной r e tu r n e d V a l присваивается значение T ru e , если в качестве активного листа выбран рабочий лист (не лист диаграммы). Таким образом, элемент управления активизируется только в том случае, когда в качестве актив­ ного листа выбран рабочий лист. **

В качестве вспомогательной процедуры VBA выбрана процедура o n A c tio n под на­ званием T o g g le P a g e B re a k D is p la y , которая выполняется в том случае, когда поль­ зователь устанавливает или снимает флажок.

706 Часть VI. Разработка приложений

Совет

Для создания “минимального” пользовательского интерфейса используется

атрибут s ta rtF ro m S c ra tc h

тега <ribb on > . Если значение этого атрибута

равно True, скрываются все встроенные вкладки.

c rib b o n s ta rtF ro m S c ra tc h = "tru e " >

С о зд а н и е группы ленты

 

Код из примера rib b o n c o n tr o ls

demo .xlsm создает четыре группы на вкладке

My Stuff. Ниже представлен код, создающий эти четыре группы.

<group id = "G ro u p l"

la b e l= "M y S t u f f ">

</g ro u p >

la b e l= "M o re S t u f f ">

<group id= "G rou p2 "

< /g ro u p >

la b e l= " B u ilt

In S t u f f ">

<group id= "G rou p3 "

< /g ro u p >

la b e l= " G a lle r ie s ">

<group id= "G rou p4 "

< /g ro u p >

 

 

Эти пары тегов (<g ro u p >, </g ro u p >) находятся между тегами <tab> и </tab>, которые создают новую вкладку.

С о зд а н и е эл ем ен то в управления

Ниже представлен код RibbonX, который создает элементы управления в первой группе (Stuff), показанной на рис. 22.10. Обратите внимание на то, что элементы управ­ ления определены в первом наборе тегов <group >.

<group id = "G ro u p l" la b e l= "M y

S t u f f ">

/>

c la b e lC o n tro l

id = " L a b e ll"

g e tL a b e l= "g e tL a b e ll"

c la b e lC o n tro l

id = "L a b e l2 "

g e tL a b e l= "g e tL a b e l2 "

/>

<e d itB o x id = " E d itB o x l" showLabe1= " t ru e "

la b e l= "Number:"

onChange=" E d itB o xl_ C h a n g e " / >

<b u tto n id = " B u tto n l"

la b e l= "C a lc u la to r" s iz e = "la rg e "

o n A c tio n = "S h o w C a lc u la to r" im a g e M so = "C a lcu la to r" />

< /g ro u p >

Для каждого из двух элементов управления L a b e l

(подпись) используется связанная

с ним процедура обратного вызова VBA ( g e tL a b e ll

и g e tL a b e l2 ). Ниже представ­

лен код этих процедур.

 

 

 

 

Sub

g e tL a b e ll( c o n tr o l As

IR ib b o n C o n tro l,

ByRef re tu rn e d V a l)

End

re tu rn e d V a l = "H e llo

"

& A p p lic a tio n .UserName

Sub

IR ib b o n C o n tro l,

ByRef re tu rn e d V a l)

Sub

g e tL a b e l2 (c o n tro l As

End

re tu rn e d V a l = "Today

is

" & Date

 

 

Sub

 

 

 

 

Непосредственно после загрузки кода RibbonX вызываются на выполнение эти две процедуры, а заголовки элементов управления L a b e l динамически обновляются значе­ ниями имени пользователя и даты.

Элемент управления e d i t Box включает процедуру обратного вызова onChange под названием E ditB oxl_C hange, которая вычисляет квадратный корень от введенного

708

Часть VI. Разработка приложений

<ite m id = "M o n th ll" lab e l= "N o ve m b e r"/>

<ite m id = "M o n th l2 " lab e l= "D e ce m b e r" /> </comboBox>

</g ro u p >

Эта группа включает следующие элементы управления: to g g le B u tto n , раздели­ тель, checkB ox и comboBox. Эти элементы управления просты в применении и не тре­ буют дополнительных объяснений. За исключением разделителя (вставляет вертикаль­ ную линию), для каждого элемента управления существует связанная с ним процедура обратного вызова, которая просто отображает состояние этого элемента.

Sub

T o g g le B u tto n l_ C lic k (c o n tro l As IR ib b o n C o n tro l,

_

 

ByRef re tu rn e d V a l)

&

re tu rn e d V a l

 

End

MsgBox

"T o gg le v a lu e : "

 

Sub

 

 

As IR ib b o n C o n tro l, _

 

Sub

C h e ckb o xl_ C h a n g e (co n tro l

 

 

p re ssed

As Boolean)

"

& p re ssed

 

End

MsgBox

"Checkbox v a lu e :

 

Sub

 

As

IR ib b o n C o n tro l, te x t

As S trin g )

Sub

C om bol_C hange(control

End

MsgBox

te x t

 

 

 

Sub

 

 

 

 

• ч П рим ечание

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

Элементы управления в третьей группе являются встроенными (рис. 22.12). Для включения встроенного элемента управления в пользовательскую группу следует знать его имя (значение параметра idM so).

Ниже представлен код RibbonX третьей группы ленты.

<group id= "G rou p3 "

la b e l= " B u ilt In S t u f f ">

c c o n tr o l

idM so="Copy"

la b e l= "C o p y " />

< c o n tro l

idM so= "P aste"

la b e l= "P a s te " e n a b le d = "tru e " />

c c o n tro l idM so="W indowSwitchW indowsMenuExcel"

la b e l= "S w itc h

Window"

/>

c c o n tro l

id M s o = " Ita lic "

/>

c c o n tro l

idM so= "B o ld"

/>

 

c c o n tro l

idM so= "F ile O p en " />

с / g ro u p >

 

 

 

 

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

На рис. 22.13 показана последняя группа элементов управления, которая состоит из двух коллекций.

^ Сору

К

Щ Pick a Month:

I f t Paste

Ж

Banjo

§? Switch Window ~

Открыть

Players ^

Buitt In Stuff

Galleries

Рис. 22.12. В этой группе находятся

Рис. 22.13. Эта группа включает две

встроенные элементы управления

коллекции

лава 22. Работа с лентой

709

Ниже приводится код RibbonX, определяющий эти коллекции.

group id= "G rou p4 " la b e l= " G a lle r ie s "> < g a lle r y id = " G a lle r y l"

im ageM so="V iew A ppointm entInC alendar"

la b e l= " P ic k

a

M o n th :"

colum ns="2 "

ro w s= "6 "

o n A ctio n = "M o n th S e le cte d " >

c ite m

id = "J a n u a ry "

la b e l= "J a n u a ry " _

imageMso="Q ueryS electQ ueryT ype" / >

< ite m

id = "F e b ru a ry "

la b e l= "F e b ru a ry " _

im ageM so="Q uerySelectQ ueryType" / >

c ite m

id = "M a rch "

la b e l= "M a rc h " _

imageMso=" Q ueryS electQ ueryT ype" / >

<ite m id = " A p r il" la b e l= " A p r il" _ imageMso=" Q ueryS electQ ueryT ype" / >

<ite m id="M ay" la b e l= "M a y" _ imageMso=" Q ueryS electQ ueryT ype" / >

c ite m

id = "J u n e "

la b e l="June" _

 

 

imageMso=" Q ueryS electQ ueryT ype" / >

 

c ite m

id = " J u ly "

la b e l= " J u ly " _

 

 

imageMso=" Q ueryS electQ ueryT ype" / >

 

c ite m

id = "A u g u s t" la b e l= "A u g u s t" _

 

 

imageMso="Q ueryS electQ ueryT ype" / >

 

c ite m

id= "S e ptem be r"

la b e l= "S e p te m b e r" _

imageMso=" Q ueryS electQ ueryT ype" / >

 

c ite m

id = "O c to b e r"

la b e l= "O c to b e r"

_

 

imageMso=" Q ueryS electQ ueryT ype" / >

_

c ite m

id="N ovem ber"

la b e l= "N o ve m b e r"

imageMso="Q ueryS electQ ueryT ype" / >

_

c ite m

id="D ecem ber"

lab e l= "D e ce m b e r"

imageMso=" Q ueryS electQ ueryT ype" / >

 

c b u tto n id = "T o d a y"

 

 

 

 

la b e l= "T o d a y . . . "

 

 

 

im ageM so="V iew A ppointm entInC alendar"

 

onAct io n = " ShowToday" / >

 

 

c /g a lle r y >

 

 

 

 

 

c g a lle r y

id = " G a lle ry 2 "

 

 

 

la b e l= "B a n jo

P la y e rs "

 

 

 

s iz e = "la rg e "

 

 

 

 

 

colu m n s= "4 "

 

 

 

 

 

ite m W id th = "100"

ite m H e ig h t= "125"

 

imageMso=

"Camera"

 

 

 

o n A c tio n = "O n A c tio n ">

 

 

 

c ite m

id = "b p 0 1 "

im age="bp0 1 "

/>

 

 

c ite m id = "b p 02 "

im age="bp02 "

/>

 

 

c ite m id = "b p 0 3 "

im age="bp03"

/>

 

 

c ite m id = "b p 0 4 "

im age="bp04"

/>

 

 

c ite m id = "b p 0 5 "

im age="bp05"

/>

 

 

c ite m id = "b p 0 6 "

im age="bp06"

/>

 

 

c ite m id = "b p 0 7 "

im age="bp07"

/>

 

 

c ite m id = "b p 0 8 "

im age="bp08"

/>

 

 

c ite m id = "b p 0 9 "

im age="bp09"

/>

 

 

c ite m

id = " b p l0 "

im a g e = "b p l0"

/>

 

 

c ite m

id = " b p ll"

im a g e = "b p ll"

/>

 

 

c ite m

id = " b p l2 "

im a g e = "b p l2 "

/>

 

 

c ite m

id = "b p l3 "

im a ge = "bp l3"

/>

 

 

c ite m

id = "b p l4 "

im a g e = "b p l4 "

/>