Свойства объекта это excel

Термин Объекты 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. Смена активного объекта
  4. Свойства объектов
  5. Методы объектов
  6. Рассмотрим несколько примеров
  7. Пример 1
  8. Пример 2
  9. Пример 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

Оцените качество статьи. Нам важно ваше мнение:

На занятии рассматриваются следующие
вопросы:

  • общее
    понятие о языке VBA;

  • объекты
    VBA;

  • свойства,
    методы и события;

  • элементы
    языка VBA;

  • структура
    редактора VBA.

Visual
Basic
for
Application
(VBA)
– подмножество языка программирования
Visual
Basic,
включает средства создания приложений
VB.
VBA относится к языкам
объектно-ориентированного программирования.
Системы объектно-ориентированного
программирования дают возможность
визуализировать процесс создания
графического интерфейса разрабатываемого
приложения. Главная особенность
программирования в среде VBA — в ней нельзя
создавать проект независимо от этих
приложений, т.о. VBA работает непосредственно
с объектами MS Office.
Это позволяет его применять для
автоматизации деятельности, связанной
с обработкой различных типов документов.
Программист (пользователь) может создать
видимую часть приложения, которая
является основой интерфейса
«программа-пользователь». Взаимодействие
программируемых объектов между собой
и их изменение создается при помощи
программных кодов.

Эта технология сделала возможным
создание повторно используемых
компонентов, являющихся строительными
блоками программ.

Объекты

Объект — основной элемент VBA Excel.
В VBA объектами являются рабочая
книга, рабочий лист и его составляющие:
ячейки, диалоговые окна, кнопки и т.д.

Примеры объектов:

  • Sheet
    — лист Excel;

  • Cell
    — ячейка;

  • Range
    — диапазон ячеек;

  • Application
    — приложение;

  • UserForm
    — пользовательская форма.

Доступ к объекту возможен через его
методы и свойства и события.

События

Событие представляет собой действие,
распознаваемое объектом (например,
щелчок мышью или нажатие клавиши,
перемещение мыши или выход из программы),
для которого можно запрограммировать
отклик, т.е. реакцию объекта на произошедшее
событие.

В языке VBA для каждого объекта определен
набор стандартных событий.

Стандартное событие для объекта “кнопка”
(CommandButton) — щелчок мышью (Click).

Если пользователь нажимает на кнопку,
то это событие. На это событие должен
быть отклик, т.е. выполнение какой-либо
программы. Такая программа называется
процедурой обработки событий и имеет
стандартное имя. Если такой отклик не
создан (не написана соответствующая
программа), то система никак не будет
реагировать на это событие.

Методы и Свойства

Для каждого объекта определен ряд
возможных событий. Одни из них
возникают как отклик на команды
пользователя, другие задают характеристики
объектов.

