Вставка содержимого выбранной строки в конец списка
Вернемся на рабочий лист ЖурналРегистрацииКУ. При разработке приложения считалось, что основной метод формирования новой строки с данными в журнале регистрации - копирование строки с имеющейся записью, последующий переход в конец списка, выделение первой пустой строки и вставка скопированного содержимого. Задумайтесь, сколько однотипных действий должен совершить пользователь для выполнения этой, казалось бы очень простой, операции. Оставим за пользователем только выбор копируемой строки, а все остальное поручите выполнять Excel в автоматическом режиме при нажатии на созданную кнопку Копирование и вставка выделенной строки (рис. 4.1.), которой назначьте следующий записываемый макрос с именем ВставкаСтроки. Для записи макроса выполните следующую последовательность действий:
Назначьте макрос кнопке и выделив одну из заполненных строк списка журнала регистрации, нажатием на созданную кнопку, проверьте правильность выполнения заданной последовательности ваших действий. Исследование кода VBA при записи макроса ВставкаСтроки После записи макроса не откладывайте на потом исследование записанного кода VBA, а открыв Редактор Visual Basic просмотрите записанные действия и при необходимости отредактируйте код VBA. Механически сгенерированный код показан на рис. 4.22. Рис. 4.22. Механически сгенерированный код VBA Между ключевыми словами начала и окончания выполнения подпрограммы находится восемь строк кода. По очереди рассмотрим каждую строку. Первая строка: Selection.Copy , в которой: Selection - это неявная ссылка на свойство объекта Worksheet (рабочий лист) и означает выделенный (объектом выделения может быть ячейка, диапазон или несколько несмежных диапазонов ячеек, строка или столбец) диапазон. Обратите на точку, находящемуся между текстом кода. Она называется операция точка, и предназначена для разделения названия свойства и названия метода в этой строке. Следующая строка: 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. В этой команде, выполняющей операцию сортировки, находятся следующие операторы:
Как видно из записанного кода для присвоения методам значений применяются знаки:= (двоеточие и равно). Полученный в результате редактирования код макроса показан на рис. 4.23., а остальной текст кода можно удалить. За счет минимизации текста подпрограммы было увеличено его быстродействие. Ведь для Excel нужно было прочитать ранее 8 строк, по каждой из которых он должен был предпринять какие-то действия, что значительно дольше чем 3. Рис. 4.23. Отредактированный код VBA подпрограммы вставки в конец списка содержимого выделенной строки Итоги В этой главе рассмотрено создание простейшего приложения по генерированию командировочных удостоверений, как итоговых документов на основе введенных данных в список Excel (или табличную базу данных) журнала регистрации. Показано создание простейших формул поиска данных, а также:
В журнале регистрации созданного приложения присутствует один существенный недостаток - формулы определения порядкового номера, в которых есть ссылки на диапазоны других строк. При сортировке таблицы по любому полю, кроме столбца А, может нарушиться вся структура таблицы. Поэтому при необходимости сортировки замените формулы номера на определенные ими значения и желательно это делать после сохранения файла под другим именем. Другой выход из положения - внедрить в это приложение дополнительные сервисные функции автоматизации описанные далее. В последующих главах книги будут показаны следующие приемы, автоматизации различных процессов, которые можно применить и к этому простому приложению.
|