Мир VBA гораздо шире, чем это кажется
Андрей Колесов

Рецензия на книгу:
В.А.Биллиг, М.И.Дехтярь, "VBA и Office 97. Офисное программирование" — М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd." 1998. - 720 с.: ил., компакт-диск, тираж 5 тысяч экз. ISBN 5-7502-0075-2

© 1998, А.Колесов
Исходный, авторский вариант статьи.
Рецензия в сокращенном виде опубликована в еженедельнике PC Week/RE (№ 20/98, с.58), PC Week/RE Online


Хотелось бы сказать сразу...
Как объять необъятное
Пора избавляться от комплексов
VB как язык программирования
Завершая данный обзор книги...


Хотелось бы сказать сразу...

Хотелось бы сказать сразу — это очень полезная книга, можно даже уверенно предположить, что придется издавать дополнительный тираж. Особенно приятно, что такое издание в весьма представительном "американском" объеме, с компакт-диском, содержащим не только примеры из книги, но и дополнительные свободно распространяемые программы, подготовили отечественные авторы. Это уже второе издание "Русской Редакции" на тему программирования в Office 97 (см. о первой), но если пользователь спросит, какую книгу купить, то следует однозначно ответить — "обе". Причем человеку, впервые столкнувшемуся с программированием на VBA, лучше начать чтение с этой, второй.

Книга состоит из трех частей: объекты Office 97 и VBA, Ядро VBA, Офисное программирование. В первой части рассказывается об основных объектах Word, Excel, Access, PowerPoint, Assistant и других. Этот раздел в какой-то степени перекликается с содержимым первой книги, хотя материал излагается несколько иначе. Вторая часть знакомит с основами и деталями программирования на VBA — созданием проектов и организацией их интерфейсов, разработкой на VBA собственных классов, динамических типов данных и др. Третья часть посвящена практическим примерам создания различных приложений из жизни офиса: разработка электронных бланков, их взаимодействие с базами данных Excel и Access с помощью DAO, финансовые вычисления, прогнозирование спроса, взаимодействие приложений при решении офисных задач.

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

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

В начало статьи

Как объять необъятное

Суть проблемы заключается в том, что современные инструменты программирования (и VBA не является исключением) являются чрезвычайно многофункциональными системами и сделать некое единое, всеобъемлющее их описание представляется задачей просто нееальной. В США этот вопрос решается наличием на рынке огромного числа книг (например, по VB постоянно имеется в продаже несколько десятков), появляющихся практически одновременно с выходом самого продукта, не говоря уже о массовом потоке статей в периодических изданиях.

У нас такой литературы существенно меньше и именно поэтому с особой остротой стоит вопрос о четком позиционировании книги, которое дало бы читателям ясное представление о том, какие вопросы остались за пределами внимания авторов этого издания. Говоря о VBA, хотелось бы особенно подчеркнуть, что здесь градация книг по принципу "для начинающих" или "для профессионалов" не очень подходит. Дело в том, что сама технология разработки на основе компонентов Office достаточно нова, а с языком Visual Basic многие профессионалы не были раньше знакомы. В то же время и новички в программировании при работе с этим инструментом должны сразу брать быка за рога — объекты, методы, свойства, элементы управления ActiveX и пр. В данном же случае представляемая книга будет полезна и профессиональными разработчикам, и системным администраторам, и опытным пользователям, желающим автоматизировать операции в Office.

Однако как раз с точки зрения общего позиционирования VBA в этой книге заметен ряд методических упущений, которые не позволяют читателям получить законченную целостную картину комплекса "VB-VBA-Office".

Сконцентрировавшись вслед за авторами на вопросе "офисного программирования", от внимания читателей может ускользнуть тот важный факт, что VBA является автономным компонентом, входящим в состав Office 97 (см. PC Week/RE, N 25/97). То есть существуют VBA и технология его применения на основе некоторой абстрактной компонентной модели объектов, и имеются приложения Office 97 как конкретный набор (возможно, наиболее полный и достойный для подражания) иерархии объектов, на примере применения которого и построена книга. При этом очень важно подчеркнуть, что эти объекты доступны всем инструментальным средствам, поддерживающим модель COM/ActiveX (VB, VC++, Delphi и пр.).

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