Методами называются набор действий,
которые может совершать объект.
Например, ячейку можно очистить (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, будучи объектно-ориентированным языком программирования, манипулирует объектами приложения. Примерами объектов 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 — название свойства, значение которого необходимо получить.

Важно

  • Тип переменной должен соответствовать типу значения свойства.

Примеры

  1. Распечатать название рабочего листа c активной ячейкой.

    Свойство Parent возвращает рабочий лист, на котором расположена активная ячейка.

    Процедура распечатки названия рабочего листа c активной ячейкой

    Рис.
    8.2.
    Процедура распечатки названия рабочего листа c активной ячейкой

  2. В зависимости от знака числа, хранящегося в ячейке, залить ячейку некоторым цветом.

    В процедуре тестируется свойство Value объекта Range — ячейки A1. В случае отрицательного числа цвет заливки ячейки — синий.

    Процедура тестировния свойства Value объекта Range

    Рис.
    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 показывает перечень исходных объектов или перечень вложенных объектов.

Фрагмент статьи, посвященной объекту Workbook

Рис.
8.5.
Фрагмент статьи, посвященной объекту Workbook

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

Модель объектов содержит простые объекты и коллекции объектов. Коллекция объектов ( Collection ) объединяет группу подобных объектов.

Коллекции объектов

Коллекция объектов — это объект специального типа, существующий для управления объектами группы. Например, Workbooks является коллекцией всех открытых книг — объектов Workbook, а Worksheets — коллекцией рабочих листов некоторой рабочей книги — объектов Worksheet. Примерно половина всех объектов MS Excel — это коллекции объектов.

Процедуры могут обращаться как к отдельному элементу коллекции (к объекту Workbook или к объекту Worksheet ), так и ко всем объектам коллекции одновременно (к объекту Workbooks или к объекту Worksheets ). Коллекция объектов и объекты этой коллекции обладают различными свойствами и методами.

Коллекция объектов — это упорядоченная совокупность объектов. Для доступа к конкретному объекту в коллекции можно использовать его имя или порядковый номер в коллекции, например, Workbooks(1) указывает на первую рабочую книгу. Запись Worksheets(«Sheet2») указывает на лист с именем Sheet2.

Свойства ячейки, часто используемые в коде VBA Excel. Демонстрация свойств ячейки, как структурной единицы объекта Range, на простых примерах.

Объект Range в VBA Excel представляет диапазон ячеек. Он (объект Range) может описывать любой диапазон, начиная от одной ячейки и заканчивая сразу всеми ячейками рабочего листа.

Примеры диапазонов:

  • Одна ячейка – Range("A1").
  • Девять ячеек – Range("A1:С3").
  • Весь рабочий лист в Excel 2016 – Range("1:1048576").

Для справки: выражение Range("1:1048576") описывает диапазон с 1 по 1048576 строку, где число 1048576 – это номер последней строки на рабочем листе Excel 2016.

В VBA Excel есть свойство Cells объекта Range, которое позволяет обратиться к одной ячейке в указанном диапазоне (возвращает объект Range в виде одной ячейки). Если в коде используется свойство Cells без указания диапазона, значит оно относится ко всему диапазону активного рабочего листа.

Примеры обращения к одной ячейке:

  • Cells(1000), где 1000 – порядковый номер ячейки на рабочем листе, возвращает ячейку «ALL1».
  • Cells(50, 20), где 50 – номер строки рабочего листа, а 20 – номер столбца, возвращает ячейку «T50».
  • Range("A1:C3").Cells(6), где «A1:C3» – заданный диапазон, а 6 – порядковый номер ячейки в этом диапазоне, возвращает ячейку «C2».

Для справки: порядковый номер ячейки в диапазоне считается построчно слева направо с перемещением к следующей строке сверху вниз.

Подробнее о том, как обратиться к ячейке, смотрите в статье: Ячейки (обращение, запись, чтение, очистка).

В этой статье мы рассмотрим свойства объекта Range, применимые, в том числе, к диапазону, состоящему из одной ячейки.

Еще надо добавить, что свойства и методы объектов отделяются от объектов точкой, как в третьем примере обращения к одной ячейке: Range("A1:C3").Cells(6).

Свойства ячейки (объекта Range)

Свойство Описание
Address Возвращает адрес ячейки (диапазона).
Borders Возвращает коллекцию Borders, представляющую границы ячейки (диапазона). Подробнее…
Cells Возвращает объект Range, представляющий коллекцию всех ячеек заданного диапазона. Указав номер строки и номер столбца или порядковый номер ячейки в диапазоне, мы получаем конкретную ячейку. Подробнее…
Characters Возвращает подстроку в размере указанного количества символов из текста, содержащегося в ячейке. Подробнее…
Column Возвращает номер столбца ячейки (первого столбца диапазона). Подробнее…
ColumnWidth Возвращает или задает ширину ячейки в пунктах (ширину всех столбцов в указанном диапазоне).
Comment Возвращает комментарий, связанный с ячейкой (с левой верхней ячейкой диапазона).
CurrentRegion Возвращает прямоугольный диапазон, ограниченный пустыми строками и столбцами. Очень полезное свойство для возвращения рабочей таблицы, а также определения номера последней заполненной строки.
EntireColumn Возвращает весь столбец (столбцы), в котором содержится ячейка (диапазон). Диапазон может содержаться и в одном столбце, например, Range("A1:A20").
EntireRow Возвращает всю строку (строки), в которой содержится ячейка (диапазон). Диапазон может содержаться и в одной строке, например, Range("A2:H2").
Font Возвращает объект Font, представляющий шрифт указанного объекта. Подробнее о цвете шрифта…
HorizontalAlignment Возвращает или задает значение горизонтального выравнивания содержимого ячейки (диапазона). Подробнее…
Interior Возвращает объект Interior, представляющий внутреннюю область ячейки (диапазона). Применяется, главным образом, для возвращения или назначения цвета заливки (фона) ячейки (диапазона). Подробнее…
Name Возвращает или задает имя ячейки (диапазона).
NumberFormat Возвращает или задает код числового формата для ячейки (диапазона). Примеры кодов числовых форматов можно посмотреть, открыв для любой ячейки на рабочем листе Excel диалоговое окно «Формат ячеек», на вкладке «(все форматы)». Свойство NumberFormat диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковый числовой формат. Если нужно присвоить ячейке текстовый формат, записывается так: Range("A1").NumberFormat = "@". Общий формат: Range("A1").NumberFormat = "General".
Offset Возвращает объект Range, смещенный относительно первоначального диапазона на указанное количество строк и столбцов. Подробнее…
Resize Изменяет размер первоначального диапазона до указанного количества строк и столбцов. Строки добавляются или удаляются снизу, столбцы – справа. Подробнее…
Row Возвращает номер строки ячейки (первой строки диапазона). Подробнее…
RowHeight Возвращает или задает высоту ячейки в пунктах (высоту всех строк в указанном диапазоне).
Text Возвращает форматированный текст, содержащийся в ячейке. Свойство Text диапазона возвращает значение NULL, за исключением тех случаев, когда все ячейки в диапазоне имеют одинаковое содержимое и один формат. Предназначено только для чтения. Подробнее…
Value Возвращает или задает значение ячейки, в том числе с отображением значений в формате Currency и Date. Тип данных Variant. Value является свойством ячейки по умолчанию, поэтому в коде его можно не указывать.
Value2 Возвращает или задает значение ячейки. Тип данных Variant. Значения в формате Currency и Date будут отображены в виде чисел с типом данных Double.
VerticalAlignment Возвращает или задает значение вертикального выравнивания содержимого ячейки (диапазона). Подробнее…

В таблице представлены не все свойства объекта Range. С полным списком вы можете ознакомиться не сайте разработчика.

Простые примеры для начинающих

Вы можете скопировать примеры кода VBA Excel в стандартный модуль и запустить их на выполнение. Как создать стандартный модуль и запустить процедуру на выполнение, смотрите в статье VBA Excel. Начинаем программировать с нуля.

Учтите, что в одном программном модуле у всех процедур должны быть разные имена. Если вы уже копировали в модуль подпрограммы с именами Primer1, Primer2 и т.д., удалите их или создайте еще один стандартный модуль.

Форматирование ячеек

Заливка ячейки фоном, изменение высоты строки, запись в ячейки текста, автоподбор ширины столбца, выравнивание текста в ячейке и выделение его цветом, добавление границ к ячейкам, очистка содержимого и форматирования ячеек.

Если вы запустите эту процедуру, информационное окно MsgBox будет прерывать выполнение программы и сообщать о том, что произойдет дальше, после его закрытия.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

Sub Primer1()

MsgBox «Зальем ячейку A1 зеленым цветом и запишем в ячейку B1 текст: «Ячейка A1 зеленая!»»

Range(«A1»).Interior.Color = vbGreen

Range(«B1»).Value = «Ячейка A1 зеленая!»

MsgBox «Сделаем высоту строки, в которой находится ячейка A2, в 2 раза больше высоты ячейки A1, « _

& «а в ячейку B1 вставим текст: «Наша строка стала в 2 раза выше первой строки!»»

Range(«A2»).RowHeight = Range(«A1»).RowHeight * 2

Range(«B2»).Value = «Наша строка стала в 2 раза выше первой строки!»

MsgBox «Запишем в ячейку A3 высоту 2 строки, а в ячейку B3 вставим текст: «Такова высота второй строки!»»

Range(«A3»).Value = Range(«A2»).RowHeight

Range(«B3»).Value = «Такова высота второй строки!»

MsgBox «Применим к столбцу, в котором содержится ячейка B1, метод AutoFit для автоподбора ширины»

Range(«B1»).EntireColumn.AutoFit

MsgBox «Выделим текст в ячейке B2 красным цветом и выровним его по центру (по вертикали)»

Range(«B2»).Font.Color = vbRed

Range(«B2»).VerticalAlignment = xlCenter

MsgBox «Добавим к ячейкам диапазона A1:B3 границы»

Range(«A1:B3»).Borders.LineStyle = True

MsgBox «Сделаем границы ячеек в диапазоне A1:B3 двойными»

Range(«A1:B3»).Borders.LineStyle = xlDouble

MsgBox «Очистим ячейки диапазона A1:B3 от заливки, выравнивания, границ и содержимого»

Range(«A1:B3»).Clear

MsgBox «Присвоим высоте второй строки высоту первой, а ширине второго столбца — ширину первого»

Range(«A2»).RowHeight = Range(«A1»).RowHeight

Range(«B1»).ColumnWidth = Range(«A1»).ColumnWidth

MsgBox «Демонстрация форматирования ячеек закончена!»

End Sub

Вычисления в ячейках (свойство Value)

Запись двух чисел в ячейки, вычисление их произведения, вставка в ячейку формулы, очистка ячеек.

Обратите внимание, что разделителем дробной части у чисел в VBA Excel является точка, а не запятая.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Sub Primer2()

MsgBox «Запишем в ячейку A1 число 25.3, а в ячейку B1 — число 34.42»

Range(«A1»).Value = 25.3

Range(«B1»).Value = 34.42

MsgBox «Запишем в ячейку C1 произведение чисел, содержащихся в ячейках A1 и B1»

Range(«C1»).Value = Range(«A1»).Value * Range(«B1»).Value

MsgBox «Запишем в ячейку D1 формулу, которая перемножает числа в ячейках A1 и B1»

Range(«D1»).Value = «=A1*B1»

MsgBox «Заменим содержимое ячеек A1 и B1 на числа 6.258 и 54.1, а также активируем ячейку D1»

Range(«A1»).Value = 6.258

Range(«B1»).Value = 54.1

Range(«D1»).Activate

MsgBox «Мы видим, что в ячейке D1 произведение изменилось, а в строке состояния отображается формула; « _

& «следующим шагом очищаем задействованные ячейки»

Range(«A1:D1»).Clear

MsgBox «Демонстрация вычислений в ячейках завершена!»

End Sub

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

Различие свойств Text, Value и Value2

Построение с помощью кода VBA Excel таблицы с результатами сравнения того, как свойства Text, Value и Value2 возвращают число, дату и текст.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

Sub Primer3()

‘Присваиваем ячейкам всей таблицы общий формат на тот

‘случай, если формат отдельных ячеек ранее менялся

Range(«A1:E4»).NumberFormat = «General»

‘добавляем сетку (границы ячеек)

Range(«A1:E4»).Borders.LineStyle = True

‘Создаем строку заголовков

Range(«A1») = «Значение»

Range(«B1») = «Код формата» ‘формат соседней ячейки в столбце A

Range(«C1») = «Свойство Text»

Range(«D1») = «Свойство Value»

Range(«E1») = «Свойство Value2»

‘Назначаем строке заголовков жирный шрифт

Range(«A1:E1»).Font.Bold = True

‘Задаем форматы ячейкам A2, A3 и A4

‘Ячейка A2 — числовой формат с разделителем триад и двумя знаками после запятой

‘Ячейка A3 — формат даты «ДД.ММ.ГГГГ»

‘Ячейка A4 — текстовый формат

Range(«A2»).NumberFormat = «# ##0.00»

Range(«A3»).NumberFormat = «dd.mm.yyyy»

Range(«A4»).NumberFormat = «@»

‘Заполняем ячейки A2, A3 и A4 значениями

Range(«A2») = 2362.4568

Range(«A3») = CDate(«01.01.2021»)

‘Функция CDate преобразует текстовый аргумент в формат даты

Range(«A4») = «Озеро Байкал»

‘Заполняем ячейки B2, B3 и B4 кодами форматов соседних ячеек в столбце A

Range(«B2») = Range(«A2»).NumberFormat

Range(«B3») = Range(«A3»).NumberFormat

Range(«B4») = Range(«A4»).NumberFormat

‘Присваиваем ячейкам C2-C4 значения свойств Text ячеек A2-A4

Range(«C2») = Range(«A2»).Text

Range(«C3») = Range(«A3»).Text

Range(«C4») = Range(«A4»).Text

‘Присваиваем ячейкам D2-D4 значения свойств Value ячеек A2-A4

Range(«D2») = Range(«A2»).Value

Range(«D3») = Range(«A3»).Value

Range(«D4») = Range(«A4»).Value

‘Присваиваем ячейкам E2-E4 значения свойств Value2 ячеек A2-A4

Range(«E2») = Range(«A2»).Value2

Range(«E3») = Range(«A3»).Value2

Range(«E4») = Range(«A4»).Value2

‘Применяем к таблице автоподбор ширины столбцов

Range(«A1:E4»).EntireColumn.AutoFit

End Sub

Результат работы кода:

Сравнение свойств ячейки Text, Value и Value2

В таблице наглядно видна разница между свойствами Text, Value и Value2 при применении их к ячейкам с отформатированным числом и датой. Свойство Text еще отличается от Value и Value2 тем, что оно предназначено только для чтения.


Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой — мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Вопрос  14.  VBA Excel. Объекты, свойства и методы.

Одним из основных понятий VBA является объект. Объект – это то, чем вы управляете с помощью программы на языке VBA, например, форма, кнопка, рабочий лист или диапазон ячеек MS Excel. Каждый объект обладает некоторыми свойствами. Например, форма может быть видимой или невидимой  в данный момент на экране. Другой пример свойства объекта – шрифт для отображения информации в ячейке (объекте) рабочего листа.

Объект содержит также список методов, которые к нему применимы. Методы – это то, что вы можете делать с объектом. Например, показать форму на экране или убрать её можно с помощью методов Show и Hide.

Таким образом, объект – это программный элемент, который имеет свое отображение на экране, содержит некоторые переменные, определяющие его свойства, и некоторые методы для управления объектом. Например, в MS Excel имеется много встроенных объектов:

Range(“Адрес”)

— диапазон ячеек (может включать только одну ячейку).

Cells(i, j)

— ячейка, находящаяся на пересечении i-й строки и j-го столбца рабочего листа MS Excel (i и j – целые числа).

Rows(№ строки)

— строка с заданным номером.

Columns(№ столбца)

— столбец с заданным номером

Sheets(“Имя”)

— лист с указанным именем.

Sheets(№ листа)

— лист с указанным номером.

WorkSheet 

— рабочий лист.

Установка значений свойств – это один из способов управления объектами. Синтаксис установки значения свойства объекта следующий:

Объект. Свойство = Выражение

Основным свойством объектов Cells и Range, является Value (значение), которое, однако, можно не указывать. Например:

Range(“A5:A10”). Value = 0  или  Range(“A5:A10”) = 0 – в диапазон ячеек A5:A10 заносится значение 0.

Cells(2, 4). Value  = n   или  Cells(2, 4) = n – в ячейку, находящуюся на пересечении 2-й строки и 4-го столбца (ячейка с адресом “D2”), заносится значение переменной n.

Синтаксис чтения свойств объекта следующий:

Переменная = Объект. Свойство

Например:

Xn = Cells(1, 2).Value  или Xn = Range(“B1”).Value – переменной Xn присваивается значение  из ячейки B1 текущего рабочего листа.

Синтаксис применения методов к объекту:

Объект. Метод

Например:

Sheets(2).Activate – сделать активным лист с №2.

Sheets(“Диаграмма”).Delete – удалить лист с именем “Диаграмма”.

Range(«A5:A10»).Clear – очистить диапазон ячеек A5:A10.

Range(«A2:B10»).Select –  выделить диапазон ячеек A2:B10.

В MS Excel имеются объекты, которые содержат другие объекты. Например, рабочая книга содержит рабочие листы, рабочий лист содержит диапазон ячеек и т.д. Объектом самого высокого уровня является Application(приложение). Если вы изменяете его свойства или  вызываете его методы, то результат применяется к текущей работе MS Excel. Например:

Application.Quit —  завершение работы с Excel.

Отметим, что точка после имени объекта  может использоваться для перехода от одного объекта к другому. Например, следующее выражение очищает вторую строку рабочего листа Май в рабочей книге Отчет:

Application.Workbooks(«Отчет«).Worksheets(«Май«).Rows(2).Delete

Нужно отметить следующее:

  1.  Можно не писать имя объекта Application, так как это подразумевается по умолчанию.
  2.  При работе с подобъектом уже активизированного объекта нет необходимости указывать содержащий его объект.
  3.  VBA использует некоторые свойства и методы, которые возвращают объект к которому они относятся (это позволяет быстро указывать нужный объект). Примеры таких свойств: ActiveCell (активная ячейка), ActiveSheet (активный лист), ActiveWorkBook (активная рабочая книга). Так, установить значение активной ячейки можно следующим образом:

ActiveCell.Value = » Да».

Вопрос 15. VBA Excel. Ссылки на одиночные объекты и объекты семейств

Семейства объектов

Семейством (Collection) в VBA называется совокупность однотипных объектов. Например, в Excel семейство Worksheets является совокупностью всех рабочих листов — объектов Worksheet — в данной рабочей книге, а семейство Lines — совокупностью прямых линий, нарисованных на данном рабочем листе.

Составляющие семейство отдельные объекты называются элементами семейства. Можно ссылаться на отдельные элементы семейства, указывая в скобках имя конкретного объекта или его индекс — порядковый номер элемента в семействе. Например, оператор

Workbooks(«ПОДПИСКА.xls»).Close

закрывает рабочую книгу под именем ПОДПИСКА.xls.

А вот пример использования индекса элемента семейства. Оператор

ActiveSheet.Lines(1).Select

выделяет первую из имеющихся линий на активном рабочем листе.

Замечание Нумерация элементов в семействе при использовании индексов начинается с единицы.

Хотя семейства представляют собой группы объектов, сами семейства также являются одиночными объектами. Такой собирательный объект-семейство представляет собой всю совокупность входящих в семейство объектов, и имеет собственные свойства и методы, с помощью которых можно изменять разом состояние всех объектов семейства. Например, оператор

ActiveSheet.Lines.Delete

удаляет все нарисованные на активном рабочем листе прямые линии.

Как правило, индивидуальные объекты, являющиеся элементами семейств, имеют гораздо больше свойств и методов, чем соответствующий собирательный объект-семейство. Например, объект-семейство Workbooks в Excel имеет всего пять свойств (Application, Count, Creator, Item, Parent) и четыре метода (Add, Close, Open, OpenText), то время как объект Workbook имеет 59 свойств и 42 метода.

Не все объекты приложений могут группироваться в семейства — для некоторых индивидуальных объектов не существует соответствующих семейств.

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

Семейства объектов

Семейство

Описание

Семейства объектов Excel

Workbooks

Все открытые в настоящий момент рабочие книги. С помощью метода

Open

можно открыть еще одну рабочую книгу. Метод

Add

создает новую рабочую книгу.

Sheets

Включает в себя все листы рабочей книги — как обычные рабочие листы, так и листы диаграмм. Наиболее часто используемые методы —

Add

Copy,

Delete,

Select.

Worksheets

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

Sheets.

В общем случае свойства используются для доступа к содержимому , которое может включать в себя текст ,хранящийся в объекте ,или значение атрибута объекта, а методы — для доступа к функциональным возможностям , под которыми понимается все ,что разрешается делать с содержимым .Но такое различие существует не всегда : в любой модели объектов есть свойства и методы – исключения из данного правила .

Вопрос 16. Объект Range. Назначение и особенности.

ОБЪЕКТ RANGE.

Range


(объект «Диапазон»)

Этот объект позволяет изменять свойства диапазона ячеек, например, используемый шрифт, проверять или изменять содержимое ячеек, вырезать или копировать указанный диапазон, и многое другое. Это наиболее часто используемый в

Excel

объект. Принадлежащий к этому же классу объектов объект

ActiveCell — представляет собой активную в настоящий момент ячейку. Обратите внимание на то, что не существует такого объекта, как

Cell — отдельно взятая ячейка представляет собой частный случай объекта Range.

бъект Range (Диапазон)

Clear

Полностью очищает диапазон (в том числе и форматирование ячеек)

ClearContents

Очищает содержимое ячеек диапазона

ClearFormats

Очищает форматирование ячеек диапазона

Copy

Копирует диапазон в буфер обмена

Offset

Возвращает диапазон с указанным смещением относительно первоначального диапазона

Paste

Вставляет содержимое буфера обмена в диапазон

Select

Выделяет диапазон

Sort

Сортирует значения в диапазоне

Объект RANGE представляет отдельную ячейку, диапазон ячеек, целую строку, или колонку, несколько выделенных областей или трехмерный диапазон. Объект RANGE несколько необычен, поскольку может представлять как одну, так и множество ячеек. Для объекта RANGE не предусмотрен специальный объект-набор, и в зависимости от конкретной ситуации его можно считать либо отдельным объектом, либо набором.

Назначение:

  1.  если вам нужно ввести данные в ячейку или отформатировать ее, то вы должны получить объект Range, представляющий эту ячейку;
  2.  если вы хотите сделать что-то с выделенными вами ячейками, вам необходимо получить объект Range, представляющий выделение;
  3.  если вам нужно просто что-то сделать с группой ячеек, первое ваше действие — опять-таки получить объект Range, представляющий эту группу ячеек.

Пожалуй, самый естественный способ получения ссылки на объект Range — это метод Range. Имеются два вида синтаксиса для применения этого метода. Первый использует один аргумент:

объект.Range(интервал)

где:

объект — это объект типа Worksheet или Range, к которому применяется метод Range. Этот объект может быть опущен, и тогда предполагается, что метод Range применяется к активному рабочему листу — объекту ActiveSheet;

Range(«A1:B10»).ClearContents

Строка, описывающая диапазон, может содержать символы $, задающие абсолютный стиль ссылок, но эти символы игнорируются и никак не влияют на определение диапазона. Если метод применяется к объекту типа Worksheet, то получается абсолютная ссылка на указанный диапазон разделитель списка — запятая «,»). Например, следующий оператор ссылается на диапазон A1:B10 активного рабочего листа и очищает его рабочего листа; если же метод применяется к объекту типа Range, то ссылка считается относительной. Например, если текущая активная ячейка — это ячейка B3, то оператор

