Самый распространенный способ получить объектRange ? сделать ссылку в стиле А1 или по имени диапазона, как показано в таблице:
Чтобы:
Напишите:
Изменить значение в ячейке А1на листе Sheet1
Worksheets("Sheet1").Range( "А1") .Value = 3
Установить формулу для ячейки Bl на активном листе
Range("B1") .Formula = "=5-10*RAND()"
Присвоить значение всем ячейкам диапазона С1:ЕЗ на активном листе
Range("C1:E3").Value = 6
Очистить содержимое диапазона А1:ЕЗ на активном листе
Range("A1", "E3").ClearContents
Установить полужирное начертание шрифта для диапазона myRange (имя на уровне книги)
Range("myRange"). Font. Bold = True
Присвоить значение всем ячейкам диапазона yourRange (имя на уровне листа)
Range( "Sheetl!yourRange"). Value = 3
Присвоить объектной переменной ссылку на диапазон
Set objRange = Range( "myRange")
Помните, что выражения типа Range( "С1 : Е3" ) . Value = 6 подразумевают обращение к свойствуRange активного листа. Если Вы попытаетесь выполнить это выражение в тот момент, когда активен лист диаграммы, произойдет ошибка периода выполнения (с кодом 1004).
Еще одна причина ошибок ? использование свойстваRange в качестве аргумента другого метода без полного описания объекта Worksheet, к которому оно относится. В следующем примере, который должен был бы сортировать диапазон ячеек на листе Sheet1, тоже возникает ошибка периода выполнения 1004:
Sub SortRange() Worksheets( "Sheet1 ").Range("A1:B10") .Sort key1 :=Range("A1" ), order1 :=xlDescending End Sub
Такую ошибку обнаружить труднее, поскольку строка, из которой вызывается метод Sort, сама по себе корректна. Ошибка возникает во второй строке, где указан аргумент key1. Этот код будет работать правильно, если активным листом является Sheet1, но приведет к ошибке при обращении к нему из другого листа или модуля. Во избежание подобных ошибок используйте при задании аргумента свойство Worksheets:
Sub SortRange() Worksheets("Sheet1").Range("A1 :B10").Sort key1 : Worksheets ("Sheet1") .Range("A1"), order1 :=xlDescending End Sub
Числовые индексы строк и колонок
Получить нужную ячейку можно и так: указать индексы строки и колонки, на пересечении которых она находится. Первым задается индекс строки, за ним следует индекс колонки.
Чтобы:
Напишите:
Изменить значение в ячейке А1 на листе Sheet1
Worksheets( "Sheet1").Cells(1, 1). Value = 3
Задать формулу для ячейки Bl на активном листе
Cells(1, 2) .Formula - "=5-10*RAND()
Установить объектную переменную
Set objRange = Worksheets( "Sheetl") .Cells(1, 1)
Числовые индексы строк и колонок очень удобны при обращении к ячейке по значению счетчика цикла. Например, следующий код перебирает все ячейки диапазона А1:D10 на листе Sheet1. Если какая-нибудь ячейка содержит значение 0.01, оно заменяется нулем.
Sub RoundToZero() For rwIndex = 1 to 4 For colIndex = 1 to 10 If Worksheets("Sheet1").Cells(rwIndex, colIndex) < .01 Then Worksheets("Sheet1").Cells(rwIndex, colIndex).Value = 0 End If Next colIndex Next rwIndex End Sub
Следующий пример иллюстрирует простой и быстрый способ вывода на экран группы элементов в виде многоколоночного списка. Программа создает новый лист и присваивает ссылку на него объектной переменной newSheet. Затем создает список всех имен в активной книге и отображает связанные с ними формулы.
Sub ListNames() Set newSheet = Worksheets.Add i = 1 For Each nm In ActiveWorkbook.Names newSheet.Cells(i, 1).Value = nm.Name newSheet.Cells (i, 2).Value = " ' " & nm.RefersTo i = i + 1 Next nm newSheet.Columns("A:B") .AutoFit End Sub
Свойство Offset
Весьма часто возникает необходимость обратиться к диапазону ячеек, который отстоит от другого диапазона на определеннее число строк и колонок. СвойствоOffset объектаRange принимает аргументыRowOffsetиColumnOffset и возвращает новый диапазон. В следующем примере программа определяет тип данных в каждой ячейке из диапазона A1 : A10 и перечисляет эти типы в колонке, расположенной справа от исходных ячеек:
Sub ScanColumn() For Each с In Worksheets("Sheet1").Range("A1 :A10").Cells If Application.lsText(c.Value) Then c.0ffset(0, 1).Formula = "Text" Elself Application.lsNumber(c.Value) Then c.0ffset(0, 1).Formula = "Number" Elself Application.IsLogical(c.Value) Then c.0ffset(0, 1).Formula = "Boolean" Elself Application.lsError(c.Value) Then c.0ffset(0, 1).Formula = "Error" Elself с .Value = "" Then c.0ffset(0, 1).Formula = "(blank cell)" End if End c End Sub