Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка КП-СППР2011.doc
Скачиваний:
48
Добавлен:
16.02.2016
Размер:
500.22 Кб
Скачать

2.2. Основные принципы разработки приложений на vba

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

Тема разработки программного обеспечения достаточно широка. Ей посвящены целые курсы в университетском образовании. Все разработчики, работающие в крупных (и не очень) компаниях, должны знать о главных проблемах, которые подстерегают их. Существуют негласные правила, которым стоит следовать в процессе разработки. Обычно над любым приложением работает группа разработчиков. Один проект может требовать внимания нескольких программистов, его часто приходится изменять другим разработчикам для удовлетворения новых требований. Таким образом, создаваемые с вашим участием программы должны быть понятны другим программистам. Кроме того, создавая приложения, всегда следует помнить о возможности (и необходимости) их улучшения. Если от приложения потребуется новая функциональность, то другой программист не должен начинать ее разработку с самого начала. Таким образом, создавать приложения необходимо так, чтобы код был прост для понимания и последующей поддержки.

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

  1. Четко определите, какие функции должно выполнять приложение. Возможно, это самая важная рекомендация. Особенно она важна при создании приложений для других людей, но о ней следует помнить даже при создании приложений для себя. Разработка приложения может длиться достаточно долго, и ни кто не будет тратить время на дополнительные разъяснения. Заранее примите решение о возможностях приложения и четко спланируйте, как они будут реализованы. Например, каким образом приложение получает входные данные — с помощью диалоговых окон, на рабочем листе, в виде текстовых файлов или файлов баз данных? Какую информацию оно будет предоставлять пользователю? Будет информация выводиться в виде таблиц или диаграмм? Программирование всегда требует умственных затрат, но если возможности приложения до конца не известны, то разработка становится просто невозможной.

  2. Четко объясните пользователю, какие задачи выполняет приложение и как оно работает. Нельзя предполагать, что пользователь сам разберется в том, какие операции выполняет приложение и как оно работает. В конце концов, пользователь не работал над этим приложением в течение нескольких дней (или недель). Обязательно к приложению следует составить руководство по использованию. В реальных приложениях для этого обычно применяется бумажная документация и/или интерактивные справочные системы. Так как приложения, рассмотренные в этой книге, имеют ограниченную область применения, то их описание приведено на листах Описание, которые отображаются на экране сразу после запуска приложения. Если в дальнейшем пользователю потребуются дополнительные объяснения, то для предоставления необходимых сведений используйте подписи в диалоговых окнах. Пользователь может не подозревать, какие операции выполняются для получения конечного результата, но интерфейс приложения ему должен быть предельно понятным - объяснения и описание выполняемых им действий должны трактоваться однозначно.

3. Обеспечьте приложение детальными комментариями. Лучшим методом документирования программ является добавление к ним понятных комментариев. Желание быстро завершить написание кода приложения свойственно большинству разработчиков. При этом ввод комментариев откладывается на последнюю минуту (если вообще на комментарии тратится драгоценное рабочее время). Комментарии помогают сосредоточиться на анализе правильности выполняемых действий. Кроме того, комментарии оказываются незаменимыми, если код планируется повторно использовать через неделю или через месяц. В процессе написания, когда все решения будут казаться простыми и понятными, но через месяц они даже для вас станут загадкой. Если код вызывает вопросы даже у его создателя, то только представьте, какие проблемы возникнут у другого программиста. Поэтому при написании программной конструкции, которая трудна для понимания посторонним разработчикам, обязательно добавьте в ее код комментарии. Конечно, комментариями не нужно злоупотреблять.