Selection.Range(«B1»)

возвращает ячейку C3, поскольку ссылка B1 считается относительной для объекта Range (активной ячейки B3), возвращаемого свойством Selection. В то же время оператор

ActiveSheet.Range(«B1»)

всегда возвращает ячейку B1.

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

Range(«Условия»).Copy

копирует поименованный диапазон «Условия» в буфер обмена.

Другой синтаксис для метода Range использует два аргумента:

объект.Range(ячейка1,ячейка2)

Эти два аргумента представляют собой ссылки на ячейки, определяющие верхний левый и правый нижний углы прямоугольного диапазона ячеек. Такой синтаксис может быть особенно удобен при определении изменяющегося диапазона ячеек, поскольку позволяет независимо формировать координаты верхнего левого и правого нижнего угла.

Вопрос 17. VBA Excel. Использование иерархии объектов Excel

Взаимосвязь объектов ,составляющих приложение вкупе с тем ,как содержимое и функциональные возможности приложения распределяются между объектами, называют иерархией объектов,или моделью объектов.

Каждый объект в иерархии включает в себя не только объекты более низких уровней ,но и их содержимое и функциональность .Чем выше объект в иерархии, тем больше его содержимое и шире функциональные возможности . Например,объект APPLICATION содержит размер окна приложения и позволяет завершить работу приложения,объект WORKBOOK содержит имя файла и формат рабочей книги и позволяет сохранить ее,а объект WORKSHEET содержит имя рабочего листа и позволяет удалить рабочий лист .

