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

2 семестр / vba_2002

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

Проверяется активность рабочей книги. Если книга неактивна, то отключается элемент управления O p t i o n B u t t o n , который позволяет пользователю создать новый рабочий лист в активной рабочей книге.

Если рабочая книга активна, то в результате дополнительной проверки определяется защищенность структуры рабочей книги. Если это так. то процедура отключает элемент управления O p t i o n B u t t o n , который позволяет создавать новый рабочий лист в активной рабочей книге.

Обработка событий в процессе отображения диалогового окна UserForm

Модуль кода для диалогового окна FormMain содержит несколько процедур обработки событий C l i c k и Change для элементов управления, которые находятся в диалоговом окне

UserForm.

Щелчок на кнопках Назад и Далее определяет, какая из страниц элемента управления MultiPage будет отображена следующей. Процедура MultiPage_change изменяет заголовок диалогового окна UserForm и включает или отключает кнопки Назад и Далее, в зависимости от того, какая страница элемента управления отображается в данный момент. Глава 15 содержит дополнительную информацию о методах программирования мастеров.

Отображение справочной информации

Для отображения справочной информации существует несколько способов. В данном случае используется простая техника, в которой применяется диалоговое окно UserForm. Это диалоговое окно отображает текст, который хранится на рабочем листе. Можно заметить, что представляемая справочная информация зависит от контекста. Когда пользователь щелкает на кнопке Справка, отображается раздел справочного руководства, который относится к активной странице элемента управления M u l t i P a g e .

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

Создание нового рабочего листа

Щелчок на кнопке Готово приводит к выполнению основной задачи приложения. Процедура обработки события C l i c k для этой кнопки выполняет следующие действия.

• Вызывается функция D a t a l s V a l i d , которая проверяет введенные пользователем данные на правильность. Если все введенные данные корректны, то функция возвращает значение T r u e и процедура продолжает свое выполнение. Если обнаружены некорректные входные данные, функция D a t a l s V a l i d активизирует элемент управления, который содержит неверные данные, и создает окно сообщения с описанием проблемы (рис. 25.7).

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

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

639

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

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

На рабочий лист заносятся заголовки столбцов.

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

Чтобы задать неименованные ссылки, используется формат R1C1 {что намного проще, чем определение фактического адреса ячейки).

Вторая строка формул вводится на рабочий лист и копируется в нижние строки для каждого месяца.

Если пользователь затребовал отображение ежегодных, а не ежемесячных данных, то

впроцедуре запускается метод S u b t o t a l для расчета необходимых значений. Этот подход демонстрирует гибкость встроенных средств Excel, которые помогают избежать написания дополнительного кода.

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

Когда Excel подсчитывает суммы, она выделяет их с помощью границ. Если пользователь

не требовал выделять суммы границами, то процедура использует метод C l e a r O u t l i n e для их отмены.

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

Далее процедура меняет ширину столбцов, блокирует заголовки и защищает формулы,

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

• Наконец, процедура S a v e D e f a u l t s сохраняет сведения о состоянии элементов управления диалогового окна UserForm в системном реестре. Эти значения будут использоваться по умолчанию, в следующий раз, когда пользователь примется за создание расписания амортизации займа (дополнительная информация приводится в разделе "Сохранение и получение значении по умолчанию" далее в этой главе).

Сохранение и получение значений по умолчанию

Если запустить это приложение, то можно заметить, что диалоговое окно FormMain всегда отображает значения, которые использовались в последний раз. Другими словами, диалоговое окно "запоминает" последние данные и применяет их в качестве новых значений по умолчанию. Таким образом упрощается создание нескольких сценариев "что-если" для амортизации кредита, которые отличаются только одним параметром. Такой эффект достигается

640

Глава 25. Разработка приложений для пользователей

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

Следующая процедура, которая называется GetDefaults, циклически просматривает элементы управления в диалоговом окне UserPorm. Если элемент управления имеет тип TextBox, ComboBox, OptionButton. CheckBox или SpinButton, то процедура вызывает функцию VBA GetSetting и считывает значения из системного реестра. Обратите внимание, что третий аргумент функции GetSetting представляет значение, которое используется, если в системном реестре не найдено требуемых параметров. В этом случае применяется значение, которое указывается для элемента управления на этапе проектирования. APPNAME является глобальной константой, содержащей название приложения.

Sub GetDefaultsU

Dim c t l As Control Dim CtrlType As String

For Each c t l In Me.Controls CtrlType = TypeName(ctl)

