Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование в Excel.doc
Скачиваний:
21
Добавлен:
03.05.2019
Размер:
1.48 Mб
Скачать

3.4.2. Закрытие рабочей книги

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

Sub OpenChangeClose() Dо fName = Application.GetOpenFilename Loop Until fName <> False Set myBook = WorkBooks.Open(Filename:=fName) ' здесь вносим какие-то изменения в myBook myBook.Close savechanges:=False End Sub

3.4.3. Создание и сохранение рабочей книги

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

При первом сохранении новой книги применяйте метод SaveAs, а в последующем — метод Save. Метод GetSaveAsFilename очень похож на метод GetOpenFilename, описанный в предыдущем разделе. Попробуем создать книгу и сохранить ее методом GetSaveAsFilename:

Sub CreateAndSave() Set newBook = Workbooks.Add Do fName = Application.GetSaveAsFilename Loop Until fName <> False newBook.SaveAs Filename :=fName End Sub

3.5. Работа с объектом Range

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

3.6. Строковые ссылки в стиле а1 или имена диапазонов

Самый распространенный способ получить объект 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