Зачастую невозможно добраться до того,что кажется содержимым файла. Например, до значений на рабочем листе Microsoft Excel,пока не пройдешь несколько уровней иерархии объектов ; все дело в том , что это специфическая информация относится к конкретной части приложения .Иначе говоря ,значение в какой-либо ячейке рабочего листа относится только к этой ячейке ,а не ко всем ячейкам рабочего листа ,и поэтому его нельзя хранить непосредственно в объекте WORKSHEET .Таким образом,содержимое и функциональность ,заключенные в объекте ,ограничиваются сферой его действия .

Иерархия объектов VBA приложения Microsoft Excel 

Для того чтобы программно работать с объектами Excel, нужно иметь представление об объектной модели Microsoft Excel. Мы не будем здесь подробно описывать эту модель, поскольку она достаточно сложна, представим только ее основные объекты. 

  1.  Объект Application является экземпляром собственно Microsoft Excel. Применяя к этому объекту различные методы, можно воспользоваться практически любыми командами меню Excel. Объект Application обладает свойствами ActiveWorkbook и 

ActiveSheet, которые указывают на текущие объекты Workbook (рабочая книга) и Worksheet (рабочий лист). Можно указать Excel.Application в качестве значения аргумента <класс> функций CreateObject () и GetObjectO, а также в операторе Dim objPlMH As New <класс>. 

  1.  Основной объект Excel — Workbook (рабочая книга). С помощью этого объекта осуществляется доступ к свойствам и структуре рабочей книги Excel. Объекты workbook — это файлы, которые состоят из нескольких объектов, создаваемых Microsoft Excel: Worksheet (рабочий лист) и Chart (диаграмма). Объекты Worksheet и Chart содержатся В семействах Worksheets и Charts. 
  2.  Объекты Worksheet являются подчиненными по отношению к объекту Workbook и обеспечивают доступ к свойствам и структуре рабочих листов книги Excel. Основным объектом взаимодействия приложений Microsoft Access 2002 и Microsoft Excel 2002 является именно объект Worksheet. Имеется возможность перенести информацию из строк и столбцов объекта Recordset приложения Microsoft Access в ячейки объекта Worksheet приложения Microsoft Excel и наоборот. Если в качестве значения аргумента <класс> функции GetObject() либо в операторе Dim оbj Имя As New <класс> указать Excel.Sheet, то по умолчанию откроется первый объект семейства Worksheets — первый рабочий лист (ActiveSheet) объекта Workbook. 
  3.  Объекты sheet аналогичны объектам Worksheet, но они входят в семейство Sheets, которое включает в себя как объекты Worksheet, так и объекты Chart, представляющие листы диаграмм в рабочей книге. 
  4.  Объект Range — диапазон ячеек рабочего листа Excel. Это могут быть отдельная ячейка, строка, столбец, прямоугольная область рабочего листа или несвязанный (произвольный набор ячеек) или трехмерный диапазон ячеек, включающий ячейки на нескольких рабочих листах. Можно получить либо установить значения диапазона ячеек, определив объект Range. Таких объектов, как ячейка, строка, столбец просто не существует. Именно объект Range со своими свойствами и методами обеспечивает работу как с отдельной ячейкой, так и с их диапазоном. Для ссылки на необходимую группу ячеек можно использовать имя диапазона, состоящего из этих ячеек. Если именованные диапазоны отсутствуют на рабочем листе, можно использовать метод Cells объекта worksheet, чтобы задать координаты ячейки или группы ячеек. Ниже приводятся два способа изменения значения ячейки А1: 

ActiveSheet.Range («Al»).Value = 7 

ActiveSheet.Cells (1,1).Value = 7 

Microsoft Excel предоставляет также многие другие объекты для применения их в качестве объектов приложения сервера, но описанные выше типы являются наиболее часто используемыми в технологии автоматизации с помощью Access VBA. 

Вопрос 18. VBA Excel. Объекты Application, Workbook, Worksheet.

Объект

Описание

Application ( объект «Приложение»)

Этот объект представляет собой само приложение Excel в целом. Он включает в себя глобальные устанавливаемые параметры, такие, например, как используемый стиль ссылок на ячейки или режим проведения вычислений. Кроме того, он включает в себя встроенные функции Excel.

Workbooks ( семейство
«Рабочие книги»)

Объекты этого семейства определяют состояние рабочей книги, например: не является ли она доступной только для чтения; или какой из листов рабочей книги активен в настоящий момент. Принадлежащий к этому семейству объект ActiveWorkbook — это объект, который представляет собой активную в настоящий момент рабочую книгу.

Worksheets

(семейство
«Рабочие листы»)

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

ActiveWorksheet — это объект, который представляет собой активный в настоящий момент рабочий лист.

ОБЪЕКТ APPLICATION.

Большинство свойств объекта APPLICATION управляет внешним видом окна Microsoft Excel или глобальными аспектами поведения этого приложения.Например, если видима строка формул, значение свойства DisplayFormulaBar равна True, а если отключено обновление экрана, то значение свойства ScreenUpdating равно False.

Свойства объекта APPLICATION обеспечивают доступ к «нижестоящим» объектам иерархии (к WINDOWS,WORKBOOKS ).Такие свойства называются аксессорами , они позволяют проходить по иерархии объектов от вершины (APPLICATION ) до объектов более низких уровней (WORKBOOKS и др.).

Некоторые свойства и методы, применимые к объекту APPLICATION, применимы и к объектам,расположенным на более низких уровнях иерархии.Использование подобных свойств или методов на уровне APPLICATION приводит к изменению всех открытых рабочих книг и листов.Например, метод Calculate применим к объектам APPLICATION,WORKBOOK и WORKSHEET. Выражение Application.Calculate приводит к пересчету данных на всех рабочих листах во всех открытых рабочих книгах, а применение этого метода к объектам WORKBOOK или WORCSHEET позволяет соответственно сузить масштабы пересчета.

ОБЪЕКТ WORKBOOK.

Открывая или сохраняя файл в Microsoft Excel, мы фактически открываем или сохраняем рабочую книгу. Поэтому для работы с файлами в Visual Basic используются методы объекта WORKBOOK или набора WORKBOOKS.

ОТКРЫТИЕ РАБОЧЕЙ КНИГИ .

Рабочая книга открывается методом Open. Он всегда применяется для набора WORKBOOKS, ссылку на который можно получить через свойство WORKBOOKS. Вот как выглядит код, открывающий файл Book1.xls(в текущем каталоге) и показывающий значение из ячейки A1 на первом листе данной книги:

Sub OpenBook1()

Set myBook=Workbooks.Open(Filename:=»Book1.xls»)

MsgBox myBook.Worksheets(1).Range(«A1»).Value

End Sub

Заметим, что метод Open возвращает объект WORKBOOK, соответствующий только что открытой книге.

Есть два сравнительно безопасных места хранения рабочих книг, которые можно открыть программно.Первое-папка, где хранится исполняемый файл Microsoft Excel.Второе-папка Library, создаваемая при установке автоматически; она находится на один уровень ниже той, где хранится исполняемый файл Microsoft Excel. Чтобы открыть книгу, хранящуюся в папке, где расположен исполняемый файл, можно использовать свойство Path-оно возвращает строку, определяющую путь к данной папке.

Другое сравнительно безопасное место хранения рабочей книги-папка Library.Чтобы получить строку с путем к этой папке, используйте вместо свойства Path свойства LibraryPath.

СОЗДАНИЕ И СОХРАНЕНИЕ РАБОЧЕЙ КНИГИ.

Создать книгу позволяет метод Add набора WORKBOOKS. Значение, возвращаемое этим методом, присваивают объектной переменной, и тогда мы сможем ссылаться на созданную рабочую книгу в своей программе. При первом сохранении новой книги применяют метод SaveAs, а последующем-метод Save.

ЗАКРЫТИЕ РАБОЧЕЙ КНИГИ.

Для закрытия книги предназначен метод Close объекта WORKBOOK.

Объект Worksheet