If CtrlType = "TextBox" Or _ CtrlType = "ComboBox" Or _ CtrlType = "OptionButton" Or „ CtrlType = "CheckBox" Or _ CtrlType = "SpinButton" Then ctl.Value = VBA.GetSetting _

(APPNAME, "Defaults", ctl.Name, ctl.Value) End If

Next c t l End Sub

На рис. 25.8 показано, как эти значения выглядят при запуске системного реестра.

/W. 25.3. Системный реестр хранит значения по умолчанию элементов управлениямастера

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

641

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

Sub SaveDefaultsО Dim ct l As Control

Dim CtrlType As String

For Each ctl In Me.Controls CtrlType = TypeName(ctl)

If CtrlType = "TextBox" Or _ CtrlType • "ComboBox" Or _ CtrlType = "OptionButton" Or _ CtrlType = "CheckBox" Or _ CtrlType = "SpinButton" Then

SaveSetting АРРШШЕ, "Defaults", ctl.Name, ctl.Value End If

Next ct l End Sub

И функция GetSetting, и оператор SaveSetting всегда используют приведенный ниже раздел системного реестра для хранения значений: HKEY_CURRENT_USER\Software\VB and VBA Program Settings\

Потенциальные улучшения

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

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

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

Добавить больше параметров форматирования (например, отключить десятичные разряды и отобразить символы доллара).

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

Концепции разработки приложений

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

Приложение мастера расчета займа а полной мере демонстрирует основные методы и концепции разработки приложений в Excel.

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

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

642

Глава 25. Разработка приложений для пользователей

Динамическая установка свойства E n a b l e d элементов управления.

Связывание элемента управления TextBox с элементом управления S p i n B u t t o n . Отображение интерактивного справочного руководства.

Именование ячеек с помощью кода VBA.

Создание и копирование формул с помощью кода VBA. Чтение и запись данных в системный реестр.

Заключение

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

Список действий, которые необходима выполнить при разработке приложения

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

Проводитлиприложениевосстановлениеданныхпослезавершениясвоейработы?

Удостоверьтесь, что приложение по завершении своей работы восстанавливает состояние панелей инструментов и меню.

Поддерживают ли диалоговые окна работу с помощью клавиатуры? Не забудьте добавить комбинации клавиш, а также проверьте правильность порядка перехода между элементами управления,

Делает ли приложение предположения о существовании папок? Если приложение читает или записывает информацию в файлы, то следует ожидать, что папка по умолчанию уже существует.

Делается ли предположение о том, что больше не открыт ни один рабочий лист?

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

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

Делались ли попытки оптимизации приложения? Например, можно увеличить быстродействие приложения, если явно указать тип переменных

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

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

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

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

643

Резюме

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

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

644

Глава 25. Разработка приложений для пользователей

Другие темы

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

касающуюся вопросов совместимости. В главе 27 представлены способы использования VBA для управления файлами. В главе 28 описывается вопрос управления компонентами Visual Basic, например, диалоговыми окнами UserForm и модулями кода. В главе 29 изложены принципы работы с модулями классов. Эта часть завершается главой, которая содержит ответы на часто задаваемые вопросы в области программирования в Excel.

Вопросы

совместимости

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

Но если приложение должно выполняться под управлением более старых версий Excel, в Excel для Macintosh, а также в интернациональных версиях Excel, то рекомендуем ознакомиться с вопросами несовместимости данных. Эти вопросы являются основной темой настоящей главы.

Что такое совместимость

Совместимость — это часто используемый термин в среде разработчиков компьютерных приложений. Данный термин обозначает правильность выполнения приложения в различных условиях. Эти условия определяются настройками аппаратного или программного обеспечения, а также принципами их взаимодействия. Например, программное обеспечение, которое создано специально для 32-битной системы, такой как Windows XP, не будет работать под управлением 16-битной более старой версии Windows (3.x). Другими словами, 32битные приложения не совместимы с Windows 3.x. И, как не сложно догадаться, программное обеспечение, созданное для Windows, не будет автоматически запускаться под управлением таких операционных систем, как MacOS или Linux.

В этой главе рассматриваются более конкретные вопросы совместимости, которые подразумевают работу приложений Excel 2002 в более ранних версиях Excel для Windows и Excel для Macintosh. Тот факт, что две версии Excel используют одинаковый формат файлов, не гарантирует, что совместимость содержимого этих файлов будет полной. Например, Excel 97. Excel 2000 и Excel 2002, а также Excel 98 для Macintosh поддерживают одинаковый формат файлов, но при этом конфликты совместимости возникают довольно часто. Тот факт, что определенная версия Excel может открыть файл рабочей книги надстройки, не означает, что она сможет обработать инструкции VBA, которые сохранены в этом файле.

