Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / vba_2002

.pdf
Скачиваний:
84
Добавлен:
09.04.2015
Размер:
9.9 Mб
Скачать

Изменение свойства Picture элемента управления Image

Если элемент управления Image в диалоговом окне UserForm называется image 1, то следующий оператор загрузит изображение (представленное переменной Fname) в элемент управления Image:

Imagel.Picture = LoadPicture(Fname)

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

Метод 2: использование элемента управления OWC ChartSpace

Как рассказывалось в главе 13, диалоговое окно UserFonn может содержать другие элементы управления, которые обычно не представлены в диалоговом окне Toolbox. Фирма Microsoft включает в пакет Office XP компоненты Office Web Components (OWC). Эти компоненты можно использовать в собственных диалоговых окнах UserForm. На рис. 15.13 покачан пример диалогового окна UserForm, которое содержит элемент управления C h a r t S p a c e .

Данная методика не позволяет отображать существующую диаграмму ЕхсЫ в диалоговом окне userFarm. Вместо этого можно создать код, который будет рисовать диаграмму в элементе управления ChartSpace.

Получение доступа к элементу управления ChartSpace

Первым этапом является добавление элемента управления в диалоговое окно Toolbox. Щелкните правой кнопкой мыши на панели инструментов, чтобы отобразить диалоговое окно Additional Controls. Прокрутите список и установите флажок опции Microsoft Office Chart 10.0 (если используется Excel 2000, то эта опция будет называться Microsoft Office Chart 9.0). Щелкните на кнопке ОК, и новый элемент управления будет размещен в диалоговом окне Toolbox.

Рис. 15.13. Это диалоговое окно UserForm содержит элемент •управления ChartSpace

Часть /V. Работа с пользовательскими формами

409

Добавление элемента управления ChartSpace в диалоговое окно UserForm

Добавление элемента управления C h a r t S p a c e в диалоговое окно UserForm осуществляется подобно тому, как добавляются стандартные элементы управления. После добавления элемента управления в диалоговое окно диаграмма все еще не будет отображаться. Добавлен всего лишь элемент области диаграммы. Для создания самой диаграммы необходимо написать соответствующий код.

Создание диаграммы

Следующий код, который находится в модуле диалогового окна UserForm, создает диаграмму на основе данных, которые хранятся в ячейках рабочего листа. Подписи категорий находятся в диапазоне А2:А13, а данные диаграммы содержатся в диапазоне В2 :В13. Предполагается, что элемент управления C h a r t S p a c e называется C h a r t S p a c e l .

Sub CreateChart()

Dim Chartl As ChChart 'WCChart

Dim Seriesl As ChSeries 'WCSeries

Dim r As Integer

Dim XValuesfl To 12)

Dim DataValuestl To 12)

1Добавить диаграмму в ChartSpace

Set chartl = ChartSpacel.Charts.Add

' Присвоить диаграмме имя With Chartl

.HasTitle = True

.Title.Caption = Range("Bl") End With

For r = 2 To 13

XValues(r - 1) = Cells(r, 1}

DataValues{r - 1) = Cells{r, 2}

Next r

1Создать ряды диаграммы

Set Seriesl = Chartl.SeriesCollection.Add

1Указать тип диаграммы и данные With Seriesl

.Type = chChartTypeColumnClustered

.SetData chDimCategories, chDataLiteral, XValues

.SetData chDimValues, chDataLi teral, DataValues End with

End Sub

Этот код начинается с объявления переменных. Если используется Excel 2000, то стоит обратить внимание на то, что типы объектов называются по-другому. Например, объект диаграммы имеет тип WCChart (а не c h C h a r t ) . Подобно тому, как объект ряда диаграммы имеет тип WCSeries (а не c h S e r i e s ) . В коде используется два массива: один для хранения подписей категорий (Xvalu.es), а другой для хранения данных (DataValues) .

Оператор S e t создает объект C h a r t , который располагается в пределах элемента управления C h a r t S p a c e . Этот объект C h a r t называется C h a r t l . Следующий блок операторов

устанавливает заголовок диаграммы,

который извлекается из ячейки в 1 . Цикл F o r Next