У объекта Worksheet — множество важных свойств и методов:

  1.  Cells — одно из наиболее часто используемых свойств объекта Worksheet. Работает точно так же, как и рассмотренное выше одноименное свойство объекта Application — за исключением того, что вам больше не нужно ограничиваться только активным листом. Аналогично работают свойства Columns и Rows.
  2.  EnableCalculation — возможность отключить автоматический пересчет значений ячеек в книге.
  3.  EnableSelection — возможность запретить выделять на листе: все, ничего не запрещать, или разрешить выделять только незаблокированные ячейки.
  4.  Next — возможность получить ссылку на следующий лист в книге. Previous — то же самое для предыдущего листа.
  5.  PageSetup — как и в Word, возможность получить объект PageSetup, при помощи которого можно настроить те же параметры, что и через меню Файл -> Параметры страницы.
  6.  свойство Protection позволяет получить объект Protection, при помощи которого можно запретить пользователю вносить изменения в лист Excel. Настройке параметров защиты также служат и другие свойства, названия которых начинаются на Protection.
  7.  QueryTables — исключительно важное свойство. Оно возвращает коллекцию QueryTables — набор объектов QueryTable, которые, в свою очередь, представляют данные, полученные из внешних источников (как правило, из баз данных).
  8.  Range — самое важное свойство объекта Worksheet. Возвращает объект Range (диапазон ячеек), который в объектной модели Excel занимает примерно такое же место, что и одноименный объект в объектной модели Word. Этот объект будет рассматриваться ниже.
  9.  Type — возможность определить тип данного листа. Обычно используются два типа: xlWorksheet (обычный лист) и xlChart (диаграмма).
  10.  UsedRange — возвращает объект Range, представляющий собой прямоугольную область, включающую все непустые ячейки. Удобно для целей копирования или форматирования.
  11.  Visible — возможность спрятать лист с глаз пользователя (например, если он используется для служебных целей).

Некоторые важные методы объекта Worksheet:

  1.  методы Activate() , Calculate()Copy()Paste()Delete()Move()Evaluate()Select()SaveAs()PrintOut()PrintPreview()Protect()Unprotect()нам уже знакомы . Отличие заключается только в том, что теперь эти методы могут применяться для выбранного вами листа.
  2.  метод PivotTables() возвращает коллекцию очень интересных объектов PivotTable (сводная таблица), которые будут рассматриваться ниже;
  3.  метод Scenarios() возвращает коллекцию Scenarios, состоящую из объектов Scenario (сценарии). Сценарии — это именованные наборы вводных данных, которые можно использовать для проверки различных сценариев (разные суммы продаж, уровни налогов, расходов и т.п.)
  4.  SetBackgroundPicture() — возможность назначить листу фоновое изображение (естественно, желательно, чтобы оно было полупрозрачное — «водяной знак», иначе на его фоне будет трудно читать текст в ячейках).
  5.  ShowAllData() — показать все скрытые и отфильтрованные данные на листе.

Самое важное событие объекта Worksheet — это, конечно, Change. Существует множество практических задач, когда изменение пользователем значения ячейки должно приводить к изменению значения в ячейке другого листа/рабочей книги Excel или даже в базе данных. Другая ситуация, в которой используется это события — сложная проверка вводимого пользователем значения (например, опять-таки через обращение к базе данных). Эта событийная процедура работает со специальным параметром Target — то есть объектом Range, представляющим изменившуюся ячейку. При помощи свойств и методов объекта Range вы можете получить информацию об изменившемся значении, столбце и строке, в котором произошло изменение и т.п.

У объекта Worksheet есть еще два очень удобных события (их сильно не хватает объекту Document в Word). Это — события BeforeRightClick() и BeforeDoubleClick(). Как понятно из названия, первое событие позволяет перехватывать щелчок правой кнопкой мыши по любому месту в листе, а второе — двойной щелчок мышью. При помощи этих событий вы можете назначить свою реакцию (открытие контекстных меню, выдачу предупреждающих сообщений, переход в другой режим работы и т.п.) на действия пользователя.

Вопрос 19. VBA Excel. Элементы управления. Свойства и назначения.

Элементы управления в приложениях VBA

Кнопки управления

Большинство приложений VBA имеет кнопки управления, простым нажатием которых пользователь может выполнять разнообразные действия. Когда пользователь нажимает кнопку, то не только выполняется соответствующее ей действие, но и она сама выглядит так, как будто ее вдавливают, а потом отпускают. При щелчке на кнопке вызывается событие click (Щелчок). Для выполнения определенных действий при щелчке на кнопке в процедуру обработки события click помещается соответствующий код.

Существует много способов «нажать» кнопку управления во время выполнения:

 Использовать мышь, щелкнув на кнопке

 Переместить фокус на кнопку, нажимая клавишу ТаЬ, и затем выбрать эту кнопку, нажав клавишу Spacebar (пробел) или Enter (ввод) .

 Нажать клавишу доступа (Аlt+<подчеркнутая буква в названии клавиши>) к данной для кнопки управления.

 Нажать кнопку управления программным путем, для чего любым способом (вручную с помощью окна свойств или с помощью оператора в программе) установить значение свойства value (Значение) кнопки управления равным True (Истина), а затем с помощью оператора в программе вызвать процедуру обраьотки события click для этой кнопки.

 Если кнопка управления является кнопкой управления по умолчанию , выбрать эту кнопку, нажав клавишу Enter даже если в фокусе в данный момент оказывается другой элемент управления.

 Если кнопка управления no умолчанию является кнопкой отказа (cancel button), то, где бы не находился фокус, выбрать эту кнопку можно, нажав клавишу Esc.

Все эти действия заставляют систему VBA вызывать процедуру обработки события click.

Элементы управления для отображения и ввода текста

Элементы управления Label (Метка) и TextBox (Текстовое поле) применяются для отображения или ввода текста. Метки используются для отображения текста на форме, а текстовые поля — когда необходимо предоставить пользователю возможность вводить текст. Текст в метках можно только читать, тогда как текст в текстовых полях можно редактировать. Назначение элементов управления поясняет табл.

Таблица. Назначение элементов управления для отображения и ввода текста

Элемент управления

Назначение

Текстовое поле (TextBox)

Ввод и отображение текста. Текст может редактироваться (изменяться) пользователем.

Метка (Label)

Отображение не редактируемого текста, например, для обозначения поля на форме или отображения инструкции пользователю

Метки

Элемент управления Label отображает текст, который пользователь не может изменять. Метки можно использовать для идентификации элементов управления, например, текстовых полей и полос прокрутки, не имеющих собственного свойства caption (Надпись). Текст, отображаемый в элементе Label (метка), задается свойством Caption этого элемента. Оно может быть установлено во время разработки в окне Properties или во время выполнения оператором присваивания в программном коде.

По умолчанию надпись — единственная видимая часть элемента управления Label. Однако, если значение свойства BorderStyle установлено равным 1 (это можно сделать во время разработки), то метка появляется вместе с границей, что придает ей вид, похожий на вид текстового поля. Изменить внешний вид метки можно установкой свойств BackColor (цвет фона), BackStyle (Стиль фона), ForeColor (цвет букв) и Font (Шрифт).

Подгонка размеров метки к ее содержимому

Однострочные надписи в метке можно задавать во время выполнения в окне Properties. Но что делать, если необходимо вывести более длинные надписи, или надпись будет меняться во время выполнения? Метки имеют два свойства, которые помогают подгонять их размер для отображения надписей переменной длины. Это свойства AutoSize (авторазмер) и Wordwrap (ПереносСлов).

Свойство AutoSize определяет, следует ли автоматически изменять размер элемента управления, чтобы он соответствовал выводимым данным. Если значение этого свойства равно True, то горизонтальный размер метки увеличивается, чтобы на ней поместилась надпись. Свойство wordwrap увеличивает высоту метки, при этом ее ширина не меняется.

Текстовые поля

Текстовые поля являются гибкими элементами управления и применяются как для получения вводимых пользователем данных, так и для отображения текста. Их не следует использовать для отображения текста, который пользователь не должен изменять, если только значение свойства Locked (Заблокирован) не установлено равным True.

Текст, отображаемый в текстовом поле, управляется свойством Text (Текст). Его можно установить тремя различными способами: во время разработки в окне Properties, во время выполнения из программного кода или во время выполнения на основании данных, введенных пользователем. Текущее содержимое текстового поля можно получить во время выполнения, считывая значение свойства Text.

Многострочные текстовые окна и перенос слов

По умолчанию в текстовом поле отображается одна строка текста, полосы прокрутки не отображаются. Если текст длиннее доступного пространства, будет видна только часть текста. Вид и поведение текстового поля можно изменить, установив значения свойств Multi-Line и scroliBars, которые доступны только во время разработки.

Примечание

Свойство ScrcllEars не следует путать с элементом управления Scroll Bar (Полоса прокрутки), который не присоединяется к текстовым полям и имеет свой собственный набор свойств.

Установка значения свойства MultiLine равным True позволяет текстовому полю принимать и отображать много строк текста во время выполнения. Так как в многострочном текстовом поле нет горизонтальной полосы прокрутки, то оно автоматически управляет переходом на новую строку, если текст не помещается. По умолчанию значение свойства ScroliBars равно None (Нет). Автоматический переход на новую строку избавляет пользователя от необходимости вводить в конце строк символ разрыва строки. Если строка текста длиннее строки текстового поля, то текстовое поле переносит вывод строки на следующую строку.

Символ разрыва строки нельзя вводить в окне Properties во время разработки. В процедуре разрыв строки моделируется вводом символа возврата каретки, за которым следует символ перевода строки (символы с кодами ANSI 13 и 10 соответственно). Можно также использовать константу vbCrLf для ввода комбинации символов возврат каретки/перевод строки. Например, следующая процедура обработки события вводит две строки текста в многострочное текстовое поле (Textl) при загрузке формы:

Sub Fom_Load (}

Textl.Text = «Here are two lines» & vbCrLf & «in a text box» End Sub

Работа с текстом в текстовом поле

Управлять точкой ввода и поведением выделенного фрагмента (selection behavior) в текстовом поле можно с помощью свойств selstart, SelLength и SelText. Эти свойства доступны только во время выполнения.

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

