Примеры заданий для программирования на VBA

Все програмы делаются в среде Word!

Человеку, только приступающему к использованию макросов, очень трудно придумать, что бы такого сделать. Причина кроется в том, что здесь не бывает золотой середины: рядовой пользователь никогда не пытается изучить язык програм­мирования, а обстоятельства просто заставляют учиться... Чтобы думалось легче, ниже приведено «несколько» вариантов применения. Они отличаются по сложности на порядки!

    (Список пополняется в том числе и стара(страда)ниями учащихся. Значительную часть задач в принципе нельзя сделать вручную.)
  1. Таблицы
    • Поиск в колонке ячейки с самым длинным содержимым (строкой или числом).
    • Сравнение двух таблиц в двух документах. Возможные варианты развития: добавление или изменение данных из второй в первую.
    • Поиск дублирующихся строк в таблице (с пометкой или удалением, полные дубли или частичные) [задача актуальна и для Excel].
    • Заполнение таблицы значениями, изменяющимися с некой закономерностью (нумерация — как простейший вариант).
    • Создание таблицы и заполнение ее полным набором возможных данных по определенным правилам. Пример: все возможные сочетания оценок (5, 4, 3, 2) у ученика на пяти экзаменах. [Цель — решение задач методом подбора, создание заготовки для задачи.]
    • Поворот таблицы на 90° (очень сложно! и только по согласованию).
    • Одинаковое оформление колонок таблиц.
    • Добавление строк со значениями в случае прерывания закономерности (нумерация, даты).
        Частные задания.
      1. Превращение строк:
        	s[0]="Иванов Иван";bd[0]=11;bm[0]=5;
        	s[1]="Лотлин Петр";bd[1]=21;bm[1]=11;
        	..., где 0 и 1 - номера строк.
        
        в таблицу
        s[0]="Иванов Иван";bd[0]=11;bm[0]=5;
        s[1]="Лотлин Петр";bd[1]=21;bm[1]=11;
        ...
      2. Превращение стандартной таблицы со стандартными ошибками (абзац, точки в дате и отчество могут отсутствовать; • — пробел)
        1.Иванов Иван¶
        Иванович
        11•.02.•2012Бла-блаБла-блаБла-бла
        2.Лотлин Петр•¶
        Петрович
        13.12.2012Бла-блаБла-блаБла-бла
        ... в таблицу
        Иванов Иван1122012
        Лотлин Петр13122012
        ... (или другую, но по аналогии)
  2. Понижение уровня стилей заголовков на 1, начиная с задаваемого пользователем.
  3. Форматирование множества документов (параметры страницы, разбивка на колонки, колонтитулы и т.п.).
  4. Обработка текста, полученного из OCR-программы.
  5. Определение правильности имени файла (если есть правила наименования).
  6. Поиск дублирующихся абзацев в тексте (с пометкой или удалением).
  7. Печать
    • Форматирование документа и направление его на печать (может быть в файл с определенным именем).
    • Печать четных/нечетных страниц.
    • Поочередная печать страниц документа. Например, для получения двухсторонних копий.
  8. Расчет объема документов в символах (усложнение: площади картинок и площади таблиц) [реальная прикладная задача для подсчета объема книг и оплаты труда (авторский гонорар, перевод, набор, верстка, корректура, редактирование)].
  9. Транслитерация текстов в любую сторону (любым способом).
    • Замена русский на латиницу и обратно, когда во время набора был включен не тот язык.
    • Транслитерация туда и обратно, разные схемы, обучение программы.
    • Раскраска русских или латинских букв, цифр...
  10. Замена десятичного разделителя (точка↔запятая) (выбор разделителя, подтверждение каждого значения) [данный пример обычно разбирается на занятиях!].
  11. Переоформление литературных ссылок, набранных в скобках, на верхний индекс (из разных источников).
  12. Одинаковое оформление параметров страницы, раздела.
  13. Определение кода символа (ASCII и Unicode).
  14. Проверка форматирования списка литературных ссылок.
  15. Выбор из списков, формируемых из текстовых файлов "на лету" или ситуативно.
  16. Вставка неразрывных пробелов после цифр (перед размерностью).
  17. Вычисление разницы между датами в днях.
  18. Прибавление (вычитание) к дате некоего числа дней с получением будущей (прошлой) даты.
  19. "Отрезание" от абзаца начала/конца строки. Рубеж отрезания определяется n-м спецсимволом (неизвестным).
  20. Разбор строки в массив на слова или выражения с их подсчетом.
  21. Написание анаграмм и нахождение среди них обычных слов [принципиально программа сделана, но тяп-ляп].
  22. Присвоение заголовку в Word полиграфически правильных отступов для примитивных случаев.
  23. Ошибки набора, перечень вариантов (см. также здесь):
    1. Два или более пробела подряд.
    2. Пробел перед знаком препинания и в скобках/кавычках.
    3. Пробел в начале и пробел/табулятор конце абзаца.
    4. Принудительное начало строки без пробела перед ним (когда так можно делать?).
    5. Пробелы после окончания изменения начертания с сохранением этого начертания.
    6. Неиспользование фиксированных пробелов (размерности...) и неразрывных дефисов (из-за...).
    7. Несколько пустых абзацев подряд.
    8. Знаки умножения и деления, сделанные разными способами.
    9. Символ градуса (°), сделанный неправильно [существует более десятка способов "неправильного" ввода].
    10. Разный интерлиньяж.
    11. Поиск заголовков не размеченных стилями.
    12. Точка после заголовков. [Пока с задачей никто не справился.]
  24. Конвертация текста в HTML (или любой другой текстовый формат).
  25. Excel (только для доказавших состоятельность в Word).
    • Оформление расписания (индивидуальное разрешение, скорее всего, только для продвинутых учащихся).
    • Разбор логического выражения на формулу + построение таблицы истинности (расчет однобуквенных переменных) [Excel].
    • Поиск дублирующихся строк в таблице (с пометкой или удалением, полные дубли или частичные).
  26. Вычислительные задачи.
    • Разложение числа на простые множители со стандартным оформлением (12 = 22*3 или 12 = 2^2*3).

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

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

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

Требования к макросу

  1. Выполняемая им работа должна быть разумной.
  2. Обязано быть пояснение в письме того, что макрос делает и зачем это надо. А то приходит непонятная билиберда, и разобраться с ней (в разумные сроки) невозможно. Комментарии внутри программы также приветствуются.
  3. Наличие диалога обязательно!
  4. Недопустима простая запись макрорекордером.
  5. Лишний код макрорекордера должен быть удалён.
  6. Обязательным является оформление циклов и условных операторов сдвигами при помощи табуляторов. Наказанием за неоформленность будет вычет 20% баллов.
  7. Если вы взяли мои заготовки с сайта, то отделите их несколькими пустыми строками от ВАШЕГО кода. Мои диалоги не считаются. Они — для реальных задач без изобретения велосипеда.

Copyright © 1993–2020 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.