Vba 06

619 views

Published on

Презентация из моего тренинга по VBA на основе курсов с intuit.ru

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
619
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Vba 06

  1. 1. Модуль 6.Работа с книгами, листами и ячейками
  2. 2. О чем мы узнаемКоллекция Workbooks и объектWorkbookКоллекция Worksheets и объектWorksheetобъект Range
  3. 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. 4. Стандартная работа с книгами• Add() создает новую книгу и делает ее активной• Close() закрывает все открытые книги• Open() открывает указанную книгу • Основной параметр - имя открываемой книги
  5. 5. Специальные методыколлекции Workbooks• Только в самых простых случаях• OpenDatabase() • открывает базу данных • выполняет запрос к ней • напрямую открывает таблицу или представление • результаты запроса помещает как импортированные внешние данные в новую автоматически созданную книгу• OpenText() — в качестве источника выступает текстовый файл• OpenXML() — то же, но с XML- файлом
  6. 6. Свойства коллекции Workbooks• Count – количество открытых книг• Item – позволяет обращаться к отдельной книге в коллекции • идентификатор - ее индекс или имя MsgBox "Открыто" + Str(Workbooks.Count) + _ " книг" For i = 1 To Workbooks.Count MsgBox Workbooks.Item(i).Name + _ " имя открытой книги №" + Str(i) Next i
  7. 7. Свойства объекта Workbook• Name, CodeName, FullName • Name – имя файла книги • FullName – имя файла книги вместе с полным путем к нему • CodeName – как эта книга называется в коде • можно посмотреть в окне Project Explorer • открыть свойства книги в окне Properties, в строке (Name)• Path – полный путь в файловой системе к книге Excel
  8. 8. Разные имена книгиMsgBox "Кодовое имя текущей книги: " + _ ActiveWorkbook.CodeName + Chr(13) + _ "Имя текущей книги: " + _ ActiveWorkbook.Name + Chr(13) + _ "Полное имя книги: " + _ ActiveWorkbook.FullName
  9. 9. Свойства объекта Workbook• Charts, Sheets, ActiveChart, ActiveSheet, Custo mViews, BuiltinDocumentProperties и CustomDocumentProperties, Windows, WebOp tions – возвращают одноименные коллекции соответствующих объектов• ConflictResolution – определяет, как будут разрешаться конфликты изменения данных • SaveAs(), ExclusiveAccess() • MultiUserEditing • UserStatus
  10. 10. Свойства объекта Workbook• FileFormat• Names For Each Item In ThisWorkbook.Names Debug.Print Item.Name Next
  11. 11. Методы объекта Workbook• Очевидные методы Activate(), Close(), Save(), SaveAs(), PrintOu t(), Protect() и Unprotect()
  12. 12. События объекта WorkbookДвойной щелчок на объекте ThisWorkbook
  13. 13. События объекта WorkbookPrivate Sub Workbook_SheetChange(ByVal Sh As Object, _ ByVal Target As Range) MsgBox "Вы отредактировали даные на листе: " & _ Sh.Name & ", в ячейке " & Target.Address & _ ". Теперь ячейка содержит следующие данные: " & _ Target.ValueEnd Sub
  14. 14. Коллекция Worksheets• содержит листы открытой книги• Создание листа:• Add(Before, After, Count, Type) • ThisWorkbook.Worksheets.Add • ActiveWorkbook.Worksheets.Add _ Count:=Val(InputBox("Введите количество листов"))
  15. 15. Создание листаDim oExcel As New Excel.Application Запускаем ExceloExcel.Visible = True Делаем его видимымDim oWbk As Excel.WorkbookSet oWbk = oExcel.Workbooks.Add() Создаем новую книгуDim oSheet As Excel.WorksheetSet oSheet = oWbk.Worksheets.Add() Создаем новый листoSheet.Name = "Новый лист" Присваиваем ему имя
  16. 16. Копирование листа• В пределах книги• ActiveWorkbook.ActiveSheet.Copy _ After:=Worksheets("Данные")• В новой книге• ActiveWorkbook.ActiveSheet.Copy
  17. 17. Удаление и перемещение• ActiveWorkbook.Worksheets.Item(1).Delete• ActiveWorkbook.ActiveSheet.Move _ Before:=Worksheets("Данные") • Возможен параметр After
  18. 18. Поиск нужного листаDim oExcel As New Excel.Application Запускаем ExceloExcel.Visible = True Делаем его видимымDim oWbk As Excel.WorkbookSet oWbk = oExcel.Workbooks.Add() Создаем новую книгуDim oSheet As Excel.WorksheetSet oSheet = oWbk.Worksheets.Item("Лист1") Находим Лист1oSheet.Name = "Новый лист" Присваиваем ему имя "Новый лист"
  19. 19. Свойства коллекции Worksheets• Привычные нам свойства и методы коллекций VBA• Сount, Item, Add(), Delete()• специфический метод FillAcrossSheets()• копирование объекта Range (полностью, только содержимое или только оформление) во все листы текущей книги
  20. 20. Объект Worksheet• все часто используемые методы Workheet уже знакомы по описаниям предыдущих объектов и коллекций Excel • Activate • Calculate • Copy, Delete, Move • Select • Scenarios • SetBackgroundPicture • PivotTables – коллекция сводных таблиц, расположенных на листе • ShowAllData показывает все содержимое рабочего листа • отменяет скрытие данных при фильтровании и т.д.
  21. 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. 22. Свойства объекта Worksheet• С помощью Cells можно обращаться к каждой конкретной ячейке по отдельности • ActiveSheet.Cells(1, 5) = 8• EnableCalculation• EnableSelection• Next и Previous – перемещение по листам книги• PageSetup• Protection…• QueryTables – таблицы запросов
  23. 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. 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. 25. Объект Range• наиболее часто используемый объект в иерархии объектной модели Excel• может представлять одну ячейку, несколько ячеек • несмежные ячейки или их наборы • целый лист• www.microsoft.com/support - 22 способа получения объекта Range
  26. 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. 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. 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. 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. 30. Методы Range• Clear, ClearComments, ClearContents, ClearFormats – очистка и удаление• ActiveSheet.Range("A1:E5").Clear Activesheet.Cells.Select Selection.Clear• Copy, Cut, PasteSpecial – буфер обмена• Delete – удалить диапазон
  31. 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. 32. Select – выделение ячейкиDim obj_Range As RangeDim num_SumОбращаемся к каждой ячейкев выделенной областиFor Each obj_Range In Selection.Cells num_Sum = num_Sum + Val(obj_Range)NextMsgBox ("Сумма выделенных ячеек: " & _num_Sum)
  33. 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. 34. Свойства Range• Address - адрес ячейки в формате A1Dim 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. 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. 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. 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. 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
  39. 39. Еще свойства• End, Errors, HasFormula, Locked, Next, NumberFormat• Offset • Worksheets("Лист1").Activate ActiveCell.Offset(rowOffset:=-3, columnOffset:=-3).Activate• Orientation • oRange.Orientation = -45• PageBreak • Worksheets("Лист1").Rows(50).PageBreak = xlPageBreakManual• Resize • oRange.Resize(oRange.Rows.Count + 1, oRange.Columns.Count + 1).Select• ShrinkToFit, Style, Text, Validation, WrapText
  40. 40. Практика: примеры кодаИзучите содержимое файлов15_nn.xlsmв папке …Students !
  41. 41. Подводим итоги• Wokrbooks, Workbook, Worksheets и Worksheet имеют достаточный набор методов и свойств• Вся работа с ячейками в Excel производится с использованием объекта Range
  42. 42. Вопросы?
  43. 43. Контрольные вопросы• Какие методы и свойства коллекции Workbooks вы знаете?• Как создать обработчики событий объекта Workbook?• Как получить объект Range?• Какие методы и свойства Range наиболее полезны?

×