В некоторых случаях, например, в приложениях обработки текстов пользователь предполагает, что новые символы должны появляться после существующего текста. В приложениях ввода данных пользователь предполагает, что новые данные замещают существующие. Свойства SelStart и selLength позволяют модифицировать поведение текстового поля, приспосабливая его к конкретным целям.

Значением свойства selStart является число, которое указывает место вставки в строке текста, причем 0 соответствует крайней левой позиции. Если значением свойства selStart является число, равное или больше, чем число символов в текстовом окне, точка ввода находится сразу за последним символом.

Число, равное значению свойства SelLength, задает ширину точки ввода. Если это число больше 0, то равное ему количество символов, начиная от текущей точки ввода, выбирается и выделяется.

Если пользователь начинает печатать при выделенном блоке текста, то последний будет замещен вводимым текстом. При необходимости можно заменить выделенный текст новым с помощью команды Paste (Вставить) меню Edit (Правка). Значением свойства SelText является строка текста, кото рую можно присвоить во время выполнения и которая заменит выделенный текст. Если такового нет, то в текущую точку ввода будет помещено значение свойства SelText.

Элементы управления, организующие выбор пользователя

В большинстве приложений пользователю предоставляется возможность выбора, начиная от простейшего «да/нет», до сложного выбора из списка, состоящего из сотен возможностей. VBA содержит несколько стандартных элементов управления для организации выбора.

Таблица. Элементы управления для организации выбора

Элемент управления

Возможности

Check boxes (Флажки)

Небольшой набор возможностей выбора, из которых пользователь может выбрать одну или более

Option buttons

Небольшой набор возможностей, из которых пользователь может выбрать только одну

List box (Список)

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

Combo box (Комбинированное окно)

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

Флажки

Флажок показывает, включено или нет определенное условие. В приложении флажки используются, чтобы дать пользователю возможность выбора типа «правда/ложь» или «да/нет». Так как флажки работают независимо друг от друга, пользователь может установить любое их число одновременно.

Группирование возможностей с помощью переключателей

Переключатели предоставляют пользователю выбор из двух или более возможностей. В отличие от флажков, однако, они всегда работают как часть группы: выбор одного из них немедленно сбрасывает все другие переключатели группы. Объединение переключателей в группу означает для пользователя, что он может выбрать одну и только одну возможность из заданного набора.

Создание групп переключателей

Все переключатели, размещенные непосредственно на форме (т- е. не внутри рамки (frame) или графического окна (picture)), составляют одну группу. Если необходимо создать дополнительные группы переключателей, некоторые из них надо поместить внутрь рамок или графических окон.

Все переключатели внутри данной рамки составляют отдельную группу, то же само относится и к переключателям в графическом окне. При создании отдельной группы переключателей всегда сначала следует создать рамку или графическое окно, а затем поверх них- переключатели.

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

Для группирования элементов управления с помощью рамки следует:

1. Выбрать элемент управления Frame (Рамка) на Панели элементов управления (Toolbox), нарисовать рамку и поместить ее на форму.

2. Выбрать переключатель на Панели элементов управления и нарисовать его внутри рамки.

3. Повторить шаг 2 для остальных переключателей, добавляемых в группу.

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

Примечание

Чтобы сгруппировать существующие элементы управления, следует выбрать все элементы, которые будут составлять группу, вырезать их и вставить в рамку или графическое окно.

Контейнеры для элементов управления

Элементы управления являются независимыми объектами, однако между ними и формами существуют отношения подчиненности (parent and child relationships).

Для понимания идеи контейнеров необходимо четко осознавать, что все элементы управления являются подчиненными по отношению к форме, на которой они нарисованы. Фактически большинство элементов управления поддерживает свойство parent (Родитель) в режиме «только чтение» (readonly), т. е. значением этого свойства является форма, на которой расположен элемент управления, и это значение невозможно изменить. Положение элемента управления ограничено родительской формой, по отношению к которой он является подчиненным. Свойства Left и тор элемента управления связаны с родительской формой, и поэтому элемент управления нельзя переместить за границы этой формы. Перемещение контейнера также перемещает и элементы управления, и не изменяет значений свойств Left и тор элемента управления.

Выбор переключателей

Переключатель можно выбрать:

— Щелчком на нем кнопкой мыши во время выполнения

— Клавишей <ТаЬ> выбрать группу переключателей и затем клавишами со стрелками выбрать переключатель в группе

— Установив значение его свойства value равным True в программном коде: optChoice.Value = True

— С помощью клавиши быстрого доступа, определенной в надписи метки

Сделать переключатель в группе переключателем по умолчанию можно во время разработки. Для этого надо установить значение его свойства value равным True. Он остается выбранным, пока другой переключатель не будет выбран пользователем или программно.

Можно сделать переключатель недоступным, установив значение его свойства Enabled (Доступный) равным False. При выполнении программы такой переключатель выделен серым цветом, и это означает, что он не доступен пользователю.

Комбинированные окна и списки

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

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

По сравнению с другими элементами управления, которые содержат одно значение, например, значение свойства caption метки или значение свойства Text текстового поля, списки и комбинированные окна содержат набор значений. Для них существуют встроенные методы добавления, удаления и получения значений из этого набора во время выполнения. Программный код для добавления нескольких элементов в список с именем Listi мог бы выглядеть следующим образом:

Listl.Addltem «Paris» Listl.AddItem «New York» Listl.AddICem «San Francisco»

Списки и комбинированные окна — это эффективный способ представления большого числа вариантов выбора для пользователя в ограниченном пространстве на форме.

Полосы прокрутки как устройства ввода

В основном полосы прокрутки используются в текстовых полях или окнах, но иногда их применяют в качестве устройств ввода. Полосы прокрутки показывают текущую позицию на масштабной линейке, поэтому их можно использовать самостоятельно для управления вводом в программу, например, регулировать цветовую палитру в картинке или уровень громкости. Элементы управления HScrollBar (Горизонтальная полоса прокрутки) и VScrollBar (Вертикальная полоса прокрутки) функционируют независимо от других элементов управления и имеют собственные наборы событий, свойств и методов. Элементы управления «Полоса прокрутки» — это не то же самое, что встроенные полосы прокрутки, присоединяемые к текстовым полям, спискам, комбинированным окнам.

Руководящие принципы построения интерфейса Windows теперь предлагают применять полосы-регуляторы (slider controls) вместо полос прокрутки (scroll bars). Примеры регуляторов можно увидеть в панели управления Windows 95. Элемент управления «Регулятор» в стиле Windows 95 включен в версии VBA Professional и Enterprise.

Графические элементы управления. Отображение картинок и графики

В состав VBA включен объект для работу с графикой: image (Изображение).

Примечание

Объекты Form также имеют свойство Picture, которое можно установить для отображения картинки непосредственно в виде фона (заднего плана) формы.

Для отображения или замены картинки во время выполнения следует установить значение свойства picture при помощи функции LoadPicture. Ей передается только имя (с необязательным путем) файла картинки, и далее эта функция управляет деталями загрузки и отображения картинки:

picMain.Picture = LoadPicture(«VAHGOSH.BMP»)

Объект picture имеет свойство AutoSize, которое, если его значение равно True, автоматически изменяет размеры окна вывода картинки, чтобы оно соответствовало размерам выводимой картинки. Следует быть очень внимательным при разработке формы, если ее свойство AutoSize равно True. Размеры окна вывода картинки изменяются независимо от других элементов управления на форме. В результате картинка может, например, закрыть другие элементы управления. Во время разработки следует протестировать вывод каждой картинки, которую предполагается использовать в приложении.

Графическое окно в качестве контейнера

Графическое окно может также выполнять функции контейнера для других элементов управления. Как и в случае с рамкой (frame control) можно поместить другие элементы управления в графическое окно. Помещенные элементы управления будут перемещаться вместе с графическим окном, а их свойства тор и Left будут подчинены ему, а не форме,

Обыкновенно графическое окно в качестве контейнера используют для того, чтобы создать панель инструментов или строку состояния. Туда можно поместить элементы управления Image, чтобы они выступали в качестве кнопок, или добавить метки для отображения сообщений о состоянии. Устанавливая значение свойства Align (Выровнять) равным тор (Верх), Bottom (Низ), Left (Лево) или Right (Право) можно «прикрепить» графическое окно к соответствующему краю формы.

Элемент управления Image

Картинки загружаются в объект image: во время разработки — назначением имени файла и пути свойству picture, во Время выполнения — посредством функции LoadPicture.

При изменении размеров элементы управления Image и Picture ведут себя по-разному. Установка значения свойства Autosize объекта picture равным True приводит к тому, что размеры Графического окна изменяются в соответствии с размерами выводимой картинки; если значение этого свойства равно False, то картинка усекается (видна только ее часть). Объект Image не имеет свойства Autosize, а обладает свойством Stretch (Растягивание). Присвоение этому свойству значения False (значение по умолчанию) приводит к тому, что размеры элемента управления изменяются в соответствии с размерами картинки. Если свойство stretch равно True, то размеры картинки изменяются до размеров элемента управления Image, что может привести к искажению картинки при ее отображении.

Создание кнопок

