Термин Объекты Excel (понимаемый в широком смысле, как объектная модель Excel) включает в себя элементы, из которых состоит любая рабочая книга Excel. Это, например, рабочие листы (Worksheets), строки (Rows), столбцы (Columns), диапазоны ячеек (Ranges) и сама рабочая книга Excel (Workbook) в том числе. Каждый объект Excel имеет набор свойств, которые являются его неотъемлемой частью.
Например, объект Worksheet (рабочий лист) имеет свойства Name (имя), Protection (защита), Visible (видимость), Scroll Area (область прокрутки) и так далее. Таким образом, если в процессе выполнения макроса требуется скрыть рабочий лист, то достаточно изменить свойство Visible этого листа.
В Excel VBA существует особый тип объектов – коллекция. Как можно догадаться из названия, коллекция ссылается на группу (или коллекцию) объектов Excel. Например, коллекция Rows – это объект, содержащий все строки рабочего листа.
Доступ ко всем основным объектам Excel может быть осуществлён (прямо или косвенно) через объект Workbooks, который является коллекцией всех открытых в данный момент рабочих книг. Каждая рабочая книга содержит объект Sheets – коллекция, которая включает в себя все рабочие листы и листы с диаграммами рабочей книги. Каждый объект Worksheet состоит из коллекции Rows – в неё входят все строки рабочего листа, и коллекции Columns – все столбцы рабочего листа, и так далее.
В следующей таблице перечислены некоторые наиболее часто используемые объекты Excel. Полный перечень объектов Excel VBA можно найти на сайте Microsoft Office Developer (на английском).
Объект | Описание |
---|---|
Application | Приложение Excel. |
Workbooks | Коллекция всех открытых в данный момент рабочих книг в текущем приложении Excel. Доступ к какой-то конкретной рабочей книге может быть осуществлён через объект Workbooks при помощи числового индекса рабочей книги или её имени, например, Workbooks(1) или Workbooks(«Книга1»). |
Workbook | Объект Workbook – это рабочая книга. Доступ к ней может быть выполнен через коллекцию Workbooks при помощи числового индекса или имени рабочей книги (см. выше). Для доступа к активной в данный момент рабочей книге можно использовать ActiveWorkbook.
Из объекта Workbook можно получить доступ к объекту Sheets, который является коллекцией всех листов рабочей книги (рабочие листы и диаграммы), а также к объекту Worksheets, который представляет из себя коллекцию всех рабочих листов книги Excel. |
Sheets | Объект Sheets– это коллекция всех листов рабочей книги. Это могут быть как рабочие листы, так и диаграммы на отдельном листе. Доступ к отдельному листу из коллекции Sheets можно получить при помощи числового индекса листа или его имени, например, Sheets(1) или Sheets(«Лист1»). |
Worksheets | Объект Worksheets – это коллекция всех рабочих листов в рабочей книге (то есть, все листы, кроме диаграмм на отдельном листе). Доступ к отдельному рабочему листу из коллекции Worksheets можно получить при помощи числового индекса рабочего листа или его имени, например, Worksheets(1) или Worksheets(«Лист1»). |
Worksheet | Объект Worksheet – это отдельный рабочий лист книги Excel. Доступ к нему можно получить при помощи числового индекса рабочего листа или его имени (см. выше).
Кроме этого Вы можете использовать ActiveSheet для доступа к активному в данный момент рабочему листу. Из объекта Worksheet можно получить доступ к объектам Rows и Columns, которые являются коллекцией объектов Range, ссылающихся на строки и столбцы рабочего листа. А также можно получить доступ к отдельной ячейке или к любому диапазону смежных ячеек на рабочем листе. |
Rows | Объект Rows – это коллекция всех строк рабочего листа. Объект Range, состоящий из отдельной строки рабочего листа, может быть доступен по номеру этой строки, например, Rows(1). |
Columns | Объект Columns – это коллекция всех столбцов рабочего листа. Объект Range, состоящий из отдельного столбца рабочего листа, может быть доступен по номеру этого столбца, например, Columns(1). |
Range | Объект Range – это любое количество смежных ячеек на рабочем листе. Это может быть одна ячейка или все ячейки листа.
Доступ к диапазону, состоящему из единственной ячейки, может быть осуществлён через объект Worksheet при помощи свойства Cells, например, Worksheet.Cells(1,1). По-другому ссылку на диапазон можно записать, указав адреса начальной и конечной ячеек. Их можно записать через двоеточие или через запятую. Например, Worksheet.Range(«A1:B10») или Worksheet.Range(«A1», «B10») или Worksheet.Range(Cells(1,1), Cells(10,2)). Обратите внимание, если в адресе Range вторая ячейка не указана (например, Worksheet.Range(«A1») или Worksheet.Range(Cells(1,1)), то будет выбран диапазон, состоящий из единственной ячейки. |
Приведённая выше таблица показывает, как выполняется доступ к объектам Excel через родительские объекты. Например, ссылку на диапазон ячеек можно записать вот так:
Workbooks("Книга1").Worksheets("Лист1").Range("A1:B10")
Содержание
- Присваивание объекта переменной
- Активный объект
- Смена активного объекта
- Свойства объектов
- Методы объектов
- Рассмотрим несколько примеров
- Пример 1
- Пример 2
- Пример 3
Присваивание объекта переменной
В Excel VBA объект может быть присвоен переменной при помощи ключевого слова Set:
Dim DataWb As Workbook Set DataWb = Workbooks("Книга1.xlsx")
Активный объект
В любой момент времени в Excel есть активный объект Workbook – это рабочая книга, открытая в этот момент. Точно так же существует активный объект Worksheet, активный объект Range и так далее.
Сослаться на активный объект Workbook или Sheet в коде VBA можно как на ActiveWorkbook или ActiveSheet, а на активный объект Range – как на Selection.
Если в коде VBA записана ссылка на рабочий лист, без указания к какой именно рабочей книге он относится, то Excel по умолчанию обращается к активной рабочей книге. Точно так же, если сослаться на диапазон, не указывая определённую рабочую книгу или лист, то Excel по умолчанию обратится к активному рабочему листу в активной рабочей книге.
Таким образом, чтобы сослаться на диапазон A1:B10 на активном рабочем листе активной книги, можно записать просто:
Смена активного объекта
Если в процессе выполнения программы требуется сделать активной другую рабочую книгу, другой рабочий лист, диапазон и так далее, то для этого нужно использовать методы Activate или Select вот таким образом:
Sub ActivateAndSelect() Workbooks("Книга2").Activate Worksheets("Лист2").Select Worksheets("Лист2").Range("A1:B10").Select Worksheets("Лист2").Range("A5").Activate End Sub
Методы объектов, в том числе использованные только что методы Activate или Select, далее будут рассмотрены более подробно.
Свойства объектов
Каждый объект VBA имеет заданные для него свойства. Например, объект Workbook имеет свойства Name (имя), RevisionNumber (количество сохранений), Sheets (листы) и множество других. Чтобы получить доступ к свойствам объекта, нужно записать имя объекта, затем точку и далее имя свойства. Например, имя активной рабочей книги может быть доступно вот так: ActiveWorkbook.Name. Таким образом, чтобы присвоить переменной wbName имя активной рабочей книги, можно использовать вот такой код:
Dim wbName As String wbName = ActiveWorkbook.Name
Ранее мы показали, как объект Workbook может быть использован для доступа к объекту Worksheet при помощи такой команды:
Workbooks("Книга1").Worksheets("Лист1")
Это возможно потому, что коллекция Worksheets является свойством объекта Workbook.
Некоторые свойства объекта доступны только для чтения, то есть их значения пользователь изменять не может. В то же время существуют свойства, которым можно присваивать различные значения. Например, чтобы изменить название активного листа на «Мой рабочий лист«, достаточно присвоить это имя свойству Name активного листа, вот так:
ActiveSheet.Name = "Мой рабочий лист"
Методы объектов
Объекты VBA имеют методы для выполнения определённых действий. Методы объекта – это процедуры, привязанные к объектам определённого типа. Например, объект Workbook имеет методы Activate, Close, Save и ещё множество других.
Для того, чтобы вызвать метод объекта, нужно записать имя объекта, точку и имя метода. Например, чтобы сохранить активную рабочую книгу, можно использовать вот такую строку кода:
Как и другие процедуры, методы могут иметь аргументы, которые передаются методу при его вызове. Например, метод Close объекта Workbook имеет три необязательных аргумента, которые определяют, должна ли быть сохранена рабочая книга перед закрытием и тому подобное.
Чтобы передать методу аргументы, необходимо записать после вызова метода значения этих аргументов через запятую. Например, если нужно сохранить активную рабочую книгу как файл .csv с именем «Книга2», то нужно вызвать метод SaveAs объекта Workbook и передать аргументу Filename значение Книга2, а аргументу FileFormat – значение xlCSV:
ActiveWorkbook.SaveAs "Книга2", xlCSV
Чтобы сделать код более читаемым, при вызове метода можно использовать именованные аргументы. В этом случае сначала записывают имя аргумента, затем оператор присваивания «:=» и после него указывают значение. Таким образом, приведённый выше пример вызова метода SaveAs объекта Workbook можно записать по-другому:
ActiveWorkbook.SaveAs Filename:="Книга2", [FileFormat]:=xlCSV
В окне Object Browser редактора Visual Basic показан список всех доступных объектов, их свойств и методов. Чтобы открыть этот список, запустите редактор Visual Basic и нажмите F2.
Рассмотрим несколько примеров
Пример 1
Этот отрывок кода VBA может служить иллюстрацией использования цикла For Each. В данном случае мы обратимся к нему, чтобы продемонстрировать ссылки на объект Worksheets (который по умолчанию берётся из активной рабочей книги) и ссылки на каждый объект Worksheet отдельно. Обратите внимание, что для вывода на экран имени каждого рабочего листа использовано свойство Name объекта Worksheet.
'Пролистываем поочерёдно все рабочие листы активной рабочей книги 'и выводим окно сообщения с именем каждого рабочего листа Dim wSheet As Worksheet For Each wSheet in Worksheets MsgBox "Найден рабочий лист: " & wSheet.Name Next wSheet
Пример 2
В этом примере кода VBA показано, как можно получать доступ к рабочим листам и диапазонам ячеек из других рабочих книг. Кроме этого, Вы убедитесь, что если не указана ссылка на какой-то определённый объект, то по умолчанию используются активные объекты Excel. Данный пример демонстрирует использование ключевого слова Set для присваивания объекта переменной.
В коде, приведённом ниже, для объекта Range вызывается метод PasteSpecial. Этот метод передаёт аргументу Paste значение xlPasteValues.
'Копируем диапазон ячеек из листа "Лист1" другой рабочей книги (с именем Data.xlsx) 'и вставляем только значения на лист "Результаты" текущей рабочей книги (с именем CurrWb.xlsm) Dim dataWb As Workbook Set dataWb = Workbooks.Open("C:Data") 'Обратите внимание, что DataWb – это активная рабочая книга. 'Следовательно, следующее действие выполняется с объектом Sheets в DataWb. Sheets("Лист1").Range("A1:B10").Copy 'Вставляем значения, скопированные из диапазона ячеек, на рабочий лист "Результаты" 'текущей рабочей книги. Обратите внимание, что рабочая книга CurrWb.xlsm не является 'активной, поэтому должна быть указана в ссылке. Workbooks("CurrWb").Sheets("Результаты").Range("A1").PasteSpecial Paste:=xlPasteValues
Пример 3
Следующий отрывок кода VBA показывает пример объекта (коллекции) Columns и демонстрирует, как доступ к нему осуществляется из объекта Worksheet. Кроме этого, Вы увидите, что, ссылаясь на ячейку или диапазон ячеек на активном рабочем листе, можно не указывать этот лист в ссылке. Вновь встречаем ключевое слово Set, при помощи которого объект Range присваивается переменной Col.
Данный код VBA показывает также пример доступа к свойству Value объекта Range и изменение его значения.
'С помощью цикла просматриваем значения в столбце A на листе "Лист2", 'выполняем с каждым из них арифметические операции и записываем результат 'в столбец A активного рабочего листа (Лист1) Dim i As Integer Dim Col As Range Dim dVal As Double 'Присваиваем переменной Col столбец A рабочего листа "Лист2" Set Col = Sheets("Лист2").Columns("A") i = 1 'Просматриваем последовательно все ячейки столбца Col до тех пор 'пока не встретится пустая ячейка Do Until IsEmpty(Col.Cells(i)) 'Выполняем арифметические операции со значением текущей ячейки dVal = Col.Cells(i).Value * 3 - 1 'Следующая команда записывает результат в столбец A 'активного листа. Нет необходимости указывать в ссылке имя листа, 'так как это активный лист рабочей книги. Cells(i, 1).Value = dVal i = i + 1 Loop
Оцените качество статьи. Нам важно ваше мнение:
Архив материалов
Опубликовано 03.04.2017 18:21
Привет всем! Продолжаем наш видеокурс по написанию макросов в Excel. В предыдущих видеоуроках вы уже узнали, в какой среде пишутся макросы, какими способами можно их запустить и написали свой первый макрос. Сегодня же давайте подробнее поговорим про объекты Excel. Эта тема для нас очень важна, так как для разработки решений, использующих Microsoft Office Excel, необходимо взаимодействие с объектами, предоставляемыми объектной моделью, и их понимание. Давайте разбираться.
Что такое Объекты в Excel
Объектами в Excel называется всё то, на что вы можете указать. Например, это график, рабочие листы, ячейка или диапазоны ячеек, и сами Excel-файлы.
Пример.
Из предыдущих уроков, вы уже знаете, как зайти в редактор кода VBE. В качестве примера возьмем макрос, который в указанную клетку вписывал строку «Академия Excel»:
[php]
Sub objects()
Range(«B3»).Value = «Академия Excel» Application.Workbooks(«Книга1.xlsx»).Worksheets(«Лист1»).Range(«B3»).Value = «Академия Excel»
End Sub
[/php]
Строка кода
Range(«B3»).Value = «Академия Excel»
означает, что в ячейку В3 будет записано значение “Академия Excel”. А строка
Application.Workbooks(«Книга1.xlsx»).Worksheets(«Лист1»).Range(«B3»).Value = «Академия Excel»
выполняет ту же функцию, но указывает полную адресацию объекта Excel.
Таким образом, чтобы обратиться к книге, мы написали Application.Workbooks(«Книга1.xlsx»), книга стала активной, далее если мы говорим про конкретный лист, то мы поставили точку(.) и ввели Worksheets(«Лист1»). Далее опять указали конкретную ячейку Range(«B3»), поставили точку(.) и записали в ячейку значение Value = «Академия Excel», т.е. объектами Excel в данном примере является Книга1, Лист1 и ячейка В3.
Важно!!! Надо понимать, что когда вы не пишете полный адрес, то работаете с активной книгой, активным листом. Если указываете полный адрес – файл должен быть открыт, а лист существовать.
Напоминание!!!
- • Пошаговое выполнение кода – клавиша F8.
- • Горячие клавиши Ctrl+Space — выпадающий список с подсказками Excel на объекты, свойства и методы, характерные именно для этого объекта. Клавишей Tab подтверждаем выбор.
Основные понятия урока:
1. Всё, что вы видите в Excel, является объектом.
2. Все объекты Excel объединены в иерархию.
[php]
Application.Workbooks(«Книга1.xlsx»).Worksheets(«Лист1»).Range(«B3»)
файл лист ячейка
[/php]
3. Ссылка на активную ячейку. Совсем не обязательно указывать полный путь, чтобы изменить значение в ячейке.
Поздравляем, вы познакомились с объектами Excel! На следующем видеоуроке мы поговорим про объекты Workbooks и Worksheets. До новых встреч!
Приятного всем просмотра! Учитесь с удовольствие! Всегда ваш LoftBlog.
На чтение 5 мин. Просмотров 7.3k.
Иерархия объектов — соединение точек
Объекты VBA организованы в иерархию, что облегчает их использование. В верхней части этой иерархии находится приложение Excel. Все объекты в Excel являются членами или подчиненными элементами объекта Application.
Вот
полная строка кода, которая начинается на уровне Application.
Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Range(«A1»).Value = 100
Точки между словами позволяют нам ссылаться на членов иерархии сверху вниз. Таким образом, Application является верхним уровнем иерархии, а Workbooks является членом Application. Свойство Workbooks () возвращает коллекцию всех открытых книг на компьютере.
Мы ссылаемся на имя книги в свойстве Workbooks, чтобы
вернуть объект книги. Это может показаться странным, но в основном это
позволяет нам сообщать VBA, на какой объект мы ссылаемся.
Ниже мы ссылаемся на свойство Worksheets, которое возвращает
коллекцию всех листов в книге. Рабочие листы являются частью объекта Workbook.
Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»)
Опять же, мы указываем имя листа «Sheet1» в свойстве Worksheets для возврата объекта листа.
Вы можете увидеть, как мы проходим путь к объекту Range и значению ячейки A1.
Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Range(«A1»).Value = 100
Важно отметить, что у каждого объекта есть много разных членов, которые мы можем использовать для ссылки на различные объекты. Например, членами объекта «Рабочий лист» могут быть: «Диапазоны», «Сводные таблицы», «Фигуры», «Диаграммы», «Список» и т.д.
Как пример, подумайте обо всех объектах на вашей кухне.
Вероятно, существуют десятки, если не сотни объектов, которые имеют свойства и
могут выполнять действия. Эти объекты могут быть членами больших коллекций.
Нож шеф-повара входит в коллекцию всех принадлежащих вам кухонных принадлежностей. Каждый из этих инструментов имеет разные свойства и может выполнять разные действия.
Наша иерархия объектов для ножа на кухне может выглядеть следующим образом.
House.Rooms(«Kitchen»).Areas(«Knife Block»).Tools(«Chef Knife»).Clean = True
Видите, как мы начинаем с дома и приближаемся, чтобы найти нож, а затем устанавливаем его свойства.
Квалификационные объекты в VBA
Если вы состоите в браке или живете с близким другом, то вы уже много знаете о соответствующих объектах.
На днях мы с женой были на кухне и она сказала: «Можешь включить свет, пожалуйста?»
Я сказал: «Конечно!» И включил кухонный свет.
Я сделал некоторые предположения о том, о каком свете она
говорила, потому что мы оба были на кухне, а на нашей кухне только один свет.
Ей не нужно было говорить: «Не могли бы вы включить свет на кухне, которая находится над раковиной и управляется настенным выключателем?» Окружающая среда, в которой мы оба находились, соответствовала контексту, и она смогла сократить свой вопрос.
VBA также позволяет нам делать эти предположения при ссылках
на объекты. Если вы не указываете рабочую книгу или рабочий лист в строке кода,
то VBA предполагает, что вы ссылаетесь на активную рабочую книгу и активный
рабочий лист.
Это позволяет нам сократить наш код, облегчая чтение и
запись.
- Полная запись — Application.Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Range(«A1»).Value = 100
- Сокращенная (предполагает ActiveSheet и ActiveWorkbook) — Range(«A1»).Value = 100
Первая строка кода считается «полной», поскольку она ссылается на все родительские элементы оцениваемого объекта.
Вторая строка кода будет работать так же, как и первая, если активной книгой была Книга1, а активным листом — Лист1.
Хотя сокращение нашего кода может облегчить нашу жизнь, оно
также может привести к проблемам!
Предположения могут привести к неприятностям и вызвать ошибки!
Несколько дней назад я был в спальне, и моя жена кричала из кухни: «Эй, я могу выбросить это ???» Теперь, хотя я только что вышел из кухни, я не знал, о чем она говорила. Это когда-нибудь случалось с тобой?
Что еще более важно, это когда-либо приводило к спору или грубому ответу? Я знаю, что я виновен! Ну, я не поняла ее вопрос, потому что у меня не было контекста. Иногда у нас такие близкие отношения, что мы думаем, что наш близкий друг может читать наши мысли и видеть нашими глазами, и мы делаем предположения, которые могут превратиться в недоразумение. Благослови мою жену за веру, что я умнее, чем на самом деле… 🙂
У VBA точно такие же проблемы с недоразумениями. Они
вызывают ошибки и могут быть опасны! Вы должны быть осторожны с тем, как вы
сокращаете свои вопросы и команды.
Например, следующая строка кода очистит значения и формулы
всех ячеек на активном рабочем листе.
Cells.ClearContents
Если вы не скажете VBA, какой лист, из какой книги вы хотите
очистить, это может означать катастрофу! Вы не можете отменить это действие.
Таким образом, вы хотели бы уточнить эту строку кода, чтобы
сообщить VBA, на какую рабочую книгу и рабочий лист вы ссылаетесь.
Workbooks(«Book1.xlsx»).Worksheets(«Sheet1»).Cells.ClearContents
Эта строка кода предотвращает любые недоразумения и
возможные бедствия.
Что дальше?
В следующей статье мы рассмотрим несколько советов по
чтению, написанию и запуску вашего кода. Мы также рассмотрим некоторые способы
повышения эффективности вашего кода.
Предыдущая статья:
Введение в VBA: Макросы. Объяснение на кухне (Часть 1 из 3)
Следующая статья:
Введение в VBA: Чтение, написание и запуск макроса (часть 3 из 3)
ПРЕДЛАГАЮ КОЛЛЕГАМ
О.А. Житкова, Т.И. Панфилова
Москва
VBA в приложении к Excel, Word и Power Point
В № 1-10/2006 вниманию читателей будет
предложен цикл статей (разработок занятий),
посвященных использованию VBA (Visual Basic for Application)
пакета Microsoft Office. Все материалы прошли
многолетнюю апробацию в НОУ “Ломоносовская
школа” и могут быть использованы как на уроках,
так и во внеурочной деятельности — на
факультативах, кружках, при реализации учебных
проектов.
Занятие № 1. Основные понятия языка VBA Excel
На занятии рассматриваются следующие
вопросы:
- общее понятие о языке VBA;
- объекты VBA;
- свойства, методы и события;
- элементы языка VBA;
- структура редактора VBA.
VBA относится к языкам
объектно-ориентированного программирования,
поэтому знакомство с ним естественно начать с
понятия объекта.
Объекты
Объект — основной элемент VBA Excel. В VBA объектами
являются рабочая книга, рабочий лист и его
составляющие.
Примеры объектов:
- Sheet — лист Excel;
- Cell — ячейка;
- Range — диапазон ячеек;
- Application — приложение;
- UserForm — пользовательская форма.
Доступ к объекту возможен через его
методы и свойства.
Методы
Над объектами можно совершать
различные действия. Действия, совершаемые над
объектами, называются методами. Например, ячейку
можно очистить (Clear), приложение закрыть (Quit),
пользовательскую форму показать (Show) или скрыть
(Hide).
Название метода отделяется от
названия объекта точкой: объект.метод.
Примеры использования методов:
Range(«B2:E2»).Select — выбрать диапазон
ячеек B2:E2;
Range(«C1:C5»).Clear — очистить диапазон
ячеек C1:C5;
UserForm2.Hide — скрыть форму № 2;
UserForm5.Show — показать форму № 5;
Application.Quit — выйти из приложения.
Свойства
Свойствами описываются
характеристики объектов. Например, размер и цвет
шрифта, положение формы на экране или состояние
объекта (доступность, видимость). Чтобы изменить
характеристику объекта, надо просто изменить
значение свойства, т.е. присвоить ему
определенные значения.
Синтаксис установки значения
свойства:
Объект.Свойство = ЗначениеСвойства,
— где Объект обозначает имя
объекта, Свойство — имя свойства, которому
присваивается значение.
Имя объекта отделяется от имени
свойства точкой.
Примеры свойств:
Range(«D1»).Value = 2005 — поместить в ячейку
D1 значение 2005.
Range(«C1:C10»).Text = «Информатика» —
поместить в диапазон ячеек C1:C10 текст
Информатика.
Range(«B2»).Font.Size = 14 — в ячейке B2
установить размер шрифта 14.
Методы и свойства некоторых объектов VBA
Объект: Application (приложение).
Метод: Quit (закрыть).
Свойство: Caption (имя главного окна).
Примеры. Application.Quit — закрыть
приложение; Application.Caption = «Протокол» — установить
в качестве заголовка окна приложения
“Протокол”.
Объект: Sheet (лист), ActiveSheet (активный/выбранный
лист).
Семейство: Sheets (листы).
Методы: Select (выбрать); ShowDataForm (показать
встроенную форму).
Примеры: Sheets(«Меню»).Select —
выбрать лист “Меню”; ActiveSheet.ShowDataForm — на
активном в настоящий момент листе показать
встроенную форму.
Объект: Range (диапазон).
Методы: Select (выделить); Clear (очистить).
Свойство: Name (имя).
Примеры. Sheets(«Протокол»).Range(«В4:В10»).Name
= «Класс» — диапазону В4:В10,
расположенному на листе “Протокол”, присвоить
имя “Класс”;
Sheets(«Протокол»).Range(«В4:В10»).Select — выделить
диапазон В4:В10 на листе “Протокол”.
Объект, Семейство: UserForm (пользовательская
форма).
Методы: Show (показать); Hide (скрыть).
Свойство: Caption (текст,
отображаемый в строке заголовка).
Примеры. UserForm1.Show — показать
пользовательскую форму номер один;
UserForm1.Hide — скрыть пользовательскую
форму номер один;
UserForm1.Caption — «Информатика»-
вывести заданный в кавычках текст в строке
заголовка.
Объект, Семейство: TextBox (Поле
ввода).
Свойство: Text (содержимое).
Примеры. UserForm1.TextBox1.Text = Date — в
поле ввода номер один в пользовательской форме
номер один записать текущую дату; UserForm1.TextBox2.Text =
» « — очистить поле ввода номер два в
пользовательской форме номер один.
Объект, Семейство: ComboBox (поле
со списком).
Метод: AddItem (добавить элемент в
список).
Свойства: Text (содержимое); Rowsource
(источник строк для списка).
Примеры. UserForm1.ComboBox2.Text = » « — очистить
значение поля для поля ввода со списком номер два
в пользовательской форме номер один;
UserForm2.ComboBox1.Rowsource=»В2:В10″ — источником
строк для поля один со списком в
пользовательской форме два установить данные из
диапазона В2:В10;
UserForm1.ComboBox1.AddItem («Факс») — добавить
к списку элемент, заключенный в кавычки.
Объект, Семейство: OptionButton.
Свойства: Value (значение); Сaption
(надпись).
Примеры. UserForm3.OptionButton1.Value = True — выбрать
переключатель номер один в пользовательской
форме номер три; UserForm3.OptionButton1.Capture =
«Успеваемость» — установить надпись
“Успеваемость” рядом с переключателем в
пользовательской форме номер три.
Объект, Семейство: CheckBox.
Свойства: Value (значение);
Сaption (надпись).
Примеры. UserForm2.CheckBox1.Value = True — установить
флажок номер один в пользовательской форме номер
два; UserForm3.CheckBox1.Value = False — сбросить флажок
номер один в пользовательской форме номер три;
UserForm4.CheckBox1.Capture=»Класс» — установить
надпись “Класс” рядом с флажком в
пользовательской форме номер четыре.
События
Событие представляет собой действие,
распознаваемое объектом (например, щелчок мышью
или нажатие клавиши, перемещение мыши или выход
из программы), для которого можно
запрограммировать отклик, т.е. реакцию объекта на
произошедшее событие.
В языке VBA для каждого объекта
определен набор стандартных событий.
Стандартное событие для объекта
“кнопка” (CommandButton) — щелчок мышью (Click).
Если пользователь нажимает на кнопку,
то это событие. На это событие должен быть отклик,
т.е. выполнение какой-либо программы. Такая
программа называется процедурой обработки
событий и имеет стандартное имя. Если такой
отклик не создан (не написана соответствующая
программа), то система никак не будет реагировать
на это событие.
Элементы языка VBA
Объекты — основные элементы языка VBA, но
не единственные. К другим элементам относятся:
константы, переменные, массивы, выражения,
встроенные функции, встроенные диалоговые окна,
операторы.
Константы — данные, не изменяющиеся
в процессе решения задачи. Константы бывают двух
видов: числовые и символьные.
Числовые константы — это целые либо
вещественные числа.
Символьные константы — текст,
заключенный в кавычки. Пример числовой константы
— 5,8 (использование запятой или точки зависит от
настроек операционной системы). Пример
символьной константы — ООО “Темп”.
Переменные — данные, значения
которых меняются в ходе выполнения программы.
Для переменной задается имя и тип.
Имя переменной должно начинаться с
буквы и может содержать любую комбинацию букв,
цифр и символов за исключением точек, пробелов и
следующих символов: “!”, “%”, “&”, “$”, “#”,
“@”. Длина имени не должна превышать 255 символов.
Не следует использовать имена, совпадающие с
ключевыми словами VBA и именами встроенных
функций и процедур.
Основные типы переменных, их размеры и
диапазоны принимаемых значений приведены в табл.
1.
Переменные типа Variant могут хранить все,
что в них поместят. Их тип изменяется в
зависимости от последнего присвоения. В
программах переменные описываются с помощью
специального оператора Dim.
Массив — упорядоченная
совокупность однотипных переменных. Массивы
имеют имя и размерность. Имя массива подбирается
с учетом тех же правил, что и имена переменных. Размерность
— это количество элементов (переменных),
составляющих массив.
Из констант, переменных и встроенных
функций (они рассмотрены далее) с помощью скобок
и знаков арифметических операций (“+”, “-”, “*”,
“/”, “^”) можно составлять выражения.
Частным случаем выражения может быть просто
одиночный элемент, т.е. константа, переменная или
обращение к встроенной функции.
Примеры выражений:
- Z
- (a+b)^2
- 45
- sin(y)
В VBA имеется большой набор встроенных
функций, которые разделяют на категории.
Примеры категорий:
- математические функции;
- функции преобразования форматов;
- логические функции;
- функции времени и даты.
- функции проверки типов;
Некоторые из функций приведены в табл.
2:
Кроме перечисленных функций, объект
Applications позволяет вызвать более 400 встроенных
функций рабочего листа при помощи конструкции
вида:
Application.Функция Рабочего
Листа(Аргументы).
Примеры:
- Application.Sum(Sheets(«Проверка»).Range(«A1:B20»)) —
суммируются значения из ячеек диапазона A1:B20,
расположенного на листе “Проверка”; - Application.CountA(Sheets(«Ученики»).Range(«A:A»)) —
подсчитывается количество непустых ячеек в
столбце А на листе “Ученики”.
Структура редактора VBA
Редактор VBA активизируется командой Сервис
® Макрос ® Редактор Visual Basic. После
выполнения команд мы попадаем в редактор VBA.
Возвратиться из редактора VBA в рабочую книгу
можно нажатием кнопки Вид(View) ® Microsoft Excel . Рассмотрим
основные компоненты окна редактора. Внешний вид
окна редактора представлен на рисунке. Окно
редактора состоит из следующих компонентов:
- панели инструментов;
- окно проекта;
- окно свойств;
- окно редактирования кода;
- меню.
Панели инструментов
Стандартная панель инструментов
редактора Visual Basic содержит кнопки,
предназначенные для выполнения наиболее часто
используемых команд.
Панель разбита на отдельные сегменты
по типу выполняемых команд.
Кнопки первого сегмента:
Кнопки
для возврата в Excel, вставки элементов (модулей,
процедур, экранных форм) в проект и сохранение
рабочей книги.
Кнопки второго сегмента:
Кнопки
для вырезания, копирования, вставки и поиска
фрагментов кода.
Кнопки третьего сегмента:
Кнопки
отмены действий и повторения отмененных
действий.
Кнопки четвертого сегмента:
Кнопки
для выполнения, остановки и прекращения
выполнения процедуры, а также смены режима
отображения экранной формы.
Кнопки пятого сегмента:
Кнопки,
управляющие отображением окон проектов, свойств
и просмотра объектов, а также панели
инструментов.
Последняя кнопка — это обычная
кнопка вызова справочной системы.
Окно проекта
Окно проекта активизируется выбором
команды Вид ® Окно проекта (View, Project window) или
нажатием кнопки Окно проекта . В окне проекта представлена
иерархическая структура файлов, форм и модулей
текущего проекта.
Окно свойств
В окне свойств перечисляются основные
значения свойств выбранного объекта. Используя
это окно, можно просматривать свойства и
изменить их значения. Для просмотра свойств
выбранного объекта надо выполнить команду Вид
® Окно свойств (Properties Windows) или нажатием кнопки .
Окно свойств состоит из двух составных
частей: верхней и рабочей. В верхней части
окна располагается раскрывающийся список, из
которого можно выбрать любой элемент управления
текущей формы или саму форму. Рабочая часть
состоит из двух вкладок, в которых свойства
располагаются По алфавиту (Alphabetic) и По
категориям (Categorized).
Окно для просмотра объектов (Object Browser)
Окно Просмотр объектов (Object Browser)
вызывается командой Вид ® Просмотр объектов
(View, Object Browser) или нажатием кнопки . В этом окне можно
просматривать все объекты проекта. Здесь вы
найдете все свойства, методы и события, связанные
с любым объектом.
Окно Просмотр объектов состоит из
трех основных частей:
1. Раскрывающегося списка Проект/Библиотека
в верхнем левом углу экрана. Например, библиотеки
объектов Excel, VBA, Office и VBAProject (объекты
пользовательского проекта).
2. Списка Классы. Выводятся все
классы выбранной библиотеки.
3. Списка Компоненты (Members).
Выводятся все компоненты выбранного класса.
Это окно предоставляет доступ ко всем
объектам, свойствам, методам и событиям.
Проверочная работа № 1-1
Выберите правильный ответ (возможно
несколько правильных ответов):
1. Объектом VBA являются:
рабочая книга;
рабочий лист;
диапазон ячеек;
массивы.
2. Щелчок мышью или нажатие клавиши,
перемещение мыши или выход из программы, это
действие называется:
откликом;
просмотром;
свойством;
событием.
3. Для того чтобы подсчитать
дискриминант в квадратном уравнении, надо его
записать следующим образом:
d = b2 — 4 ac
d = b^2 — 4ac
d = b^2
— 4*a*c
d = b^2 — 4*ac
4. Продолжите определение:
Метод — это…
основной элемент языка
VBA;
структура редактора VBA;
характеристика объекта;
действия, совершаемые над объектами.
5. Чтобы стандартно изменить
характеристику объекта, надо:
написать новую
программу;
применить другое
свойство;
применить метод;
изменить значение свойства.
6. Запишите конструкции, которые
применяются для установки свойств объектов и
доступа к их методам:
1. Запишите в ячейку В9 дату своего
рождения, в ячейку В10 — свое имя.
2. Установите размер шрифта 16 в ячейках
С4:F4, цвет — красный.
3. Покажите форму № 3.
4. Скройте форму № 2.
5. Выберите диапазон ячеек В2:D7.
Проверочная работа № 1-2
Выберите правильный ответ:
1. Очистить диапазон ячеек от А1 до С10:
Range(«А1;C10»).Clear
Range(«А1:C10»).Clear
Range(«А1-C10»).Clear
Clear. Range(«А1:C10»)
2. Скрыть форму № 6:
UserForm6.Show
UserForm №6.Сlose
UserForm6.Hide
UserForm №6.Show
3. Выйти из приложения:
Application.Hide
Application.Сlose
Application.Select
Application.Quit
4. Выделить диапазон ячеек от D6 до E8 на
листе “География”:
Sheets(«География»).Range(«D6-E8»).Show
Sheets
«География».Range(«D6:E8»).Select
Sheets
«География».Range(«D6-E8»).Select
Sheets(«География»).Range(«D6:E8»).Select
5. Присвоить диапазону ячеек от А4 до А16,
расположенных на листе “11 класс”, имя
“Информатика”:
Sheets(«11класс»).Range(«А4:А16»).Name =
«Информатика»
Sheets(«11класс»).Range(«А4-А16»).Name
= «Информатика»
Sheets(«Информатика»).Range(«А4-А16»).Name
= «11класс»
Sheets(«Информатика»).Range(«А4:А16»).Name
= «11класс»
6. Установить источником строк для поля
со списком два в пользовательской форме три
данные из диапазона от А12 до А15:
UserForm3.ComboBox2.Rowsource =
«А12-А15»
UserForm2.ComboBox3.Rowsource =
«А12:А15»
UserForm3.ComboBox2.Rowsource = «А12:А15»
UserForm2.ComboBox2.Rowsource =
«А12:А15»
7. Очистить значение поля для поля
ввода со списком номер три в пользовательской
форме номер два:
UserForm3.ComboBox2.Text =
«Очистить»
UserForm2.ComboBox3.Text = » «
UserForm3.ComboBox2.Capture = «0 «
UserForm2.ComboBox3.Text = «-«
8. Установить флажок номер пять в
пользовательской форме номер два:
UserForm5.CheckBox2.Value = True
UserForm2.CheckBox2.Text = False
UserForm2.ComboBox5. Capture = » True
«
UserForm2.CheckBox5. Value = True
9. Сбросить флажок номер пять в
пользовательской форме номер два:
UserForm5.CheckBox2. Value = True
UserForm2.
CheckBox5. Value = False
UserForm2.ComboBox5. Capture = » True
«
UserForm2.CheckBox5. Text = False
10. Выбрать переключатель номер два в
пользовательской форме номер три:
UserForm3.OptionButton2.Value = False
UserForm2. CheckBox3. Value = False
UserForm2.ComboBox5. Capture = True
UserForm3.OptionButton2.Value = True
Практическая работа № 1-3
Установите соответствие между
функцией и выражением:
Log(x) Экспонента
Sin(x) х
преобразуется в целое
Sqr(x) Натуральный
логарифм
Abs(х) Модуль
(абсолютная величина числа)
Cos(х) х
преобразуется в число с плавающей точкой обычной
точности
Exp(х) Синус
CInt(x) х преобразуется
в строку
CSng(x) Текущие дата и время
CStr(x) Квадратный
корень
Now Косинус
Практическая работа № 1-4
1. Откройте новый файл.
2. Перейдите в редактор Visual Basic.
3. Нажмите клавишу для открытия окна Object Browser.
4. В списке Classes (Классы) найдите объект
Range и выделите его.
5. Прокрутите соседний список Members of
‘Range’ для просмотра свойств и методов объекта
Range.
6. Выберите метод Activate.
7. Нажмите клавишу . Откроется окно справочной
системы Visual Basic с описанием метода Activate.
8. Откройте пример с применением метода
Activate к объекту Range. Запишите пример.
9. Для объекта Range выберите свойство Cells.
Запишите, для каких объектов, кроме объекта Range,
характерно это свойство.
10. Запишите метод, используемый для
удаления содержимого диапазона ячеек.
11. Запишите метод, используемый для
удаления рабочего листа в книге.
12. В окне проекта выберите Лист1. В окне
свойств измените его имя на имя ПРОБА. Запишите
название свойства.
13. В окне проекта выберите Лист2. В окне
свойств подберите свойство, которое будет делать
этот лист невидимым. Запишите название свойства
и его значение.
14. В окне проекта выберите Лист3. В окне
свойств подберите свойство, которое будет
изменять ширину столбцов. Укажите значение — 15.
Запишите название свойства.
15. Закончите предложение: окно Object Browser
можно использовать для просмотра списков
объектов, событий, свойств и…
Продолжение следует
Аннотация: VBA, будучи объектно-ориентированным языком программирования, манипулирует объектами приложения. Примерами объектов MS Excel являются: рабочий лист Worksheet, рабочая книга Workbook, диаграмма Chart и т.п. С точки зрения программирования в среде VBA объект обладает свойствами и методами. Свойства описывают объект, а методы позволяют управлять объектом. Рассматриваются основные свойства и методы объектов и коллекций объектов. Представлены различные способы обращения к объектам: обращение к элементу коллекции, использование контейнеров для установки ссылки на объект, использование оператора With и объектных переменных.
Все офисные приложения можно рассматривать как совокупность объектов. Объектами являются сами приложения Application (центральный или корневой объект) и их компоненты (вложенные объекты).
Примеры объектов: рабочий лист Worksheet, рабочая книга Workbook, диаграмма Chart, рамка Border. Доступ к интервалам ячеек возможен только как к объектам Range, например, объект Range(«A1») представляет ячейку A1. Каждый элемент меню, каждая командная кнопка, любой элемент рабочего листа являются объектами MS Excel.
С точки зрения программирования в среде VBA объект обладает свойствами и методами. Свойства описывают объект, а методы позволяют управлять объектом.
В VBA возможны три типичные действия c объектами:
- проверка свойств объекта;
- изменение объекта посредством модификации его свойств;
- выполнение методов объекта.
Подробно структура объектов, синтаксис свойств и методов, перечень событий рассмотрены в разделе Microsoft Excel Object Model книги под названием Microsoft Excel Visual Basic Reference справочника по VBA (Help).
Свойства объектов
Свойства объекта это атрибуты объекта. Каждый объект может иметь десятки свойств, например, объект Worksheet имеет 52 свойства.
Свойства делятся на две группы:
- свойства-участники ( accessors ), представляющие вложенные объекты;
- терминальные свойства ( terminals ), задающие характеристики объекта или его состояние.
Свойства-участники позволяют добраться до объекта, находящегося на любом уровне вложенности. Например, в записи Application.ActiveWorkbook свойство ActiveWorkbook позволяет получить доступ к объекту приложения — активной рабочей книге, а в записи ActiveWorkbook.ActiveSheet свойство ActiveSheet означает доступ к объекту рабочей книги — активной странице этой книги.
Изменение значений терминальных свойств — это один из способов изменить внешний объект.
Свойства имеют статус:
- Read-Write (далее R/W ) предполагает возможность изменения свойства;
- Read-Only (далее R/O ) означает, что можно только протестировать значение свойства.
Некоторые свойства являются общими для многих объектов и для разных объектов могут иметь разный статус, например, Height, Width, являющиеся свойствами интервалов, окон и приложения. В дальнейшем указывается статус и тип значения свойства.
В качестве значений свойств могут использоваться константы с префиксом xl, например, константа xlCalculationManual устанавливает ручной пересчет таблицы.
Свойство | Объект | Примеры | Описание |
---|---|---|---|
Bold, Italic (R/W Boolean) | Font |
ActiveCell.Font.Bold=True
ActiveCell.Font. Italic =False |
Устанавливает полужирный шрифт. Отменяет курсив. |
Column, Row (R/W Long) | Range |
Debug.Print
Range(«B3:C5»).Column, Range(«B3:C5»).Row |
В окне Immediate будут распечатаны номер первой колонки и номер первой строки интервала ячеек B3:C5 — «2 3» |
ColumnWidth (R/W Variant) | Range | Range(«A1:B5»).ColumnWidth=15 | Ширина каждой колонки объекта Range 15 символов |
Height, Width (Double) | Многие объекты |
Application.Width=200 (статус R/W)
W=Range(«A1:B5»). Height (статус R/O) |
Ширина окна приложения 200 пт.
Возвращает суммарную высоту строк объекта Range в пунктах |
RowHeight (R/W Variant) | Range | Range(«A1:B5»).RowHeight=15 | Устанавливает высоту каждой строки объекта Range в пунктах |
Formula (R/W Variant) | Range | Range(«A2»).Formula = «=pi()*A1^2» | В ячейку А2 записывается формула |
Value (R/W Variant) | Range | Range(«A3»).Value=6.28 | Значение ячейки устанавливается равным 6,28 |
Count (R/O Long) | Группа объектов | N=Sheets.Count | В переменную N записывается количество элементов коллекции объектов |
Name (String) | Многие объекты |
ActiveSheet.Name=»Nw_Sh»(статус R/W)
Wb =ActiveWorkbook.Name(статус R/O) |
Активному листу присваивается новое имя.
Переменной Wb присваивается имя активной рабочей книги. |
Parent (R/O Object) | Многие объекты |
P_t= Range(«A1:B5»).Parent
для объекта Range возвращает объект Sheet — рабочий лист, на котором объект Range расположен |
Возвращает объект обычно другого типа, который является объектом более высокого уровня по отношению к указанному объекту |
Свойства объектов изменяются при помощи оператора присваивания или под влиянием методов.
Синтаксис операторов присваивания object.property=expression
- object — ссылка на объект, над которым совершается действие;
- property — название свойства, значение которого необходимо изменить;
- expression — выражение, представляющее новое значение свойства объекта.
Важно
- Каждое свойство может принимать значения только определенного типа.
- Тип результата вычисления выражения должен соответствовать типу свойства, т.е, если свойство является числовым, то и результат вычисления выражения должен быть числом или должен преобразовываться в число.
Например, оператор ActiveCell.Font. Bold=»b» является ошибочным, так как свойство Bold имеет тип Boolean и может принимать значения только True или False.
Пример
Процедура изменяет размеры активного окна приложения. Ширина и высота окна приложения вводятся в диалоге. Свойства Height и Width для объекта Window имеют статус R/W, но эти свойства нельзя изменять, если размер окна минимизирован или максимизирован. Поэтому первоначально в процедуре свойством WindowState устанавливается обычный размер окна
Рис.
8.1.
Процедура изменяет размеры активного окна приложения
При помощи оператора присваивания можно сохранить значение свойства в переменной. Значение свойства может использоваться как часть условного выражения. В таких случаях говорят о возврате значения свойства.
Синтаксис оператора присваивания, возвращающего значение свойства
- variable — переменная или свойство некоторого объекта;
- object — ссылка на объект, свойство которого запоминается или тестируется;
- property — название свойства, значение которого необходимо получить.
Важно
- Тип переменной должен соответствовать типу значения свойства.
Примеры
- Распечатать название рабочего листа c активной ячейкой.
Свойство Parent возвращает рабочий лист, на котором расположена активная ячейка.
Рис.
8.2.
Процедура распечатки названия рабочего листа c активной ячейкой - В зависимости от знака числа, хранящегося в ячейке, залить ячейку некоторым цветом.
В процедуре тестируется свойство Value объекта Range — ячейки A1. В случае отрицательного числа цвет заливки ячейки — синий.
Рис.
8.3.
Процедура тестировния свойства Value объекта RangeПри нулевом значении заливка ячейки отменяется (константа xlNone ). При положительном значении устанавливается цвет заливки, предусмотренный по умолчанию (константа xlAutomatic ).
Методы объектов
Методы — это действия, которые выполняются с объектом. Методы могут влиять на значения свойств.
Важно
- Методы — это функции или подпрограммы.
- Подобно процедурам методы могут принимать аргументы.
- Функции VBA и методы Application могут иметь одинаковые имена, но различные аргументы, например, функция InputBox класса Interaction и метод InputBox класса Application.
Синтаксис вызова метода без аргументов
например, ActiveCell.Justify.
Вызов метода с аргументами имеет две формы:
- variable=object.method(arguments) — функциональная форма вызова (аргументы указываются в скобках после названия метода).
- object.method arguments — операторная форма вызова (аргументы записываются через пробел после названия метода).
Если метод использует несколько аргументов, то они перечисляются через запятую.
Аргументы можно задавать, используя позиционное или произвольное расположение.
ЗАПОМНИТЕ
- Функциональная форма вызова метода используется, если необходимо сохранять значение, возвращаемое методом.
- Операторная форма вызова метода используется, если не нужно сохранять возвращаемое методом значение.
Каждый объект имеет свои собственные методы. Некоторые методы являются уникальными, а другие встречаются у нескольких объектов. Например, метод Delete может удалять графический объект и рабочий лист.
Модель объектов
Структура объектов достаточно сложна. Модель объектов показывает структуру объектов и их взаимосвязи.
Нажатие на выбранный объект отображает на экране статью, посвященную объекту, в которой ниже имени объекта, как правило, расположены три гиперссылки, позволяющие просмотреть свойства ( Properties ), методы ( Methods ) и события ( Events ) выбранного объекта с соответствующими примерами. В дополнение можно раскрыть список рекомендуемых для просмотра объектов ( See Also ). Нажатие на Multiple objects показывает перечень исходных объектов или перечень вложенных объектов.
Рис.
8.5.
Фрагмент статьи, посвященной объекту Workbook
Объекты приложения связаны между собой, и модель объектов отражает иерархические связи между объектами.
Модель объектов содержит простые объекты и коллекции объектов. Коллекция объектов ( Collection ) объединяет группу подобных объектов.
Коллекции объектов
Коллекция объектов — это объект специального типа, существующий для управления объектами группы. Например, Workbooks является коллекцией всех открытых книг — объектов Workbook, а Worksheets — коллекцией рабочих листов некоторой рабочей книги — объектов Worksheet. Примерно половина всех объектов MS Excel — это коллекции объектов.
Процедуры могут обращаться как к отдельному элементу коллекции (к объекту Workbook или к объекту Worksheet ), так и ко всем объектам коллекции одновременно (к объекту Workbooks или к объекту Worksheets ). Коллекция объектов и объекты этой коллекции обладают различными свойствами и методами.
Коллекция объектов — это упорядоченная совокупность объектов. Для доступа к конкретному объекту в коллекции можно использовать его имя или порядковый номер в коллекции, например, Workbooks(1) указывает на первую рабочую книгу. Запись Worksheets(«Sheet2») указывает на лист с именем Sheet2.