4. Используйте осмысленные имена переменных, процедур и других элементов приложения. К сожалению, существует довольно много программ, в которых повсеместно применяются переменные i, j, k, n и nn. Такой код совершенно не поддается изучению посторонним человеком. К счастью, программисты все чаще понимают важность использования осмысленных имен переменных и других элементов программы. Такие имена, как UnitCost и TotalProf it, I делают код самодокументированным. Достаточно прочитать названия различных элементов, чтобы понять, какие задачи выполняет каждый фрагмент кода. Среди профессиональных программистов существует негласные соглашения об использовании префиксов, обозначающих тип переменной. Например, в имени strFirstName префикс str используется для индикации строкового типа данных, а префикс int в имени intCount указывает на то, что переменная имеет целочисленный тип. Для начинающих программистов эти соглашения могут показаться сложными, поэтому в данной книге мы не будем их использовать. Но не удивляйтесь, если такое соглашение об именовании объектов будет обязательным требованием к вашим проектам на новом рабочем месте. Это излюбленный метод повышения удобочитаемости программ.

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

  1. Используйте модульный подход при написании нескольких небольших процедур вместо одной большой процедуры. Начинающие программисты склонны к созданию одной большой процедуры, которая выполняет все необходимые действия. Это плохая привычка как минимум по двум причинам. Во-первых, длинную процедуру сложно изучать, даже если она хорошо закомментирована. Намного проще читать короткие процедуры, особенно, если они имеют четко определенные цели. Во-вторых, модульные программы намного проще исправлять, улучшать и выполнять их отладку. Предположим, что вами создано приложение, генерирующее таблицу чувствительности определенного типа. Позднее принимается решение о добавлении в него функции построения диаграммы. Если приложение состоит из основной процедуры, которая вызывает несколько других процедур, выполняющих отдельные действия, то все, что вам необходимо будет сделать, — это добавить процедуру CreateChart, которая предназначена исключительно для построения диаграмм. Эту процедуру можно легко вызвать из основной процедуры. Если программа написана правильно, то остальные компоненты приложения по-прежнему будут правильно выполнять возложенные на них задачи.

  1. Используйте код, ранее разработанный вами или другими программистами. Концепция совместно используемого кода становится все более популярной среди программистов. Ее суть заключается в возможности повторного использования уже имеющихся наработок в новых проектах. Практически во всех приложениях приходится использовать элементы, которые уже разрабатывались в других приложениях. Иногда целые процедуры можно скопировать из одной; программы в другую. Если это невозможно, то, вероятнее всего, следует повторно использовать отдельные строки кода. Что касается заимствования кода, написанного другими разработчиками, то в данном случае следует быть весьма осторожным, поскольку с юридической/этической точки зрения это весьма "скользкий" вопрос. В любом случае, не стоит заимствовать целые программы или большие фрагменты кода, тем более не следует выдавать их за собственные наработки. Многие программисты предоставляют свой код другим, не указывая дополнительных условий его использования в сторонних проектах. В таком случае можно спокойно заимствовать (и адаптировать) чужой код, однако добавьте в него комментарии с упоминанием автора.

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

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

  • Лист с данными в той же (или в другой) книге, что и приложение.

  • Текстовый файл (.txt).

  • Одна или несколько таблиц базы данных Access (или других типов баз данных).

  • Web-страница.

Получение необходимых приложению данных — довольно важный вопрос, поэтому некоторые приложения, представленные в следующих главах, рассматриваются исключительно с точки зрения демонстрации различных методов решения этой проблемы. Конечно, стоит помнить, что в реальных приложениях расположение данных изменять нельзя. Например, компания может хранить исходные сведения в базе данных Access, поэтому при создании приложения вам придется "научить" программу загружать эти данные в Excel.

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

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

Намного проще создать шаблоны листов на этапе разработки средствами физического интерфейса Excel. Конечно, полностью заполнить шаблоны данными на этапе разработки не получится, так как часть данных листа зависят от используемых входных параметров приложения, предоставляемых уже после его запуска. Но использовать код VBA для генерации недостающих элементов шаблона намного проще, чем создавать листы в VBА-коде "с нуля'.

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

  • Получение входных параметров.

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

  • Вывод полученного результата.

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

При управлении диаграммами также следует учитывать вопрос их расположения — на том же рабочей листе, что и исходные данные, или на отдельном листе диаграммы. Выбор основывается исключительно на личных предпочтениях каждого. Многие разработчики (включая меня) предпочитают выводить диаграммы на отдельных листах (вместе с навигационными кнопками, которые рассматриваются далее), что позволяет навести порядок в структурных элементах проекта. С этой точкой зрения можно не согласиться. Если вами принято решение о расположении диаграммы на одном рабочем листе с данными, то также определитесь, будет ли диаграмма "перекрывать" исходные данные. Другими словами, необходимо выбрать правильное расположение (и размер) диаграммы на рабочем листе с данными. Зачастую это весьма сложно — в конце концов, вы придете к мысли, что проще разместить диаграмму на отдельном листе!

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

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

Sub ViewReportSheet()

Worksheets("Отчет").Activate

Range("Al").Select

End Sub

• Скрывайте листы, если они не понадобятся пользователю. Например, в приложении может использоваться лист Отчет, который содержит результаты, полученные при предыдущем запуске приложения (если приложение запускалось ранее). Пользователь не должен получать доступ к этому листу, пока не будут получены новые результаты. Для реализации такой идеи можно воспользоваться следующим кодом, который при открытии книги скрывает все листы, кроме листа Описание. После получения новых результатов свойство Visible листа Отчет устанавливается в значениеTrue.

Private Sub Workbook_Open()

Dim sht As Object

Worksheets("Описание").Activate

Range("F4").Select

For Each sht In ActiveWorkbook.Sheets

If sht.Name о "Описание" Then sht.Visible = False

Next

End Sub

• Воспользуйтесь командой Сервис - Параметры и перейдите на вкладку Вид для изменения принятых по умолчанию параметров представления листа. Например, можно отключить направляющие, полосы прокрутки и заголовки строк/столбцов. Даже можно скрыть вкладки листов. Некоторые программисты пользуются этой возможностью, чтобы сделать работу в Excel менее заметной. Поэкспериментируйте с этими параметрами.