Шаг 235.
VBA в MSExcel. Оформление командировочных удостоверений. Вставка содержимого выбранной строки в конец списка

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

    Вернемся на рабочий лист ЖурналРегистрацииКУ.

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

    Оставим за пользователем только выбор копируемой строки, а все остальное поручите выполнять Excel в автоматическом режиме при нажатии на созданную кнопку Копирование и вставка выделенной строки (рисунок 1), которой назначьте следующий записываемый макрос с именем ВставкаСтроки.


Рис.1. Левая область журнала регистрации командировочных удостоверений на рабочем листе ЖурналРегистрацииКУ

    Для записи макроса выполните следующую последовательность действий:

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

Исследование кода VBA при записи макроса ВставкаСтроки

    После записи макроса не откладывайте на потом исследование записанного кода VBA, а открыв Редактор Visual Basic просмотрите записанные действия и при необходимости отредактируйте код VBA. Механически сгенерированный код показан на рисунке 2.


Рис.2. Механически сгенерированный код VBA

    Между ключевыми словами начала и окончания выполнения подпрограммы находится восемь строк кода. По очереди рассмотрим каждую строку. Первая строка:

  Selection.Copy
в которой:

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

    Следующая строка:

  Rows("14:14").Select
в которой Rows - это объект (строки), в скобках указано какие именно строки, а Select это метод (выделить). Согласно заданным условиям разрабатываемого приложения это должна быть 200-я строка, поэтому замените значение 14 на значение 200.

    Третья строка:

  ActiveSheet.Paste
означает что операция вставки (Paste) выполняется на активном рабочем листе (ActiveSheet). В данном случае ActiveSheet - свойство объекта Workbook и означает, что у этого объекта есть такой текущий объект, как активный рабочий лист.

    Обратите внимание на три рассмотренные строки в совокупности. Они предназначены для выполнения одной операции - копирования выделенной строки с целью вставки ее содержимого в другую строку. Но ту же операцию может выполнить всего одна строка, в которой в качестве аргумента метода Copy указано место вставки содержимого скопированного диапазона:

  Selection.Copy (Rows("200:200"))
и создается она всего четырьмя действиями при редактировании сгенерированного механически кода:

    При подобном редактировании кода макроса нет необходимости даже соблюдать интервал (пробелы) между операторами Copy и Rows. После окончания редактирования, установка интервалов между операторами при отсутствии ошибок выполняется Редактором Microsoft Visual Basic автоматически.

    Следующая строка:

  Rows("4:14").Select
выделяет диапазон строк для сортировки, в которой значение 14 замените на 200.

    Строку:

  Range("A14").Activate
Excel генерирует автоматически. Она указывает на то, что прежде, чем выполнять сортировку, необходимо было указать, по какой области будет происходить сортировка. Удаление этой строки никак не повлияет на выполнение макроса.

    Следующую строку Excel генерирует также самостоятельно:

  Application.CutCopyMode = False
и она носит в данном макросе больше информационный характер. Строка указывает что метод копирования (вырезания) CutCopyMode закончил свое действие и буфер обмена не содержит никаких данных, потому что ему присвоено значение False (Ложь). Удаление этой строки не повлечет никаких изменений в выполнении записанного макроса.

    Следующая выполняемая операция (сортировка) состоит из двух строк:

  Selection.Sort Key1:=Range("A14"), Order1:=xlAscending, Header:=xlGuess,  _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

    В одной строке Редактора может находиться до 1024 символов. Но если все 1024 символа разместить в одной строке, то это затруднит ее чтение. Для переноса кода строки в следующую, используется символ подчеркивания (_), перед которым обязательно должен находиться пробел.

    Excel позволяет выполнять операцию сортировки с использованием от одного до трех ключей и для сортировки диапазона с помощью VBA используется метод Sort. В этой команде, выполняющей операцию сортировки, находятся следующие операторы:

    Как видно из записанного кода для присвоения методам значений применяются знаки := (двоеточие и равно).

    Полученный в результате редактирования код макроса показан на рисунке 3, а остальной текст кода можно удалить.


Рис.3. Отредактированный код VBA подпрограммы вставки в конец списка содержимого выделенной строки

    За счет минимизации текста подпрограммы было увеличено его быстродействие. Ведь для Excel нужно было прочитать ранее 8 строк, по каждой из которых он должен был предпринять какие-то действия, что значительно дольше, чем 3.

    Полный текст этого приложения можно взять здесь.

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




Предыдущий шаг Содержание Следующий шаг