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

Составляя программы для Microsoft Word, можно на опыте получить представление практически обо всех современных принципах программирования: как структурных — основанных на последовательном выполнении всех команд программы, так и «событийных», согласно которым программа реагирует на действия пользователя. В современном программировании используются оба этих принципа: интерфейс программ строится на базе реакции на события, а выполняемые ею функции — на позиции независимой работы. Например, основная часть графического редактора Paint и текстового процессора Word являются приложениями, управляемыми событиями — действиями пользователя, а, скажем, программы дефрагментации или проверки диска функционируют почти независимо от пользователя, задающего им лишь начальные параметры. В VBA можно писать как программы, управляемые событиями (посредством разработки форм), так и действующие последовательно и независимо (с помощью модулей), а кроме того, разумеется, приложения, сочетающие в себе и то, и другое.

Язык VBA может служить не только полноценной средой для разработки приложений, работающих в Microsoft Office, но и как бы «учебным центром» по освоению различных методов и приемов современного программирования. Используя Visual Basic for Applications, можно на опыте изучить работу с Системным реестром, с файловой системой и даже со встроенными в Windows функциями API, а также многое другое, причем значительно легче и быстрее, нежели сразу начать учиться писать программы на Delphi или Visual Basic for Windows. Средство записи макросов, возможность легкого анализа уже написанных программ (фактически любая программа на Visual Basic for Applications распространяется вместе со своим исходным текстом), русский интерфейс редактора (в Office 97), большая и добротная Справочная система, а также масса примеров — все это очень помогает осваивать и самостоятельно изучать язык, даже не обращаясь к дополнительной литературе. Другие языки программирования так освоить практически невозможно. Кроме того, редактор Visual Basic for Applications обладает большими возможностями коррекции ошибок, и потому программа на этом языке вряд ли приведет к ошибке системы и необходимости ее перезагрузки — не надо лишь чрезмерно увлекаться вызовом функций API.

Если вы научитесь программировать на Visual Basic for Applications, поймете принципы разработки алгоритмов и основные приемы программирования, освоите среду написания программ, то сумеете практически без труда начать создавать программы и на Visual Basic for Windows, ведь у него абсолютно такие же синтаксис и среда разработки с контекстной справкой и пошаговыми подсказками. На первый взгляд он отличается от Visual Basic for Applications разве что набором доступных встроенных процедур и функций, а также невозможностью записи макросов. Безусловно, есть и более глубокие различия, но при создании не очень сложных программ они не будут иметь большого значения. Вы сможете легко освоить средство разработки программ Delphi, но логика языка Pascal, лежащего в основе Delphi, несколько отличается от Visual Basic. Однако и среда разработки, и общие принципы программирования в Delphi похожие. Несколько труднее будет освоить Cи++ и его производные из-за сильно отличающегося синтаксиса и высокой сложности этого языка, но это не всегда требуется, — подавляющее большинство проектов программ можно реализовать на Visual Basic или Delphi.

* * *

Среди опытных программистов весьма распространено мнение, что Visual Basic for Applications, да и просто Visual Basic — языки, на которых нельзя написать быстро и хорошо работающие программы. В определенной степени это соответствует действительности: программы на Visual Basic обычно работают несколько медленнее и занимают больше места, чем аналогичные им программы на Си++, кроме того, на Visual Basic весьма проблематично решение некоторых программистских задач и применение отдельных приемов. Но не следует забывать, что изначальное предназначение компьютерных технологий — помощь человеку в обработке и формировании информации, а отнюдь не «служение самим себе», своему дальнейшему развитию. Поэтому основными функциями большинства программ являются получение нужного результата и обработка вводимой информации, например анализ электрокардиограммы или расчет траектории космической ракеты, а уж быстродействие, малый размер, да и удобство интерфейса — всего лишь их хорошие свойства.

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

Отнюдь не всякий человек, превосходно умеющий лечить людей, сможет столь же отменно освоить язык Си++. Да этого и не требуется. Однако сейчас существуют среды программирования, овладеть которыми без проблем может каждый, — те же Visual Basic и Delphi. И поэтому практически любой специалист сумеет использовать в своей работе новейшие достижения информационных технологий, чтобы написать нужную ему программу, разработав ее алгоритм на основе собственного опыта. А для профессиональных программистов осталось не менее почетное и трудное дело — создавать такие среды программирования и новые языки, работать с которыми будет легче и быстрее, чем с существующими.

На вопрос: «Какой язык программирования лучше других?» — стоит, наверное, ответить так: «Тот, на котором ты можешь лучше всего писать программы и реализовывать проекты». Проще всего освоить Visual Basic и Delphi. И потому не стоит так уж стремиться обязательно знать ассемблер и выучить все функции API или жалеть, что не можешь вводить программы сразу в машинных кодах. Целесообразнее все-таки выбрать более простой язык, вроде того же Visual Basic for Applications, чтобы использовать все его возможности для воплощения своих пожеланий в жизнь. Ну, а если кто желает посвятить свою жизнь информационным технологиям или созданию новых языков общения с компьютером, то тому знание Visual Basic никогда не помешает, а остальные знания, как говорится, дело наживное, надо лишь начать учиться и освоить общие принципы.