Объект image распознает событие click, что предоставляет удобный способ создания кнопок с картинками вместо кнопок с надписями. Объединение нескольких элементов управления Image в горизонтальном направлении вверху экрана (обычно внут ри графического окна) в группу позволяет создавать панели инструментов приложения.

Примечание

В отличие от кнопок управления, элементы управления image не вдавливаются, если на них выполняется щелчок.

Другие элементы управления

В Панель элементов управления VBA включены несколько других стандартных элементов управления. Некоторые из них полезны для работы с большим объемом данных, содержащихся во внешних базах данных. Другие полезны для доступа к файловой системе Windows. Третьи элементы управления не подходят ни под одну из категорий, однако достаточно полезны при разработке приложений.

В приложениях VBA можно использовать элементы управления АсtiveX, называвшихся ранее элементами управления OLE, точно таким же образом, как используются и стандартные элементами управления. В версии VB Professional и Enterprise включены некоторые элементы управления ActiveX, а также возможность построения собственных элементов управления программиста. Дополнительные элементы управления ActiveX для любых вообразимых целей можно приобрести у многочисленных поставщиков этого продукта.

Остальные элементы управления

В VBA также включены некоторые другие полезные элементы управления, которые, однако, не относятся ни к одной из рассмотренных выше групп;

— Элемент управления Timer (Таймер) можно использовать для создания в приложении события через повторяющийся интервал времени. Это удобно для выполнения кода без взаимодействия с пользователем.

— Элемент управления OLE Container (Контейнер OLE) обеспечивает легкий способ добавления в приложение возможностей связывания (linking) и внедрения (embedding). Посредством этого элемента управления можно обеспечить доступ к выполняемым функциям любого приложения, поддерживающего OLE технологию, например Microsoft Excel, Word и многих других.

— Элемент управления Common dialog (Общий диалог) добавляет в приложение встроенные диалоговые оюна (built-in dialog boxes) для выбора файлов, цветов, шрифтов, функций печати.

Что такое фокус?

Объект, имеющий фокус, может получать вводимую пользователем с помощью мыши и клавиатуры информацию. В системе Microsoft Windows одновременно могут выполняться несколько приложений, но только у приложения, имеющего фокус, будет активный заголовок окна (active title bar) (выделен повышенной яркостью), и только оно может взаимодействовать с пользователем. На форме приложения VBA с несколькими полями ввода только поле ввода, имеющее фокус, будет отображать вводимый с клавиатуры текст.

Когда объект получает или теряет фокус, происходят соответственно события GotFocus и LostFocus. Формы и большинство элементов управления поддерживают эти события.

Объекту можно передать фокус несколькими способами:

— Выбрать объект с помощью мыши во время выполнения

— Выбрать объект с помощью клавиши доступа во время выполнения

— Из программного кода с помощью метода set Focus

Всегда можно определить, имеет ли объект фокус. Например, когда кнопка управления имеет фокус, обрамление ее надписи отображается с повышенной яркостью.

Объект может получить фокус, только если его свойства Enabled (Разрешено) и visible (Видимый) установлены в True. Свойство Enabled (Разрешено) позволяет объекту реагировать на инициированные пользователем события, например, ввод с клавиатуры и нажатие кнопок мыши. Свойство visible (Видимый) определяет, виден ли объект на экране-

Событие Validate элементов управления

Элементы управления имеют событие validate (Проверка достоверности), которое происходит перед тем, как элемент управления теряет фокус. Однако это событие возникает, только если свойство CausesValidation элемента управления перед получением фокуса имеет значение True. Событие Validate происходит перед потерей фокуса, поэтому во многих случаях оно более подходит для проверки достоверности данных (data validation), чем событие LostFocus.

Элементы управления, которые не могут получить фокус

Некоторые элементы управления не могут получать фокус. К ним относятся облегченные графические элементы управления:

— Frame (Рамка)

— Image (Изображение)

— Label (Метка)

Кроме этих элементов управления не могут получить фокус и неотображаемые элементы управления.

Установка последовательности перехода

Последовательность перехода (tab order) — это последовательность перехода от одного элемента управления к другому при нажатии клавиши ТаЬ. У каждой формы своя последовательность перехода. Обычно она соответствует последовательности создания элементов управления.

Пусть создаются два поля ввода, Textl и Text2, а затем — кнопка управления Commandl. При запуске приложения поле ввода Textl имеет фокус.

Нажатие клавиши Tab перемещает фокус между элементами управления в той последовательности, в которой они создавались.

Для изменения последовательности перехода необходимо установить свойство TabIndex элемента управления, которое определяет его позицию в последовательности перехода при нажатии клавиши Таb. По умолчанию значение свойства Tabindex элемента управления, созданного на форме первым, равно 0, элемента, созданного вторым — 1 и т. д. При изменении позиции элемента управления в последовательности переходов VBA автоматически перенумеровывает позиции других элементов управления, отражая вставку в другую позицию или удаление из последовательности перехода элемента управления. Например, если кнопка управления command1 в предыдущем примере становится первой в последовательности переходов, то значения свойства TabIndex других элементов управления автоматически перенумеровываются.

Наибольшее значение свойства Tabindex всегда на единицу меньше числа элементов в последовательности перехода, так как нумерация начинается с нуля. Даже если случайно значение свойства Tabindex окажется больше числа элементов управления, VBA переустановит это значение так, чтобы оно было на единицу меньше числа элементов управления.

Примечание

Элементы управления, которые не могут получить фокус, как и недоступные и невидимые элементы управления, не имеют свойства Tabindex и не могут быть включены в последовательность перехода. Когда пользователь нажимает клавишу <ТаЬ>, эти элементы управления пропускаются.

Удаление элемента управления из последовательности перехода

Обычно последовательное нажатие клавиши Таb во время выполнения выбирает каждый элемент управления из заданной последовательности перехода. Можно убрать элемент управления из последовательности перехода, установив значение его свойства TabStop равным False (или 0).

Элемент управления, свойство TabStop которого равно False, сохраняет свою позицию в последовательности перехода, хотя при переходе от одного элемента управления к другому по клавише Таb он пропускается.

Примечание

Группа переключателей имеет один табуляторный ограничитель (tab stop) Для выбранной кнопки, т.е. кнопки, значение свойства Value которой равно True, значение свойства TabStop автоматически равно True, тогда как значение этого свойства для других кнопок равно False.

Вопрос 20. VBA Excel. Управляющие структуры языка

Управляющие конструкции

Как и во всех других языках программирования, в VBA имеются различные управляющие конструкции, позволяющие изменять порядок выполнения программы. Если управляющие конструкции не используются, происходит последовательное выполнение операторов языка программирования, начиная с самого первого и кончая последним. Хотя в некоторых самых простых случаях этого и бывает достаточно, обычно все-таки требуется изменять порядок исполнения операторов при выполнении определенных условий, либо пропуская выполнение некоторых операторов, либо, наоборот, многократно повторяя их. Оказывается, для реализации любых алгоритмов достаточно иметь только два вида конструкций управления: ветвления и циклы.

Ветвления

Управляющие конструкции ветвления позволяют проверить некоторое условие и, в зависимости от результатов этой проверки, выполнить ту или иную группу операторов. Для организации ветвлений в VBA используются различные формы оператора ветвления If и-оператор выбора Select Case.

Простейшая, краткая форма оператора if используется для проверки одного условия, а затем либо выполнения, либо пропуска одного оператора или блока из не скольких операторов. Краткая форма оператора ветвления if может иметь как однострочную, так и блочную форму. В одну строку краткая форма If может быть записана так:

If <условие> Then <оператор>

В блочной форме краткое ветвление выглядит следующим образом:

If <условие> Then

<оператор1>

<оператор2>

End If

В качестве условия можно использовать логическое выражение, возвращающее значение True или False, или любое арифметическое выражение. Если применяется арифметическое выражение, то нулевое значение этого выражения эквивалентно логическому значению False, а любое ненулевое выражение эквивалентно True. В том случае, когда условие возвращает значение False, оператор или блок операторов, заключенных между ключевыми словами Then и End if и составляющих тело краткого оператора ветвления, не будет выполняться.

Замечание
Обратите внимание, что при записи краткого оператора ветвления в одну строку ключевые слова End if не используются.

Полная форма оператора if используется в тех случаях, когда имеются два различных блока операторов и по результатам проверки условия нужно выполнить один из них. Такая форма if не может записываться в одну строку и всегда имеет блочную форму записи:

If <условие> Then

<блокОператоров1> Else

<блокОператоров2>

End If

Если условие истинно, выполняется первый блок операторов, заключенный между ключевыми словами Then иElse, а в противном случае – второй блок, заключенный между ключевыми словами Else и End If.

Совет
Для того чтобы текст вашей процедуры был понятным и удобным для восприятия, рекомендуется делать отступы для групп операторов так, как это указано при описании их синтаксиса. В VBA предусмотрено удобное средство изменения отступов – нажатие на клавишу Таb увеличивает отступ вправо, нажатие комбинации клавиш SHIFT + Tab уменьшает этот отступ.

Иногда приходится делать выбор одного действия из целой группы действий на основе проверки нескольких различных условий. Для этого можно использовать цепочку операторов ветвления If…Then… Elseif:

If <условие1> Then

<блокОператоров1>

Elseif <условие2> Then

<блокОператоров2>

Elseif <условие3> Then

<блокОператоров3>

Elseif <условиеN> Then

<блокОператоровN> Else

