logo
Методический комплекс ПЗ СППР 2011

4. Определение объектов, свойств и методов

Объекты, свойства и методы впервые рассматривались в Лекции 3. Теперь пришло время описать их возможности в коде VBA. Это очень важный материал. В VBA практически ничего нельзя сделать правильно, не зная, как программно использовать объекты Excel. Придерживайтесь следующих простых правил.

Workbooks("Продажи").Worksheets("Март").Range("Северо-запад")

На самом деле эта строка должна читаться в обратном направлении. Она указывает диапазон Северо-запад на листе Март книги Продажи. Считается, что объект справа определяется (квалифицируется) объектом, который находится слева.

Это правило имеет несколько вариантов. Например, если ссылаться только на диапазон Range("Северо-запад"), то стоит ли его квалифицировать определенными книгой и листом, на которых он находится? Иногда да, а иногда — нет. Вы должны учитывать контекст использования диапазона. В частности, вVBAсуществуют встроенные объектыActiveWorkbookиActiveSheet(к сожалению, объектаActiveWorksheetнет). Эти объекты ссылаются на выбранные в данный момент книгу и лист. Если в коде просто указатьRange("Северо-запад"),это будет равнозначно введению следующего кода.

ActiveWorkbook.ActiveSheet .Range("Северо-запад")

Так как представленная конструкция вполне может оказаться именно той, которая требуется, то ввода оператора Range ("Северо-запад")может оказаться достаточно. Вводя Range("А1"), удостоверьтесь, что активный лист содержит интересующую вас ячейку А1. Если вы не укажете точное расположение диапазона Range(" А1"), то VBA будет угадывать, какая ячейка вам необходима, и не всегда сделает это правильно. Безопаснее определить объект, например, с помощью следующего оператора —Worksheets("Данные") . Range(" А1").

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

Range("Al") .Value

Данный оператор описывает свойство Valueдиапазона А1, т.е. содержимоеячейки А1. Свойство можно определить или получить. Например, следующий оператор размещает в ячейке А1 строковое значение "Продажи за март".

Range("Al") .Value = "Продажи за март"

С другой стороны, следующая строка получает содержимое диапазона А1 и сохраняет его в виде строки в переменнойTitle.

Title = Range("Al") .Value

• Определение метода. Для определения метода объекта имя метода следует разместить справа от имени объекта после точки.

Range("Северо-запад") .ClearContents

• Указание аргументов метода. Если метод имеет аргументы, то они перечисляются через запятую после названия метода. Сначала вводится имя аргумента(которое можно узнать в справочном руководстве), после этого добавляетсяоператор : =, а затем — значение аргумента. Например, следующая конструкция копирует диапазонА1: В10в диапазонD1: Е10. В данном случае ключевое словоDestinationпредставляет аргумент методаСору.

Range("Al:B10") .Copy Destination: =Range("Dl:Е10")

Существует возможность опустить имя аргумента и оператора :=.

Range("A1:B10") .Copy Range("D1:Е10 ")

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

Итак, мы перечислили основные правила. К этому материалу вам предстоит возвращаться еще много раз, чтобы освежить в памяти изученные методы.

Упражнение 3. Подсчет стоимости заказа

Файл Ех4_03.xls является шаблоном для подсчета общей стоимости заказа товаров с учетом накопительных скидок. Таблица (диапазон LTable) в диапазоне А4 : С8 указывает стоимость каждой единицы товара для различных объемов покупки. Диапазон B11: B13 содержит формулы вычисления стоимости покупки, в котором количество единиц приобретаемого товара в заказе размещается в ячейке В11,а общая стоимость выводится в ячейке В13. Просмотрите этот файл, чтобы понять, как функция ВПР используется для подсчета соответствующей стоимости единицы товара в ячейкеВ12.

Файл Ex4_03Finished.xlsсодержит пример завершенного приложения,Откройте этот файл и щелкните на кнопке Создать таблицу. Будет выведен запрос на определение объемов покупки в трех случаях. После этого объем заказанного то-1 вара и соответствующая ему стоимость заносятся в диапазон D12 : Е14. Как правило, объем каждого из заказов помещается в ячейку В11, а соответствующая общая стоимость из ячейки В13 переносится в столбец Е таблицы. Если после этого щелкнуть на кнопке Очистить таблицу, то информация из нее будет удалена.

Теперь, когда стало ясно, каким должно быть конечное приложение, возвращайтесь к файлу Ех4_03 . xl s и попытайтесь создать две процедуры — CreateTable и ClearTable, которые будут назначены кнопкам на рабочем листе. Старайтесь работу выполнять самостоятельно. Если вам потребуется помощь, то обратитесь к коду в файлеEx4_03Finished.xls.

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

Домашнее задание: Подготовить материал лекций 4-5.

Контрольные вопросы:

1. В чём отличиеVBAотVisualBasic?

2. Поясните следующие термины: объекты, свойства, значения, методы, аргументы.

3. Как вызвать редакторVBE?

4. Какой вид имеет окно редактораVBE?

5. Назовите назначение окон Propeties, Project, Immediate, Watch.

6. Какие панели инструментов имеет VBEкак минимум?

7. Как осуществить просмотр объектов?

Инструктивно-методические указания по проведению практического занятия обсуждены и одобрены на заседании кафедры КЭЭМ

Протокол № ___ от «___» __________ 200__ г.