Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Макросы занятие 6. Объекты и их свойства.




Работа с ячейками эл.таблицы при произвольном количестве данных.

В макросе прописанном макрорекодером по вставке формул на лист рейсы, есть недостаток – жестко закрепленный диапазон области вставки (от 2 до 50).

Проанализируем объекты, входящие в этот макрос. Прежде всего ActiveCell – активная ячейка. Если набрать его в новой строке и поставить точку, появится всплывающий список свойств и методов (действий), присущий данному объекту.

Среди прочих бросается в глаза свойство Address. Если присвоить переменной значение ActiveCell.Address, например tx= ActiveCell.Address, поставить точку останова на команде следующей за данной инструкцией то, наведя курсор на tx после запуска макроса увидим “$A$1” (выделена ячейка А1). Поскольку мы уже освоили оператор Mid,вырезать текстовое значение номера строки не представляет труда.

Но есть другая проблема – определить, где заканчивается список значений в таблице. Здесь ход рассуждений тоже вполне естественен. Использование служебных клавиш Shift, Ctrl, Alt приводит к исполнению каких либо функций. Даже не обращаясь к справочной системе можем попробовать их действие. Основная клавиша Ctrl. Нажатие <Ctrl>+<End> приводит курсор в конечную область данных вниз+вправо. Нажатие <Ctrl>+<¯> в последнюю непустую ячейку данной колонки. У первой клав. комбинации есть недостаток – перемещение может произойти в область прежде редактируемых, но ныне пустых ячеек. Вывод – будем определять диапазон значений по самой заполненной колонке (в каждой ячейке – значение), используя <Ctrl>+<¯> для перемещения на последнюю ячейку и определение ее адреса. После записи действий получим «волшебную» комбинацию:

Range(“A1”).Select

Selection.End(xlDown).Select

 

Окончательный вариант будет таким:

Sub formuls()

Sheets("Рейсы").Select

Range(“A1”).Select

Selection.End(xlDown).Select

tx= ActiveCell.Address

tx=Mid(tx,4)

Range("G2").Select

ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"

Selection.Copy

Range("G3:G"+tx).Select

ActiveSheet.Paste

Application.CutCopyMode = False

Range("C2").Select

ActiveCell.FormulaR1C1 = "=MONTH(RC[1])"

Selection.AutoFill Destination:=Range("C2:C"+tx), Type:=xlFillDefault

Range("C2:C"+tx).Select

Range("A1").Select

End Sub

При использовании свойства Value (содержимое) объекта Range можно сократить текст макроса до нескольких строк. Дело в том, что макрорекодер не оптимизирует текст программы, а просто фиксирует программными кодами все ваши действия.



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

Sub formuls()

Sheets("Рейсы").Select

Range(“A1”).Select

Selection.End(xlDown).Select

tx= ActiveCell.Address

tx=Mid(tx,4)

Range("G2:G"+tx).Value="=RC[-2]*RC[-1]"

Range("C2:C"+tx).Value = "=MONTH(RC[1])"

Range("A1").Select

End Sub

Для закрепления использования данного открытия освоим еще одну задачу. Попутно разберемся с еще одним свойством активной ячейки. Зачем нам в текстовом виде номер последней заполненной строки, если можно поискать соответствующее свойство активной ячейки. Это свойства Row и Column. Они соответственно возвращают номер строки и колонки в виде целых чисел. Это удобнее в большинстве случаев. Кроме того, для обращения к конкретной ячейке удобнее воспользоваться объектом Cells(ном_строки, ном_колонки).

Пример. Пусть имеется произвольный набор цифр в колонке А. Требуется определить произведение цифр в нечетных строках и сумму цифр в четных строках.

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

Sub чет_нечет()

Range(“A1”).Select

Selection.End(xlDown).Select

proiz=1

nomst= ActiveCell.Row

for i=1 to nomst step 2

proiz=proiz*Cells(i,1)

ssum=ssum+ Cells(i+1,1)

Next I

Cells(1,2)= proiz

Cells(1,3)= ssum

 

End Sub

 


mylektsii.ru - Мои Лекции - 2015-2019 год. (0.005 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал