умолчанию Excel отображает каждое изменение в рабочей книге, сделанное в ходе выполнения VBA-кода. Это приводит к существенному снижению быстродействия. Для отключения такого режима работы Excel необходимо воспользоваться функцией ScreenUpdating (Обновление экрана) объекта Application:

Application . ScreenUpriatirig = False

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

При использовании свойства Screer.Upcating необходимо явно указывать имя объекта Application. Однако в большинстве случаев свойства объекта Application можно использовать напрямую. Например, свойство ActiveSheet объекта Application относится к рабочему листу или диаграмме, активной в текущий момент (безусловно, в книге, активной сейчас). Для обращения в коде к такому листу вместо записи Application .ActiveSheet можно использовать просто ActiveSheet. Коллекция Workbooks объекта Application содержит все рабочие книги, открытые в данный момент.

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

Workbooks("Сводная статистика продаж.xls").Activate

Конечно же, рабочие листы также являются полноправными объектами. Они принадлежат коллекции Worksheets, и их идентификация должна проводиться таким же образом. Выражение Worksheets ( "ЛистЗ" ) указывает на лист с именем ЛистЗ. Аналогично, отдельный объект Chart для диаграммы, находящейся на отдельном листе, является членом коллекции Charts. Обращение к ней выполняется с помощью выражения вроде Charts ("Parts Chart") . Приемы работы с диаграммами, внедренными в рабочий лист, несколько отличаются, и приемы написания кода для них являются объектом рассмотрения данной книги.

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

Windows("Кривая продаж игрушек.xls")

Если для одной рабочей книги открыто несколько окон, необходимо после имени рабочей книги через двоеточие указать номер окна, например: Windows ("Кривая продаж иг ру ше к.x l s:2").

Использование в коде объектов Range для работы с ячейками

Весьма неожиданно, что в Excel нет объекта Cell (Ячейка). Поэтому при написании кода следует руководствоваться следующим подходом: для указания ячейки в VBA-коде используется объект Range. В Excel объект Range может заключать в себе одну или больше ячеек и даже несколько не непрерывных областей листа.

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

Определение объекта Range

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

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

ActiveSheet.Range("B3")

Worksheets("Sheet 2").Range("M5:S20")

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

Worksheets("Финансовый отчет").Range("Выплата процентов")

Для присвоения диапазону имени непосредственно в самом коде необходимо употребить следующее выражение с использованием функцией свойства Name (Имя):

Range("A3:В4")-Name = "Прайс-лист"

Сокращенная запись. Вследствие частого использования объектов Range, Excel позволяет упускать ключевое слово Range при определении диапазона при записи в А1 -стиле или при записи с использованием имени. Для реализации такого приема ссылку на ячейку или имя диапазона следует заключить в квадратные скобки, как показано в приведенном ниже примере:

ActiveSheet["Al:Z26"]

["Квартальный отчет"]

Свойство Cells объекта Worksheets. Данная техника крайне необходима профессионалам, так как позволяет определять диапазон не путем указания фиксированных адресов ячейки, а на основе переменных. Основная идея состоит в составлении в цифровом виде списка координат строк и столбцов диапазона. Читайте об этом в разделе "Использование свойства Cells для определения диапазона" дальше в данной главе.

Свойство Selection (Выделение). Когда требуется воздействие кода на диапазон, соответствующий выделению пользователя, используется свойство Selection. Читайте об этом в разделе "Работа с выделениями" дальше в данной главе.

Свойство ActiveCell (Активная ячейка). Свойство Active Cell используется для доступа к диапазону, представляющему активную ячейку данного окна. При использовании без спецификатора объекта (что эквивалентно использованию объекта Application), свойство Active Cell ссылается на активное окно:

ValueStorageBi n = ActiveCell.Value

Свойства Rows (Строки) или Columns (Столбцы) объекта Worksheet. Доступ к диапазону, включающему весь столбец или строку, осуществляется с помощью свойств рабочего листа Rows и Columns с использованием номера указываемого столбца или строки (нельзя адресовать столбец через его буквенное обозначение). В следующем примере определяется диапазон, включающий столбец Е, т.е. пятый столбец:

Workbooks("IOU.xls").Worksheets("Sheetshoot out").Column(5)

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

Dim RanGer As Range Set RanGer = Worksheets("Лист1").Range("B12:H13" )

Использование свойств Cells для определения диапазона

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

Вы читаете VBA для чайников
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату