Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методический комплекс ПЗ СППР 2011.doc
Скачиваний:
27
Добавлен:
16.02.2016
Размер:
1.27 Mб
Скачать

3. Функции управления строковыми данными

Конкатенация строк оказывается полезной, если необходимо составить строку из нескольких меньших строк. Кроме того, иногда требуется получить только часть строки. Для этого вVBAсуществует три строковых функции:Right,LeftиMid. Их применение продемонстрировано в следующих операторах.

ShortStringl = Right ("S. Christian Albright", 8)

ShortSCring2 = Left(''S. Christian Albright", 12)

ShortString3 = Mid("S. Christian Albright", 4, 5)

Первый оператор возвращает строку "Albright". Как правило, функцияRightпринимает два аргумента, строку и целое число п. Функция возвращает п символов строки, отсчитываемых справа. ФункцияLeftнапоминает функциюRight,новозвращает п символов строки, отсчитываемых слева. Второй оператор возвращает строку"S. Christian". (Пробел послеS. считается символом.) Наконец, функция Mid принимает в качестве аргументов строку и два целых числа. Первое целое число указывает начальный символ подстроки, а второе целое число определяет количество символов подстроки. Таким образом, третий оператор возвращает строку "Chris". Начиная с четвертого символа, функция возвращает пять символов. Обратите внимание, что третий аргумент функции Mid не обязательный и может опускаться. В этом случае функция возвращает один символ.

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

Characters = Len("S. Christian Albright")

возвращает значение 21. (Не забывайте, что пробел рассматривается как отдельный символ.)

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

AllBut2 = Left(ThisString, Len(ThisString) - 2)

Например, если строка ThisString имеет длину 25 символов, то переменная будет содержать 23 символа, отсчитанных слева.

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

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

  • Определение члена коллекции. Для указания отдельного объекта коллекции используется имя коллекции во множественном числе и имя ее члена в двойных кавычках и скобках. Например, Worksheets("Data"). Объект Range является исключением из правила, поскольку в этом случае множественное число не используется, а для указания определенного диапазона в скобках вводятся координаты диапазона. Отдельный член коллекции можно определить одним из двух способов: по индексу (по номеру) или по имени (с помощью строки). Например, вы вправе ввести какWorksheets(2), так иWorksheets("Data").Имя объекта использовать предпочтительнее. В конце концов, как проверить, что интересующий вас лист действительно второй в коллекции? Ссылку на лист в виде имени понять намного проще.

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

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__ г.