* * *

И наконец, стоит сказать об использовании программирования на VBA в процессе обучения в школе, институте, да и в самостоятельном образовании. Даже если человек и не намерен посвятить свою жизнь информационным технологиям, все равно умение программировать ему всегда пригодится, так как ПК сейчас применяется почти в любой области человеческой деятельности. Изучив Visual Basic for Applications, можно как бы на маленькой модели испробовать почти все исследовательские приемы современной науки: и наблюдение, и анализ результатов, и эксперимент... Так, можно считать экспериментом в контролируемых условиях вынесение неизвестной команды из записанного макроса в отдельную процедуру для выяснения ее функции. Или, например, изменение параметров команды, дабы узнать, к чему это приведет, — разве не подобным образом действуют исследователи, варьируя начальные условия эксперимента? Следовательно, изучение Visual Basic for Applications может стать «исследованием», помогающим отрабатывать основные приемы современного научного подхода.

Что такое API?

Чтобы облегчить труд своих коллег и обеспечить всем программам для Windows универсальный интерфейс, в Microsoft был создан API (Application Programming Interface — прикладной программный интерфейс). Это набор функций и процедур, наиболее часто используемых программами: построение дерева каталогов, поиск файлов, отображение стандартного окна с кнопками закрытия, минимизации и развертывания на весь экран и т. д. Таким образом, разработчику, создающему программу для Windows, достаточно просто вызвать нужную функцию из библиотек kernel32.dll или user32.dll, содержащих функции и процедуры API, а она уже сама все сделает. Подобных функций и процедур много — порядка 600.

С появлением ОС Windows тяжелый труд программистов по разработке внешнего вида программы и удобных способов ввода и вывода информации существенно облегчился, ведь уже в Windows 3.0 использовались функции API. Теперь программист, если он, например, желал организовать окно ввода текста или полосу прокрутки, должен был всего лишь написать вызов этой функции с нужными ему параметрами так же, как и любой другой функции того языка, на котором он писал свою программу. Поэтому появление API совершило революционный прорыв в технологии программирования, позволяя делать программы с привычным удобным интерфейсом гораздо быстрее, не заботясь о всяких рутинных «деталях» вроде программирования стандартных объектов интерфейса для ввода и вывода информации.

В VBA многие функции и процедуры API вызываются при выполнении программы интерпретатором этого языка, так что использовать их, скажем, для отображения окон ввода и вывода текста нет необходимости. Однако иногда возникает потребность в некоторых действиях, либо не имеющих аналогов во встроенных функциях VBA, либо работающих нерационально или слишком медленно. Так, окно выбора папки с изображением дерева каталогов или программа поиска файлов (аналог на функциях VBA — объект Application.FileSearch) работает слишком медленно при большом числе файлов. Для подобных случаев в VBA предусмотрена возможность вызова функций API.

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

В подавляющем большинстве случаев при программировании для Office можно обойтись без API. Однако иногда лишь вызов API-функции приводит к получению нужного результата, в частности позволяет узнать, какая клавиша в определенный момент нажата на клавиатуре.

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

Declare Function GetAsyncKeyState
 Lib «user32.dll» (ByVal kState As Long)
 As Integer
Sub Program
GetAsyncKeyState (vbKeyShift Or vbKeyControl)
If GetAsyncKeyState(vbKeyShift) Then
Call macro1: Exit Sub
ElseIf GetAsyncKeyState(vbKeyControl) Then
Call macro2: Exit Sub
End If
Call macro3
End Sub
Данные окна вызываются функциями API

Первая строчка — это как бы «резервирование» функции API для программы на VBA. Видно, что вызывается функция GetAsyncKeyState из библиотеки user32.dll (файла, содержащего программы, предназначенные только для использования другими программами). В эту функцию передается номер клавиши, а возвращает она целое число, равное 0, если клавиша с соответствующим номером не нажата, или равное 32767 либо 1, если она нажата. Любую функцию или процедуру, вызываемую из библиотек, не относящихся к VBA, следует резервировать с помощью команды Declare.

Фраза vbKeyShift в команде — заменитель кода вызова клавиши (его значение — 16), а фраза vbKeyControl, как нетрудно понять, — кода клавиши . Структура инструкций If...Then, думается, ясна, а если нет — посмотрите в справочной системе VBA. Команда Call перед именем макроса означает его запуск.

В Internet есть русские сайты, посвященные API (например, http://NikolayAM.narod.ru). Посетите их, чтобы побольше узнать об этом наборе функций.

Антон Александрович Орлов, antorlov@inbox.ru, http://antorlov.chat.ru

Продолжение в следующем номере.