В этом плане было бы полезно четко акцентировать внимание читателей на том факте, что VBA является лишь специфической редакцией семейства VB. Более того, следует подчеркнуть, что VBA — это вообще не программный продукт, а некоторое обобщенное название вариантов VB, используемых как средство внутреннего программирования отдельных приложений (хотя ему, разумеется, доступны и внешние объекты), в котором объекты данной программы определены как внутренние. Именно поэтому в американской литературе вообще избегают использования термина VBA и предпочитают название "VB для Office 97". Более того, даже в Office 97 пользователи имеет дело фактически с несколькими вариантами VBA для каждого его приложения.

Такое позиционирование позволило бы более четко обозначить для читателей варианты их дальнейшего развития как разработчиков, например, кратко сказав о том, какие новые возможности они могут получить при достаточно простом переходе из VBA/Office 97 в среду VB.

Такое пространственно-временное позиционирование VBA имеет очень важное практическое значение. Это хотелось бы проиллюстрировать на таком примере из книги (с. 219): "Познакомившись с динамическими массивами в VBA, мы поразились наличию в Бейсике столь мощного средства, отсутствующего, например, в Си++ и Паскале.... динамические массивы появились в VC++ и Delphi. Теперь они есть и в VBA, но удивительно то, что документация не отражает всех их возможностей."

На самом же деле, динамические массивы (как и многое другое) появились в Бейсике еще в середине 80-х годов. И документация по VB слабо освещает эти возможности совсем не случайно. При всей своей новизне VB во многом основывается на фундаменте его DOS-овского предшественника — QuickBasic. Документация и новые книги по VB посвящены главным образом великому множеству новшеств системы. При этом многие американские книги часто имеют прямые ссылки по многим вопросам к литературе "тех времен".

В начало статьи

Пора избавляться от комплексов

Не очень приятное впечатление оставляет довольно регулярное упоминание авторами понятия "больших языков типа Си или Паскаль". Хотя часто оно используется для иллюстрации того, что VBA имеет их функциональные возможности, но у читателя может невольно появиться некоторое представление о некоторой неполноценности VBA (а может быть, и собственной). Такой подход тем более неверен, что часто в качестве новшеств VBA указываются средства, давно существовавшие в VB. Впрочем, это весьма характерная реакция профессионалов, имеющих опыть работы с "большими языками", но лишь относительно недавно обнаруживших, что VB — это совсем не тот примитивный язык, который прекратил свое существование в конце 80-х годов.

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

При этом важно подчеркнуть, что функциональность VBA определяется не характеристиками языка Бейсик, а позиционированием системы с точки зрения ее создателя — Microsoft. В этом плане сравнение VBA с абстрактными языками (Си, Паскаль) вообще не совсем корректно — правильнее говорить о таких же законченных инструментах, например VC++ и Delphi.

В начало статьи

VB как язык программирования

Из знакомства с книгой создается впечатление, что будучи сильными методистами и знатоками "больших языков", авторы не очень четко расставили акценты при описании VB как языка программирования. Порой уделяется слишком много внимания второстепенным вопросам, в том числе явным рудиментам языка (например, при оформлении комментариев), но при этом не упомянут ряд интересных для программиста вопросов. Так, представляется явным опущением, что авторы хотя бы очень кратно не обозначили возможности использования Win32 API.

При этом читателя может несколько запутать излишняя научность изложения, которая сочетается с неточностями. Например, первая фраза главы 10 "VBA — операторный язык", может только сильно озадачить читателя: к чему это? А акцент на том, что "некоторые операторы (If Then Else и др.) могут стоять лишь на первом месте в строке" является не очень информативным, даже если бы это утвреждение было правильным.

Учитывая то, что авторы являются опытными преподавателям, следовало бы особое внимание уделить демонстрации профессионального стиля программирования. В последнее время в американской учебной литературе превалирует написание довольно примитивных линейных фрагментов повторяющегося кода вместо более компактного и наглядного использования циклов, выделения общих фрагментов в виде подпрограмм и пр. К сожалению, эта тенденция заметна и в примерах рецензируемой книги. К тому же в ней не всегда четко выдержано внешнее оформление листингов примеров (выделение структуры программы, использование названий переменных). Не менее странным выглядит и высказывание авторов о том, что "комментарии [в тексте программы] ... необходимы как признак "хорошего тона".

В начало статьи

Завершая данный обзор книги...

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

В начало статьи