2. О чем мы узнаем
Коллекция Workbooks и объект
Workbook
Коллекция Worksheets и объект
Worksheet
объект Range
3. Получение сслки на книгу
• Три способа получения ссылки:
• Debug.Print Workbooks("Смета.xls").FullName
• Debug.Print ActiveWorkbook.Name
• Debug.Print ThisWorkbook.Name
• Создание книги:
• Dim oWbk As Workbook
Set oWbk = Workbooks.Add()
• Открытие книги:
• Dim oWbk As Workbook
Set oWbk = WorkBooks.Open("C:mybook1.xls")
4. Стандартная работа с книгами
• Add() создает новую книгу и делает ее
активной
• Close() закрывает все открытые книги
• Open() открывает указанную книгу
• Основной параметр - имя открываемой книги
5. Специальные методы
коллекции Workbooks
• Только в самых простых случаях
• OpenDatabase()
• открывает базу данных
• выполняет запрос к ней
• напрямую открывает таблицу или представление
• результаты запроса помещает как
импортированные внешние данные в новую
автоматически созданную книгу
• OpenText() — в качестве источника выступает
текстовый файл
• OpenXML() — то же, но с XML- файлом
6. Свойства коллекции Workbooks
• Count – количество открытых книг
• Item – позволяет обращаться к отдельной
книге в коллекции
• идентификатор - ее индекс или имя
MsgBox "Открыто" + Str(Workbooks.Count) + _
" книг"
For i = 1 To Workbooks.Count
MsgBox Workbooks.Item(i).Name + _
" имя открытой книги №" + Str(i)
Next i
7. Свойства объекта Workbook
• Name, CodeName, FullName
• Name – имя файла книги
• FullName – имя файла книги вместе с полным путем к
нему
• CodeName – как эта книга называется в коде
• можно посмотреть в окне Project Explorer
• открыть свойства книги в окне Properties, в строке
(Name)
• Path – полный путь в файловой системе к книге
Excel
8. Разные имена книги
MsgBox "Кодовое имя текущей книги: " + _
ActiveWorkbook.CodeName + Chr(13) + _
"Имя текущей книги: " + _
ActiveWorkbook.Name + Chr(13) + _
"Полное имя книги: " + _
ActiveWorkbook.FullName
9. Свойства объекта Workbook
•
Charts, Sheets, ActiveChart, ActiveSheet, Custo
mViews, BuiltinDocumentProperties и
CustomDocumentProperties, Windows, WebOp
tions – возвращают одноименные коллекции
соответствующих объектов
• ConflictResolution – определяет, как будут
разрешаться конфликты изменения данных
• SaveAs(), ExclusiveAccess()
• MultiUserEditing
• UserStatus
10. Свойства объекта Workbook
• FileFormat
• Names
For Each Item In ThisWorkbook.Names
Debug.Print Item.Name
Next
11. Методы объекта Workbook
• Очевидные методы
Activate(), Close(), Save(), SaveAs(), PrintOu
t(), Protect() и Unprotect()
13. События объекта Workbook
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Target As Range)
MsgBox "Вы отредактировали даные на листе: " & _
Sh.Name & ", в ячейке " & Target.Address & _
". Теперь ячейка содержит следующие данные: " & _
Target.Value
End Sub
14. Коллекция Worksheets
• содержит листы открытой книги
• Создание листа:
• Add(Before, After, Count, Type)
• ThisWorkbook.Worksheets.Add
• ActiveWorkbook.Worksheets.Add _
Count:=Val(InputBox("Введите количество
листов"))
15. Создание листа
Dim oExcel As New Excel.Application 'Запускаем Excel
oExcel.Visible = True 'Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add() 'Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Add() 'Создаем новый лист
oSheet.Name = "Новый лист" 'Присваиваем ему имя
16. Копирование листа
• В пределах книги
• ActiveWorkbook.ActiveSheet.Copy _
After:=Worksheets("Данные")
• В новой книге
• ActiveWorkbook.ActiveSheet.Copy
17. Удаление и перемещение
• ActiveWorkbook.Worksheets.Item(1).Delete
• ActiveWorkbook.ActiveSheet.Move _
Before:=Worksheets("Данные")
• Возможен параметр After
18. Поиск нужного листа
Dim oExcel As New Excel.Application 'Запускаем Excel
oExcel.Visible = True 'Делаем его видимым
Dim oWbk As Excel.Workbook
Set oWbk = oExcel.Workbooks.Add() 'Создаем новую книгу
Dim oSheet As Excel.Worksheet
Set oSheet = oWbk.Worksheets.Item("Лист1") 'Находим Лист1
oSheet.Name = "Новый лист" 'Присваиваем ему имя "Новый лист"
19. Свойства коллекции Worksheets
• Привычные нам свойства и методы
коллекций VBA
• Сount, Item, Add(), Delete()
• специфический метод FillAcrossSheets()
• копирование объекта Range
(полностью, только содержимое или только
оформление) во все листы текущей книги
20. Объект Worksheet
• все часто используемые методы Workheet уже
знакомы по описаниям предыдущих объектов и
коллекций Excel
• Activate
• Calculate
• Copy, Delete, Move
• Select
• Scenarios
• SetBackgroundPicture
• PivotTables – коллекция сводных таблиц, расположенных
на листе
• ShowAllData показывает все содержимое рабочего листа
• отменяет скрытие данных при фильтровании и т.д.
21. Методы объекта Worksheet
• Paste вставляет 'Копируем выделенную область
содержимое буфера 'в буфер обмена
обмена в указанную Application.Selection.Copy
область 'Выделяем ячейку A3
• Копирование в буфер Range("A3").Select
обмена – метод Copy 'Вставляем содержимое буфера
объекта Range (или ActiveSheet.Paste
объекта Selection) 'Теперь выделяем диапазон ячеек,
'в котором хранятся исходные данные
• PasteSpecial осуществляет
Range("A2:F2").Select
специальную вставку
Application.Selection.Copy
• Protect и Unprotect – Range("A4").Select
защита и снятие защиты 'Вставляем значения = без формул
Selection.PasteSpecial_
Paste:=xlPasteValues
22. Свойства объекта Worksheet
• С помощью Cells можно обращаться к каждой
конкретной ячейке по отдельности
• ActiveSheet.Cells(1, 5) = 8
• EnableCalculation
• EnableSelection
• Next и Previous – перемещение по листам книги
• PageSetup
• Protection…
• QueryTables – таблицы запросов
23. Свойства объекта Worksheet
• Range – работа с ячейками и диапазонами ячеек
• ActiveSheet.Range("E1") = 4
• Dim MyCell As Variant
For Each MyCell In ActiveSheet.Range("A1:K100")
MyCell.Value = MyCell.Value + 1
Next
• UsedRange – заполненные ячейки
• Visible – скрытие и отображение листов
• Type
• xlWorksheet или xlChart
24. События объекта Worksheet
• Практически Private Sub Worksheet_SelectionChange(ByVal Target As Range)
полностью 'Для хранения пароля
идентичны Dim str_Pass As String
аналогичным str_Pass = ActiveSheet.Range("A2")
событиям для
If Len(str_Pass) >= 8 Then _
Workbook
ActiveSheet.Range("B2") = "Надежный пароль"
• Самое важное
If Len(str_Pass) < 8 And Len(str_Pass) >= 5 Then _
событие – Change
ActiveSheet.Range("B2") = _
• BeforeRightClick и
"Пароль средней надежности"
BeforeDoubleClick
If Len(str_Pass) < 5 Then _
ActiveSheet.Range("B2") = _
"Ненадежный пароль«
End Sub
25. Объект Range
• наиболее часто используемый объект в
иерархии объектной модели Excel
• может представлять одну ячейку, несколько
ячеек
• несмежные ячейки или их наборы
• целый лист
• www.microsoft.com/support - 22 способа
получения объекта Range
26. Получение объекта Range
• 1-й способ
• Dim oRange As Range
Set oRange = Worksheets("Лист1").Range("A1")
• Dim oRange As Range
Set oRange = Worksheets("Лист1").Range("A1:D10")
• 2-й способ
• Dim oRange As Range
Set oRange = Worksheets("Лист1").Cells(1, 4)
• Dim oRange
Set oRange = Range(Cells(1, 1), Cells(5, 3))
• Dim obj_MyCell As Range
Set obj_MyCell = ActiveSheet.Cells(5, 5)
obj_MyCell.Select
27. Как обратиться к ячейке
• По имени
• ActiveSheet.Range("A2").Select
• ActiveSheet.Range("A2:E2").Select
ActiveSheet.Range("A2:E4").Select
• По координатам
• ActiveSheet.Cells(5,1).Select
• ActiveSheet.Range(Cells(5, 4), _
Cells(7, 5)).Select
28. Как обратиться к ячейке
• С использованием переменных
For i = 1 To 3
For j = 1 To 3
ActiveSheet.Cells(i, j).Select
Application.Wait (Now + _
TimeValue("0:00:01"))
p=p+1
Selection = p
Next j
Next i
ActiveSheet.Range("A1:E5").Clear
29. Методы Range
• Activate – активация ячейки
• Range("A1:E5").Select
• Range("C2").Activate
• AddComment – добавляем комментарии к
ячейкам
• Range("C3").AddComment ("Проверка комментария")
• AutoFit – автонастройка ширины столбцов и
высоты строк
• ActiveSheet.Range("A1:E1").Columns.AutoFit
• ActiveSheet.Range("A:E").Columns.AutoFit
30. Методы Range
• Clear, ClearComments, ClearContents,
ClearFormats – очистка и удаление
• ActiveSheet.Range("A1:E5").Clear
Activesheet.Cells.Select
Selection.Clear
• Copy, Cut, PasteSpecial – буфер обмена
• Delete – удалить диапазон
31. Merge, UnMerge –
объединение ячеек
'Заполняем область C3:L2 'Выравниваем размер столбцов
'случайными целыми числами ActiveSheet.Range("C:L").Columns.AutoFit
For i = 1 To 10 'Записываем название таблицы
For j = 1 To 10 'в ячейку верхней строчки
ActiveSheet.Cells(i + 2, j + 2) = _ Range("C2") = "Название таблицы"
Int(Rnd * 100) 'Объединяем ячейки над таблицей
Next j Range("C2:L2").Merge
Next i
32. Select – выделение ячейки
Dim obj_Range As Range
Dim num_Sum
'Обращаемся к каждой ячейке
'в выделенной области
For Each obj_Range In Selection.Cells
num_Sum = num_Sum + Val(obj_Range)
Next
MsgBox ("Сумма выделенных ячеек: " & _
num_Sum)
33. Еще методы
• AutoFill() • Replace()
• AutoFormat() • Show()
• BorderAround()
• ShowDependents()
• Consolidate()
• ShowErrors()
• CopyFromRecordset()
• Sort()
• DataSeries()
• Dirty() • Speak()
• FillDown(), FillUp(), FillLeft(), FillRig • SpecialCells()
ht()
• Set oRange2 =
• Find() oRange.SpecialCells(xlCellTypeBlanks)
• GoalSeek() oRange2.Select 'Проверяем, так ли это
• Justify() • SubTotal()
• Parse() • Table()
• PrintOut() и PrintPreview() • TextToColumns()
34. Свойства Range
• Address - адрес ячейки в формате A1
Dim num_Row
Dim num_Col
Dim MyRange As Range
num_Row = Val(InputBox("Введите столбец"))
num_Col = Val(InputBox("Введите строку"))
Set MyRange = _
ActiveSheet.Cells(num_Row, num_Col)
MsgBox (MyRange.Address + _
" - имя ячейки " & _
" с индексами " & num_Row & " и " & num_Col)
35. Свойства Range
• Areas - работа с несмежными выделенными областями
• If Selection.Areas.Count > 1 Then
Debug.Print "Диапазон с несмежными областями"
End If
• Characters – меняем фрагменты текста или их формат в
ячейке, не затрагивая остальные данные
• чтобы ввести текст в ячейку A1 и изменить цвет первой буквы
Dim oRange As Range
Set oRange = Range("A1")
oRange.Value = "Мой текст"
oRange.Characters(1, 1).Font.Color = vbRed
36. Свойства Range
• Areas - работа с несмежными выделенными областями
• Borders - управление границами ячеек
• Cells, Columns, Rows - ячейки, столбцы, строки
• num_Rows = obj_Range.Rows.Count
• Dim obj_Range As Range
Set obj_Range = ActiveSheet.Range("B2:F7")
For i = 1 To obj_Range.Rows.Count
For j = 1 To obj_Range.Columns.Count
obj_Range.Cells(i, j) = _
Int(Rnd * 100)
Next j
Next i
37. Свойства Range
• CurrentRegion - область, заполненная данными
• Worksheets("Лист1").Activate
ActiveCell.CurrentRegion.Select
• Characters, Font - форматирование текста
• Dim obj_Range As Range
Set obj_Range = Selection
With obj_Range
.Font.Name = "Times New Roman"
.Font.Size = 15
.Font.Color = vbRed
.Characters(1, 1).Font.Italic = True
End With
38. Свойства Range
• Formula, FormulaR1C1 - формулы в ячейках
• Range("A1").Formula = "=$A$2+$A$3"
• Interior - внешний вид ячейки
• Range("A1").Interior.Color = vbRed
• Name - работа с именованными диапазонами
• Value - содержимое ячейки
• Dim obj_Cell As Range
For Each obj_Cell In ActiveSheet.Range("A1:E8")
If obj_Cell.Value < 0 Then
obj_Cell.Value = Abs(obj_Cell.Value)
obj_Cell.Interior.Color = vbCyan
End If
Next
41. Подводим итоги
• Wokrbooks, Workbook, Worksheets и
Worksheet имеют достаточный набор
методов и свойств
• Вся работа с ячейками в Excel производится
с использованием объекта Range
43. Контрольные вопросы
• Какие методы и свойства коллекции
Workbooks вы знаете?
• Как создать обработчики событий
объекта Workbook?
• Как получить объект Range?
• Какие методы и свойства Range
наиболее полезны?