Visual2000 · Архив статей А.Колесова & О.Павловой

Советы тем, кто программирует на VB & VBA

Андрей Колесов, Ольга Павлова

© Андрей Колесов, Ольга Павлова, 2000
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" N 6/2000, компакт-диск.


Новость: создан Web-архив повторно используемого кода

В составе MS Office 2000 версии Developer была впервые включена полезная утилита VBA Code Librarian, обеспечивающая работу с иерархическими библиотеками исходных кодов программ. В составе этого продукта поставляется довольно большая база данных CodeLib.mdb, которую разработчик может дополнять собственными фрагментами программного кода. Отметим, что содержимое этой базы данных представляет интерес также для VB-программистов, а сама утилита может применяться для поддержки наборов кода пользователями других инструментальных средств.

С конца марта нынешнего года программисты получили возможность доступа к новому Web-сервису Code Librarian Update, с помощью которого они могут пополнять свой локальный архив повторно используемого кода.

Первое ежемесячное обновление, содержащее более 100 функций, было подготовлено Visio, подразделением Microsoft (ранее независимая компания Visio, известный разработчик ПО для проектирования и графического изображения данных, была приобретена корпорацией Microsoft в сентябре прошлого года). Этот набор программ можно загрузить с Web-страницы msdn.microsoft.com/officedev/downloads/codelibrarian.asp

Выпуски Code Librarian Update будут выходить ежемесячно. Они будут содержать код, предоставленный различными сторонними компаниями (WRQ, Lawson, Elsinore Technologies и другими), которые разрабатывают продукты с поддержкой VBA. В другие продукты Microsoft, например в Microsoft MapPoint 2001 (новый продукт обработки картографических данных), также будет включен код, повышающий эффективность труда разработчиков.

Российское отделение Microsoft также довольно активно пополняет свои информационные ресурсы по VB и Office/VBA. Загляните на Web-серверы по адресам: www.microsoft.ru/msdn/library и www.microsoft.ru/offext/officedev.

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

Нам пишут, мы отвечаем

Нам пришло такое письмо:

Мы написали ответ, который считаем нужным опубликовать:

Уважаемый Альберт!

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

Мы стараемся "минимизировать" ущерб для наших читателей, сообщая о принципиальных ошибках на нашем сервере ( (www.basic.visual2000.ru/develop/vb/) и на страницах журнала. Но, честно говоря, больше всего беспокоит довольно вялая реакция читателей на эти ошибки. В результате у авторов появляются сомнения: а читает ли вообще кто-нибудь твои статьи? Использует ли кто-либо сведения, приведенные в них? Так что наша благодарность за Ваше замечание — вполне искренняя.

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

  1. Давайте уточним — редакция тут вообще ни при чем. Редакция непосредственно не занимается изучением тонкостей программирования на VB, во-вторых, она доверяет "опытным, авторитетным экспертам". Так что все упреки адресуйте не редакции вообще, а конкретно автору — Андрею Колесову, то есть мне.

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

    А кто вообще может похвастаться, что знает VB на все 100%? И если ответ — "никто", то является ли это недостатком пользователей или самого VB? Мне кажется, что средний пользователь представляет себе возможности системы процентов на 10, не более. И поэтому порой решает свои задачи довольно сложным образом, не подозревая, что оптимальное решение лежит рядом. Собственно, само решение освещать совершенно безграничную тему "Советов для тех..."; определяется именно этим положением вещей.

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

    Это общая проблема современного мира информации: почти у любой проблемы есть готовое решение, но часто легче решить ее "с нуля", чем найти готовый ответ. Вопрос к Вам: откуда Вы узнали, что функцию можно применять таким образом? Представьте себе, что я — начинающий программист. Как я могу узнать о "чудодейственной функции Format"? Я просмотрел справочную информацию по всем версиям VB, начиная с 3.0 и кончая 6.0. И только в одной версии я нашел достаточно подробное описание данной функции и возможностей применения второго аргумента для числа.

    Думаю, что Вы отгадаете с первого раза, о какой версии идет речь. Конечно же, во VB3! Вопрос: откуда о возможностях функции Format сможет узнать пользователь версии 6.0?

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

  3. Давайте вернемся к упомянутому Совету 244. На самом деле приведенный Вами пример — a$ = Format (12345, "0000000") — можно реализовать еще проще: a$="0012345". Ведь в нашем совете речь шла о создании функции, которая преобразовывала произвольное число SourceNumber в строку с заданным числом цифр Lend. С использованием функции Format это будет выглядеть так:

    a$ = Format(SourceNumber, String$(Lend, "0"))
    

    В нашем варианте это выглядит немного более замысловато:

    If 10^Lend > SourceNumber Then
      a$ = Right$(10^Lend + SourceNumber, Lend)
    Else
      a$ = Str$(SourceNumber)
    End If
    

    Основная сложность нашей конструкции — проверка на допустимость параметров функции. Но обратите внимание на преимущество последнего варианта: это может сделать каждый программист, на любой версии Basic. (Даже на QBasic — поверьте, что пользователей этой системы еще довольно много.)

    Нам кажется, что демонстрация того, что многие функции могут быть решены неким тривиальным набором операций, очень важна, так как она стимулирует разработчика к поиску собственного решения (чтобы не ждать, когда Microsoft решит осчастливить человечество своим встроенным оператором).

  4. И все же основная цель нашей рубрики — поделиться собственным опытом, своими находками. Действительно, порой имеет место "изобретение велосипеда". Но чем больше людей (разработчиков) будут участвовать в этом обсуждении, тем меньше будет таких "велосипедов".

Короче говоря: спасибо за письмо. Оставайтесь с нами.

Присылайте свои советы, замечания, вопросы.

Андрей Колесов,
один из ведущих рубрики "Советы для тех..."

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

Глобальный cовет: работайте с лицензионными копиями программ

Наш многолетний опыт общения с пользователями VB позволяет нам сделать уверенный вывод: пиратские копии программ, продаваемые в Митино, на Горбушке и пр., отличаются от оригиналов. Мы не являемся службой поддержки Microsoft (не несем каких-то обязательств перед корпорацией), но мы придерживаемся такого подхода при анализе проблем, с которыми к нам обращаются читатели. Если при воспроизведении некоего примера мы получаем различные результаты (у нас работает, а у спрашивающего — нет), то сразу задаем вопрос: какая копия VB у вас стоит? Дело в том, что проблемы довольно часто возникают именно из-за применения программ неизвестного происхождения.

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

В начале весны к нам в офис приехал за консультацией человек, которому мы помогали в разработке его программы лет шесть назад, во времена Basic/DOS. У него не работала программа, которую он скачал из Интернета, а она была ему очень интересна.

Проблема решалась тривиально — ошибка была в "левой" копии VB 6, установленной на ноутбуке клиента (не работало подключение OCX-компонентов). Но самое поразительное было в другом — у него стояла программа с полностью русифицированным интерфейсом (Microsoft выпускает локализованные версии VB только с русской справкой). Но наш пользователь при этом был полностью уверен, что его инструмент — точная копия оригинала.

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

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