просматривает данные рабочего листа и заносит их в соответствующие массивы.

470

Глава 15. Использование диалоговых окон UserForm

Следующий оператор S e t добавляет к диаграмме ряды, и объект S e r i e s получает имя S e r i e s l . Блок кода With-End With указывает тип диаграммы (стандартная гистограмма) и данные для рядов.

Документацию по объектам OWC можно найти на жестком диске локального компьютера. Файлы справки сохраняются на диске при установке компонентов OWC. Также для получения дополнительной информации о свойствах и методах этих элементов управления можно воспользоваться окном Object Browser.

Важно понимать, что объектная модель для создания диаграммы с помощью CWC не соответствует объектной модели для создания диаграммы в Excel. Глава 18 содержит описание методов использования VBA для управления "настоящими" диаграммами Excel.

На рис. 15.14 показана более сложная версия данного примера. В этом случае пользователь может выбирать, какие данные будут отображаться на диаграмме. Кроме того, такая версия позволяет экспортировать диаграмму в виде файла формата GIF.

Рис. 15,14. Это диалоговое окно UserForm содержит элемент управления ChartSpa.ce (который входит в состав пакета Office Web Components)

Применение пакета Office Web Components

Office Web Components разрабатывались для создания интерактивных Web-страниц. В число этих компонентов входят Spreadsheet, Chart и Pivot Table. При создании приложения, которое использует OWC, необходимо установить пакет OWC в своем компьютере.

Пакет OWC поставляется в составе Microsoft Office 2000 и Microsoft Office 2002. Но его установка не всегда выполняется автоматически. Другими словами, нельзя точно предположить, что пользователи Microsoft Office 2000 будут гарантированно иметь в системе пакет OWC (например, они могли сознательно отказаться от установки этого пакета). Для того чтобы внести еще больше недоразумений, отметим, что версия Small Business пакета Microsoft Office 2000 вообще не содержит пакета OWC.

Таким образом, включать элементы управления OWC в проекты Excel следует очень осторожно. Если приложение будет широко распространяться, то лучше избегать использования компонентов 0WC.

Часть IV. Работа с пользовательскими формами

411

Это приложение доступно на Web-узле издательства. На узле вы найдете две версии: одна для Excel 2000 (с использованием OWC 9.0), а вторая для Excel 2002 (с использованием OWC 10.0)

Отображение листа в пользовательском диалоговомокне

Вам не понравилась отображенная в диалоговом окне UserForm диаграмма? А как насчет отображения в пользовательском диалоговом окне целого листа?

Рис. 15.15 представляет пример диалогового окна UserForm, который содержит элемент управления Microsoft Office Spreadsheet 10.0. Этот элемент управления может располагать полностью интерактивным листом, в котором находятся формулы л форматирование. Использование элемента управления S p r e a d s h e e t имеет ряд преимуществ по сравнению с использованием стандартных листов Excel: элемент управления может иметь ширину до 18278 столбцов и высоту до 262J 44 строк. Это примерно в 300 раз больше, чем может содержать стандартный лист Excel.

Рис. 15.!5. Диалоговое окно UserForm содержит элемент управ-

ленияSpreadsheet

Получение доступа к элементу управления Spreadsheet

Для начала необходимо добавить элемент управления S p r e a d s h e e t в диалоговое окно Toolbox. Щелкните правой кнопкой мыши на панели инструментов, чтобы отобразить диалоговое окно Additional Control. Прокрутите список и установите флажок опции Microsoft Office Spreadsheet 10.0 (если используется Excel 2000, то этот элемент управления будет называться Microsoft Office Spreadsheet 9.0ь Щелкните на кнопке ОК, чтобы добавить этот элемент управления в диалоговое окно Toolbox.

Добавление элемента управления Spreadsheet в диалоговое окно UserForm

Добавление элемента управления S p r e a d s h e e t в диалоговое окно UserForm осуществляется подобно тому, как добавляется любой другой элемент управления. Как только элемент управления будет добавлен в диалоговое окно UserForm, в этом окне появится таблица, состоящая из трех листов. Эту таблицу можно легко модифицировать.

412

Глава 15. Использованиедиалоговых окон UserForm

Простой пример

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

Этот пример можно использовать только в демонстрационных целях. Применение элемента управления Spreadsheet сопряжено со слишком большими накладными расходами. Более эффективным подходом считается использование элементов управления EditBox и расчет выплат с помощью кода VBA.

Рис. 15.16. Это диалоговое окно UserForm использует элемент управления Spread- shee t для простого расчета выплат займа

Добавление диалогового окна UserForm начните с создания новой рабочей книги, а далее следуйте приведенным ниже инструкциям. Удостоверьтесь, что к элементу управления Spreadsheet можно получить доступ из диалогового окна Toolbox.

1.Вставьте новое диалоговое окно UserForm и добавьте в него элемент управления Spreadsheet . He меняйте имя этого элемента управления, используемое по умолчанию {Spreadsheet].).

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