Вопросы совместимости более важны, чем кажется на первый взгляд. С проблемами совместимости можно столкнуться даже в пределах одной версии Excel. Например, Excel 2000 существует в виде как минимум трех подверсий: первоначальный выпуск продукта, версия SR-1 и еще одна версия, которая называется SR-la. Дополнительные версии предназначены для исправление ошибок исходной программы — они вносят малозаметные визуальные изменения, хотя часто кардинально изменяют поведение Excel. Таким образом, невозможно гарантировать, что приложение, разработанное в основной версии, будет безошибочно работать в Excel 2000 подверсии SR-1.

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

Проблемы совместимости

Вам необходимо помнить о пяти категориях проблем совместимости. Эти категории перечислены ниже и детально рассматриваются далее в этой главе.

Несовместимость форматов файлов. Рабочие книги могут сохраняться в нескольких форматах Excel. Порой невозможно открыть рабочую книгу, которая сохранена в более поздней версии Excel.

Несовместимость новых средств. Очевидно, что новые возможности, которые появились в поздних версиях Excel, не могут использоваться в старых версиях программы.

32-битные и 16-битные архитектуры. Если вами используются функции Windovs API и приложение должно работать с 16-битной версией Excel (Excel 5), то необходимо обратить внимание и на эту проблему.

Совместимость Windows и Macintosh. Если приложение должно работать поя управлением обеих платформ, то следует выделить намного больше времени для решения всех проблем совместимости.

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

После изучения этой главы вам должно стать ясно, что существует один гарантированны?! способ достижения совместимости: приложение необходимо протестировать на всех целевых платформах, а также во всех интересующих версиях Excel. Зачастую это просто невозможно Однако существуют некоторые способы, которые помогают разработчику частично гарантировать работу приложения в различных версиях Excel.

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

Хорошим источником информации о потенциальных проблемах совместимости можно считать интерактивную базу знаний Microsoft, которая расположена по адресу h t t p : //search, support .microsoft.com, Эта база поможет идентифицировать проблему, которая возникает в определенной версии Excel.

Часть VIL Другие темы

647

Поддерживаемые форматы файлов Excel

Программа Excel позволяет сохранять рабочие книги в формате, который поддерживается более ранними версиями. Кроме того, можно сохранить рабочую книгу в формате "двух версий" (он поддерживает два формата в одном файле). Использование такого полхода приводит к увеличению размера сохраняемого файла.

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

Книга Microsoft Excel (*.xls). Стандартный формат для файлов Excel 2002. Он поддерживается в Excel 97, Excel 2000 и в Excel 2002.

Книга Microsoft Excel 5,0/95. Формат, который поддерживается в Excel 5 и в более поздних версиях.

Книга Microsoft Excel 97-2000 & 5.0/95. Двойной формат, который поддерживается в Excel 5 и в более поздних версиях.

Файл Microsoft Excel 4.0(*.x!s). Может открываться в Excel 4 и более поздних версиях. Используется для сохранения одного рабочего листа.

Файл Microsoft Excel 3.0 (*.xls). Может открываться в Excel 3 и более поздних версиях. Используется для сохранения одного рабочего листа.

Файл Microsoft Excel 2.1 (*.x!s). Может открываться в Excel 2.1 и в более поздних версиях. Используется для сохранения одного рабочего листа.

Книга Microsoft Excel 4 (*.xlw). Может открываться в Excel 4 и более поздних версиях. Это формат используется для сохранения нескольких рабочих листов, но они отличаются от рабочей книги Excel 5.

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

MsgBox ActivetVorkbook. FileFormat

Для указания значения свойства FileFormat используются предопределенные константы. Например, оператор, который приводится ниже, отображает значение True, если активная рабочая книга имеет формат Excel 5:

MsgBox ActiveWorkbook.FileFormat = xlExcel5

В табл. 26.1 представлен список констант и их значений, предназначенных для представления в VBA различных форматов файлов Excel.

Таблица 26.1. Константы и их значения для различных форматов файлов Excel

Версии Excel

Константы

 

Значения

 

 

 

 

Excel 2.1

xlExcel2

16

 

Excel 3

xlExcel3

29

 

Excel 4

xlExcel4Workbook

35

 

Excel 5

xlExcel5

39

 

Excel 95/97

xlExcel9795

43

 

648

 

 

Глава 26. Вопросы совместимости

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