Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Свойства CurrentRegion и UsedRange



 

Эти два свойства очень полезны, когда программа работает с диапазонами, размерами которых Вы не можете управлять. Текущий регион (current region) -это диапазон ячеек, ограниченный пустыми строками и колонками или сочетанием пустых строк, пустых колонок и границ рабочего листа.

CurrentRegion ? свойство объектаRange. На листе может быть несколько текущих регионов ? все зависит от того, к какому объектуRange Вы обращаетесь.

Допустим, лист Sheet1 содержит список, для которого Вы хотите установить формат чисел. Единственное, что известно об этом списке, ? он начинается с ячейки А1; число строк и колонок в нем Вы не знаете. В следующем примере показано, как отформатировать такой список через свойствоCurrentRegion:

Sub FormatRange()
Set myRange = Worksheets("Sheet1").Range("A1").CurrentRegion
myRange.NumberFormat = "0.0"
End Sub

 

Использованный диапазон (used range) ограничен левой верхней и правой нижней заполненными ячейками, наиболее удаленными друг от друга. В этом диапазоне содержатся все заполненные ячейки листа, а также расположенные между ними пустые ячейки. На листе может быть только один такой диапазон, иUsedRange является свойством объектаWorksheet,а не Range.

Пусть активный лист содержит результаты каких-то измерений за определенный период времени. В первой колонке использованного диапазона записаны даты, во второй ? время, а в третьей и четвертой ? результаты измерений. Вы хотите написать код, который объединяет пары ?дата-время? в одно значение, преобразует время из GMT (Greenwich Mean Time ? время по Гринвичу) в PST (Pacific Standard Time ? стандартное время Тихоокеанского побережья США) и применяет к полученному значению формат даты. В таблице могут быть пустые строки и колонки. Чтобы получить весь использованный диапазон, включая пустые строки, можно задействовать свойство UsedRange. Вот один из вариантов преобразования и форматирования дат и времени:

 

Sub ConvertDates()
Set myRange = ActiveSheet.UsedRange
myRange.Columns ("C") .Insert
Set dateCol = myRange.Columns("C")
For Each с In dateCol.Cells
If c.0ffset(0, -1).Value <> "" Then
c.FormulaR1C1 = "=RC[-2]+RC[-1]-(8/24)"
End If
Next с
dateCol.NumberFormat = "mrnm-dd-yyyy hh:mm"
dateCol.Copy
dateCol.PasteSpecial Paste.: =xlValues
my Range.Columns( "A:B" ).Delete
dateCol.AutoFit
End Sub

Заметьте: чтобы получить третью колонку в использованном диапазоне, применяется выражение ActiveSheet. UsedRange. Columns( "С"), но на самом листе эта колонка может быть любой по счету ? использованному диапазону могут предшествовать пустые колонки.

Другие свойства и методы объекта Range позволяют строить весьма сложные выражения, возвращающие поддиапазоны (subranges) или наддиапазоны (super-ranges) этого объекта. Среди свойств и методов, обычно применяемых с этой целью, можно отметить Areas, Cells, Columns, EntireColumn, EntireRow, RangeиRows.

Организация циклов для перебора ячеек диапазона

 

Есть несколько способов перебора ячеек диапазона в цикле. Примеры из этого раздела демонстрируют использование с этой целью операторов For Each...Next иDo...Loop.

For Each ? Next
Do ? Loop

Применение свойства Address для отладки кода, работающего с объектом Range

 

У любого объектаRange есть свойствоAddress, которое возвращает адрес ячеек диапазона в виде строки. В следующем примере при отладке процедуры HideColumns используется свойствоAddress:

Sub HideColumns()
Set r = Worksheets( "Sheet1 ").UsedRange
MsgBox r.Address ' только при отладке!
For i = 1 To r.Columns.Count
If i Mod 2 = 0 Then
r.Columns(i).Hidden = True
MsgBox r.Columns(i).Address ' только при отладке!
End If
Next i
End Sub

Окна с сообщениями можно заменить контрольными выражениями (watch expressions). В предыдущем примере можно было бы установить два таких выражения ? r.Address и r.Columns(i).Address ? и понаблюдать за их значениями в окнеImmediate (Проверка). Подробнее об отладке см. главу 14 ?Отладка и обработка ошибок?.

Работа с событиями.


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

Если Вы раньше работали с Visual Basic (Standard, Professional или Enterprise Edition), то событийно-управляемое программирование Вам уже знакомо; большая часть кода, написанная Вами на Visual Basic, вероятно, предназначалась для обработки таких событий, как щелчок кнопки мыши или загрузка формы. Может быть, в Microsoft Excel Вам доводилось использовать события типа OnSheetActivate или OnEntry, запуская макрос при активизации или изменении листа. И это тоже событийно-управляемое программирование. В Microsoft Excel 97 набор событий расширен и в него добавлены процедуры обработки событий, принимающие аргументы.

Microsoft Excel 97 допускает написание процедур обработки событий на уровне листа, диаграммы, книги или приложения. Например, событие Activate происходит на уровне листа, а событие SheetActivate доступно как на уровне книги, так и на уровне приложения. Событие SheetActivate для книги возникает при активизации любого из ее листов, а на уровне приложения ? при активизации любого листа открытых в данный момент книг.

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

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.