2.Выберите любую ячейку в элементе управления Spreadsheet и щелкните на ней правой кнопкой мыши. Из появившегося на экране контекстного меню выберите Команды и параметры.

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

3.Щелкните на вкладке Книга и удалите листы Лист2 и ЛистЗ. После этого сбросьте флажки опций горизонтальную полосу прокрутки, вертикальную полосу прокрутки, ярлычки листов и панель инструментов.

4.В столбце А введите текст, показанный на рис. 15.16. После этого измените ширину столбца А, чтобы в нем свободно размешался только что введенный текст.

5.Введите параметры займа в диапазон Б1: ВЗ. После этого введите формулу в ячейку В5: =ПЛТ(В2/12;ВЗ;-В1)

6.Выделите диапазон В1:ВЗ и щелкните на вкладке Формат в диалоговом окне Команды и параметры. Щелкните на пиктограмме в виде замка, что позволит разблокировать выделенные ячейки (остальные ячейки останутся заблокированными, что принято по умолчанию).

Часть /V. Работа с пользовательскими формами

413

7. Щелкните на вкладке Лист в диалоговом окне Команды и параметры. В поле Видимый диапазон введите А1: В5.

Это приведет к тому, что будут скрыты все неиспользуемые ячейки за пределами указанного диапазона.

8.После этого сбросьте флажки заголовки строк и заголовки столбцов.

9.Наконец, добавьте два элемента управления CommandButton. Один (называющийся

C a n c e l B u t t o n ) будет использоваться в качестве кнопки Отмена. Другой ( P a s t e - B u t t o n ) будет выполнять код, который вставляет рассчитанные результаты в активные ячейки листа Excel-

Рис.15.17,Воспользуйтесьэтимдиалоговым окном для настройки элемента управления Spreadsheet

Теперь пришло время добавить код VBA. На предыдущих этапах были разблокированы три ячейки. Блокирование ячеек не имеет никакого эффекта, пока лист не защищен (так же, как и в Excel). Таким образом, необходимо добавить код, который будет защищать лист при инициализации диалогового окна UserForm. Можно защитить лист на этапе проектирования (для этого используется диалоговое окно Команды и параметры), но тогда становится невозможным редактирование содержимого листа (если в лист вносятся изменения, то можно легко забыть включить его защиту). Защита листа на этапе выполнения позволяет удостовериться, что лист будет защитен и пользователь сможет вносить изменения только в ячейки, предназначенные для ввода.

Этот код выполняет описанную выше задачу:

Private Sub UserForm_lnitialize{) Spreadsheetl.ActiveSheet.Protect

.End Sub

Щелчок на кнопке P a s t e B u t t o n в диалоговом окне UserForm приведет к выполнению следующего кода:

Private Sub PasteButton_Click() ActiveCell.Value = Spreadsheetl.Range("B5") Unload Me

End Sub

Данная процедура размешает содержимое ячейки В5 (из элемента управления S p r e a d - s h e e t ) в активную ячейку рабочего листа Excel. После этого диалоговое окно UserForm выгружается из памяти.