<блокОператоров_Еlsе>

End If

Такие цепочки операторов If…Then…Elseif обладают большой гибкостью и позволяют решить все проблемы, однако если выбор одной из нескольких возможностей все время основан на различных значениях одного и того же выражения, гораздо удобнее использовать специально предназначенный для этого оператор выбора Select Case, имеющий следующий синтаксис:

Select Case <проверяемоеВыражение>

Case <списокЗначений1>

<блокОператоров1>

Case <списокЗначений2>

<блокОператоров2>

Case <списокЗначени3>

<блокОператоров3>

Case Else

<блокОператоровЕlsе>

End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа, например логическое, числовое или строковое.

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

Эти элементы списка выражений могут иметь одну из следующих форм:

  1.  <выражение> в данном случае проверяется, совпадает ли значение проверяемого выражения с этим выражением;
  2.  <выражение1> То <выражение2> в этом случае проверяется, находится ли значение проверяемого выражения в указанном диапазоне значений;
  3.  Is <логическийОператор> <выражение> в третьем случае проверяемое выражение сравнивается с указанным значением с помощью заданного логического оператора; например, условие is >= 10 считается выполненным, если проверяемое значение не меньше 10.

Если хотя бы один из элементов списка соответствует проверяемому выражению, то выполняется соответствующая группа операторов и на этом выполнение оператора Select Case заканчивается, а остальные списки выражений не проверяются, т. е. отыскивается только первый подходящий элемент списков выражений. Если же ни один из элементов всех этих списков не соответствует значению проверяемого выражения, выполняются операторы группы Else, если таковая присутствует.

Циклы

В VBA имеется богатый выбор средств организации циклов, которые можно разделить на две основные группы –циклы с условием Do… Loop и циклы с перечислением For…Next.

Циклы типа Do… Loop используются в тех случаях, когда заранее неизвестно, сколько раз должно быть повторено выполнение блока операторов, составляющего тело цикла. Такой цикл продолжает свою работу до тех пор, пока не будет выполнено определенное условие. Существуют четыре вида циклов Do…Loop, которые различаются типом проверяемого условия и временем выполнения этой проверки. В табл. 13.2 приводится синтаксис этих четырех конструкций.

Таблица 13.2. Синтаксис операторов цикла Do

Конструкция

Описание

Do While <условие> <блокОператоров> Loop

Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие выполняется (то есть имеет значение True), иными словами, в этой конструкции указывается условие продолжения работы цикла

Do Until <условие> <блокОператоров> Loop

Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, если это условие еще не выполнено, и прекращает работу, когда оно станет истинным, иными словами, в этой конструкции указывается условие прекращения работы цикла

Do <блокОператоров> Loop Until <условие>

Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл продолжает свою работу, если это условие еще не выполнено, а когда оно станет истинным, цикл прекращает работу, иными словами, в этой конструкции указывается условие прекращения работы цикла

Do <блокОператоров> Loop While <условие>

Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл продолжает свою работу, пока это условие остается истинным, иными словами, в этой конструкции указывается условие продолжения работы цикла

Имеется также две разновидности оператора цикла с перечислением For…Next. Очень часто при обработке массивов, а также в тех случаях, когда требуется повторить выполнение некоторой группы операторов заданное число раз, используется цикл For…Next со счетчиком. В отличие от циклов Do…Loop, данный тип цикла использует специальную переменную, называемую счетчиком, значение которой увеличивается или уменьшается при каждом выполнении тела цикла на определенную величину. Когда значение этой переменной достигает заданного значения, выполнение цикла заканчивается.

Синтаксис этого вида цикла выглядит, следующим образом (в квадратные скобки заключены необязательные элементы синтаксической конструкции):

For <счетчик> = <начальноеЗначение>

То <конечноеЗначение>

[Step <приращение>]

<блокОператоров> Next [<счетчик>]

Несколько пояснений к приведенному описанию:

  1.  <приращение> – может быть как положительным, так и отрицательным числом. Если использовать отрицательное приращение, то конечное значение должно быть меньше либо равно начальному значению для того, чтобы тело цикла выполнилось хотя бы один раз;
  2.  после завершения работы цикла For…Next переменная, которая использовалась в качестве счетчика, получает значение, обязательно превосходящее конечное значение в том случае, если приращение положительно, и строго меньшее конечного значения, если приращение отрицательно;
  3.  если начальное и конечное значения совпадают, тело цикла выполняется лишь один раз.

ассмотрим еще одну разновидность цикла For…Next, часто использующуюся в VBA при обработке объектов, составляющих массив или семейство однородных объектов. В этой разновидности цикла счетчик отсутствует, а тело цикла выполняется для каждого элемента массива или семейства объектов. Вот синтаксис такого цикла:

For Each <элемент> In <совокупность>

<блокОператоров>

Next [<элемент>]

Где:

  1.  <элемент> – это переменная, используемая для ссылки на элементы семейства объектов;
  2.  <совокупность> – это имя массива или семейства.

Приведем пример использования подобного цикла. Следующая процедура предназначается для выдачи на печать списка всех полей для всех таблиц текущей открытой базы данных:

Public Sub EnumerateAllFields()

Dim MyBase As Database

Dim tdf As TableDef, fid As Field

Set MyBase = CurrentDb()

For Each tdf In MyBase.TableDefs

Debug.Print «Таблица: » & tdf.Name

For Each fid In tdf.Fields

Debug.Print » Поле: » & fid.Name Next fid

Next tdf

Set MyBase = Nothing

End Sub

Итак, в операторах Dim мы объявили переменную MyBase как объект «база данных DАО», переменные tdf и fid – как определение таблицы и поле таблицы, соответственно. Оператор Set назначает переменной MyBase текущую открытую базу данных. Далее для каждого определения таблицы выполняется вывод на печать названия таблицы, а затем вложенный цикл такого же типа печатает названия всех ее полей.

Приведем еще один пример использования подобного оператора цикла For Each…Next для обработки всех элементов многомерного массива. Пусть у нас имеется трехмерный числовой массив из 1000 элементов (размерами 10x10x10), который мы хотим заполнить случайными вещественными числами в диапазоне от 0 до 1. Если бы мы применяли обычные циклы For…Next со счетчиками, используя счетчики в качестве индексов элементов массива, то для решения этой задачи потребовалось бы написать три вложенных цикла For… Next:

Dim tArray{9, 9, 9) As Single

Dim i%, j%, k%

Randomize

For i=0 To 9

For j=0 To 9

For k=0 To 9

tArray(i, j, k) = Rnd()

Next k

Next j

Next i

На самом же деле достаточно всего одного цикла, если вместо циклов со счетчиками воспользоваться циклом For Each… Next:

Dim tArray(9, 9, 9) As Single

Dim elem As Variant

Randomize

For Each elem In tArray

elem = Rnd()

Next

Еще раз порекомендуем использовать отступы при записи циклов, так же, как и при записи операторов ветвления.

Выход из циклов и процедур

Обычно выполнение процедуры заканчивается после выполнения ее последнего оператора, а выполнение цикла – после нескольких выполнений тела цикла, когда достигнуто условие завершения его работы. Однако в некоторых случаях бывает нужно прекратить выполнение процедуры или цикла досрочно, избежав выполнения лишних операторов процедуры или лишних повторений цикла. Например, если при выполнении процедуры произошла ошибка, которая делает продолжение ее работы бессмысленным, можно выполнить команду немедленного выхода из процедуры. Другой пример: если цикл For…Next используется для поиска нужного значения в массиве, то после того, как нужный элемент массива найден, нет смысла продолжать дальнейший перебор элементов массива.

Досрочный выход из управляющей конструкции можно осуществить с помощью одного из операторов Exit. Для досрочного выхода из циклов Do…Loop используется оператор Exit Do, а для выхода из циклов For – оператор Exit For. Для досрочного выхода из процедур и функций применяются операторы Exit Sub и Exit Function соответственно. Следует, однако, отметить, что хотя использование оператора Exit может быть вполне оправданным, необходимо избегать излишнего употребления этого оператора, прибегая к нему только в крайних случаях. Излишне частое употребление данного оператора затрудняет понимание написанного текста программы и его отладку.

Например, в следующем цикле поиска For…Next используется оператор Exit For:

ub = Ubound(dArray)

fFound = False

For i=LBound(dArray) To ub

If dArray(i) = searchValue Then

fFound = True

Exit For

End If Next

Однако такого применения оператора Exit вполне можно избежать. Вот пример подобного же цикла поиска, но без использования Exit:

i = Lbound(dArray)

ub = Ubound(dArray)

fFound = False Do

If dArray(i) = searchValue

Then fFound = True

i = i + 1

Loop Until (i > ub) Or fFound

На этом мы заканчиваем краткое знакомство с основными понятиями языка VBA. Если читателю требуется более подробное и строгое изложение синтаксиса языка, то лучше обратиться к специальным книгам, посвященным этому языку. В других разделах настоящей главы, а также в последующих главах мы покажем, как VBA используется при разработке приложений, и познакомим с теми его особенностями, которые специфичны именно для Access. Это касается в первую очередь объектов Access и объектов данных.

Понравилась статья? Поделить с друзьями:
  • Свойства объекта worksheet в excel
  • Свойства объекта range vba excel
  • Свойства объекта application vba excel
  • Свойства книги vba excel
  • Свойства изображения в word