Знакомство с моделью планирования перевозок, реализованной в файле Avtofirm.xls.
Цель – максимально автоматизировать процесс выбора грузов, выгодных для перевозок при условии соблюдения ограничения по срокам и изменяющегося состава грузов. Достижение поставленной цели распределяется на ряд подзадач.
1.Произвести определение перечня грузов с дальнейшим выделением произвольной таблицы для сортировки в сторону убывания прибыльности перевозки каждого груза.
2.Проставить напротив неприбыльных грузов символы, отличные от 1 до тех пор пока затраты дней на перевозки будут меньше 31.
3.Обеспечить ввод новых данных или коррекцию с возвратом значений из окна формы пользователя в ячейки таблицы.
4.Предложить рекомендуемые цены для однозначного выбора текущего груза к перевозке.
Реализация 1-ой подзадачи.
Записать макрорекодером макрос который:
1.Устанавливает курсор в начало таблицы со сведениями о грузах.
2.По клавиатурной комбинации <Ctrl+<стрелка вниз> перемещается в последнюю строку таблицы.
3.Проставляет 1 в последней колонке для расчета прибыльности в день
4.Выделяет всю таблицу и производит сортировку по убыванию прибыльности в день.
Текст данного макроса будет таким:
Sheets("FIRMA").Select Выделение листа FIRMA
Range("A23").Select Выделение ячейки A23
Selection.End(xlDown).Select <Ctrl+<стрелка вниз>
Range("T24").Select Выделение ячейки Т24
ActiveCell.FormulaR1C1 = "1" Ввод 1 в активную ячейку
После выполнения данного макроса пользователю необходимо вручную проставить 0 в последней колонке до тех пор пока количество затраченных дней станет меньше 30 (ячейка R32).
Макрос обладает существенными недостатками – сортируется таблица фиксированных размеров и необходимо проставлять 1 вручную в колонке Т.
Для задачи определения размеров произвольных таблиц выясняем, что за объект ActiveCell (активная ячейка) и свойство объектов Value (содержимое).
У объекта ActiveCell множество свойств, но рассуждая, пробуем использовать свойство Address, после того как оказались в последней ячейке таблицы.
Что возвращает объект с указанным свойством?
Посмотрите раздел методички о переменных. Оператор описания Dim.
Объявляем текстовую переменную и присваиваем ей значение ActiveCell.Address
Как просмотреть это значение? См раздел отладка программ.
Выясняется, что (фрагмент программы):
Range("A23").Select
Selection.End(xlDown).Select
Txt= ActiveCell.Address
Txt принимает значение “$A$31”. Получается если отбросить первые три символа то можно использовать номер строки в текстовом виде для выделения произвольных диапазонов ячеек. В помощь получаем оператор Mid(текст, старт позиция, [длина]).
В итоге макрос приобретает вид:
Sheets("FIRMA").Select
Range("A23").Select
Selection.End(xlDown).Select Перейти к последней заполненной строке таблицы
Txt= ActiveCell.Address Текстовой переменной присвоить адрес ячеки
Txt= Mid(Txt,4) Извлечь из адреса номер строки (с 4 позиции исходного значения переменной)
Range("T25:T"+Txt).Value=1 Проставить содержимое ячеек с Т2 до последней строки =1