Наконец, необходимо создать процедуру о(5работки события для кнопки Отмена.

Не существует какой-либо особой причины для использования элемента управления S p r e a d s h e e t в диалоговом окне UserForm. Однако приятно осознать, что в том случае, если эта возможность появится, существует способ ею воспользоваться.

414 Глава 15. Использование диалоговых окон UserForm

Расширенное диалоговое окно формы данных

Ниже приведен пример самого сложного диалогового окна u s e r F o r m среди всех тех, которые демонстрировались прежде. Настоящее диалоговое окно было разработано в качестве замены диалогового окна Excel Форма данных (рис. 15.18). Оно отображается на экране !лри выборе команды Данные^Форма.

Рис.15.18.ДиалоговоеокноExcel Форма данных

Как и диалоговое окно Форма данных, это диалоговое окно работает со списком на листе. Однако новое диалоговое окно выглядит совсем по-другому и предоставляет ряд дополнительных возможностей.

Описание

Новое диалоговое окно Форма данных содержит следующие дополнительные возможности.

Обрабатывает любое количество записей и полей. Диалоговое окно Excel Форма данных поддерживает только 32 записи.

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

Записи, которые отображены в диалоговом окне, всегда видны на экране и выделены другим цветом, что дает представление о текущем положении. Диалоговое окно Елее! Форма данных не поддерживает прокрутку экрана и не выделяет текущую запись,

После инициализации диалоговое окно всегда начинает работу с текущей активной ячейки. Диалоговое окно Excel Форма данных всегда начинает работу с первой записи в базе данных.

При закрытии диалогового окна выделяется текущая запись, Диалоговое окно Excel Форма данных выделение записи не производит.

Разрешается вставка записи в любое место базы данных. Диалоговое окно Excel Форма данных добавляет новые записи только в конец базы данных.

Критерий поиска содержится на отдельной вкладке, что позволяет легко узнать о параметрах поиска. Диалоговое окно Excel Форма данных не всегда явно предоставлчет информацию о критериях поиска,

При поиске, в отличие от диалогового окна Excel Форма данных, поддерживается приблизительное совпадение (*, ? и #).

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

ЧастьIV.Работаспользовательскимиформами

415

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

Установка надстройки

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

1. Скопируйте файл d a t a f orm. x l a с V/eb-узла издательства на жесткий диск. 2. В Excel выберите Сервис^Надстройки.

3. В диалоговом окне Надстройки щелкните на кнопке Обзор и найдите файл da- t a f orm. x l a в той папке, в которую он скопирован на первом шаге.

Использование расширенного диалогового окна формы данных

После установки надстройки станет доступна новая команда меню: flaHHbie^JWalk Enhanced Data Form. Можно использовать соответствующее диалоговое окно для работы с любой базой данных, расположенной на листе.

Резюме

В настоящей главе продемонстрированы сложные примеры применения пользовательских диалоговых окон. Изучение кода, предоставляемого вместе с этими примерами, поможет понять принципы использования возможностей диалоговых окон U s e r F o r m

Данная глава завершает часть IV. Последующие главы будут содержать дополнительные примеры использования диалоговых окон UserForm.

416

Глава 15. Использование диалоговых окон UserForm

Совершенные

методы

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

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

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

Разработкаутилит Excel с помощью VBA

В этой главе рассматриваются утилиты Excel. Основное назначение утилиты — расширение возможностей программы, обеспечение и облегчение доступа к уже представленным

функциям программы. Заметим, что создание утилит Excel является отличным способом улучшения даже хорошего продукта.

Об утилитах Excel

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

Excel, как и другие приложения Office, получает дополнительные функциональные возможности с выходом каждой новой версии. Однако многие пользователи со временем ощущают недостаток средств в существующем программном обеспечении. Например, пользователи, которым не нравится сетка на экране, требуют добавления и программу опции по ее скрытию. Ее можно было бы разместить в диалоговом окне настройки параметров, которое отображается на экране при выборе команды Сервис^Параметры. Можно также назначить одной из панелей инструментов соответствующую кнопку. Пользователи, которые часто работают с датами, требуют добавления команды отображения всплывающего календаря, который упростит введение дат в текущую ячейку. Некоторые нуждаются в более простом способе экспорта диапазона данных в файл.

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

Sub ToggleGridDisplay()

ActiveWindow.DisplayGridlines = _ Not ActiveWindow.DisplayGridlin.es

End Sub

Соседние файлы в папке 2 семестр