На чтение 19 мин. Просмотров 14.3k.
John Naisbitt
Мы тонем в информации, но жаждем знаний
Эта статья содержит полное руководство по использованию рабочей книги VBA.
Если вы хотите использовать VBA для открытия рабочей книги, тогда откройте «Открыть рабочую книгу»
Если вы хотите использовать VBA для создания новой рабочей книги, перейдите к разделу «Создание новой рабочей книги».
Для всех
других задач VBA Workbook, ознакомьтесь с кратким руководством ниже.
Содержание
- Краткое руководство по книге VBA
- Начало работы с книгой VBA
- Доступ к рабочей книге VBA по индексу
- Поиск всех открытых рабочих книг
- Открыть рабочую книгу
- Проверить открыта ли книга
- Закрыть книгу
- Сохранить книгу
- Копировать книгу
- Использование диалогового окна «Файл» для открытия рабочей книги
- Использование ThisWorkbook
- Использование ActiveWorkbook
- Примеры доступа к книге
- Объявление переменной VBA Workbook
- Создать новую книгу
- With и Workbook
- Резюме
- Заключение
Краткое руководство по книге VBA
В следующей таблице приведено краткое руководство по
основным задачам книги VBA.
Задача | Исполнение |
Доступ к открытой книге с использованием имени |
Workbooks(«Пример.xlsx») |
Доступ к открытой рабочей книге (открывшейся первой) |
Workbooks(1) |
Доступ к открытой рабочей книге (открывшейся последней) |
Workbooks(Workbooks.Count) |
Доступ к активной книге | ActiveWorkbook |
Доступ к книге, содержащей код VBA |
ThisWorkbook |
Объявите переменную книги | Dim wk As Workbook |
Назначьте переменную книги | Set wk = Workbooks(«Пример.xlsx») Set wk = ThisWorkbook Set wk = Workbooks(1) |
Активировать книгу | wk.Activate |
Закрыть книгу без сохранения | wk.Close SaveChanges:=False |
Закройте книгу и сохраните | wk.Close SaveChanges:=True |
Создать новую рабочую книгу | Set wk = Workbooks.Add |
Открыть рабочую книгу | Set wk =Workbooks.Open («C:ДокументыПример.xlsx») |
Открыть книгу только для чтения |
Set wk = Workbooks.Open («C:ДокументыПример.xlsx», ReadOnly:=True) |
Проверьте существование книги | If Dir(«C:ДокументыКнига1.xlsx») = «» Then MsgBox «File does not exist.» EndIf |
Проверьте открыта ли книга | Смотрите раздел «Проверить открыта ли книга» |
Перечислите все открытые рабочие книги |
For Each wk In Application.Workbooks Debug.Print wk.FullName Next wk |
Открыть книгу с помощью диалогового окна «Файл» |
Смотрите раздел «Использование диалогового окна «Файл» |
Сохранить книгу | wk.Save |
Сохранить копию книги | wk.SaveCopyAs «C:Копия.xlsm» |
Скопируйте книгу, если она закрыта |
FileCopy «C:file1.xlsx»,»C:Копия.xlsx» |
Сохранить как Рабочая книга | wk.SaveAs «Резервная копия.xlsx» |
Начало работы с книгой VBA
Мы можем получить доступ к любой открытой книге, используя код Workbooks («Пример.xlsm»). Просто замените Пример.xlsm именем книги, которую вы хотите использовать.
В следующем примере показано, как записать в ячейку на листе. Вы заметите, что мы должны были указать рабочую книгу, рабочий лист и диапазон ячеек.
Sub ZapisVYacheikuA1() 'Записывает 100 в ячейку A1 листа "Лист1" в МойVBA.xlsm Workbooks("МойVBA.xlsm").Worksheets("Лист1").Range("A1") = 100 End Sub
Этот пример может показаться немного запутанным для новичка, но на самом деле он довольно прост.
Первая часть до десятичной запятой представляет собой
рабочую книгу, вторая часть представляет собой рабочую таблицу, а третья —
диапазон. Вот еще несколько примеров записи в ячейку
Sub ZapisiVYacheiku() ' Записывает 100 в ячейку A1 листа "Лист1" в МойVBA.xlsm Workbooks("МойVBA.xlsm").Worksheets("Лист1").Range("A1") = 100 ' Записывает «Иван» в ячейку B1 листа «Лист1» в МойVBA.xlsm Workbooks("МойVBA.xlsm").Worksheets("Лист1").Range("B1") = "Иван" ' Записывает 100 в ячейку A1 таблицы «Счета» в МойVBA.xlsm Workbooks("МойVBA.xlsm").Worksheets("Счета").Range("A1") = 100 ' Записывает дату в ячейку D3 рабочего листа "Лист2" в Книга.xlsx Workbooks("Книга.xlsx").Worksheets("Лист2").Range("D3") = "112019" End Sub
Это простой шаблон. Вы можете написать в любую ячейку любого листа из любой книги. Это просто вопрос изменения названия книги, имени листа и диапазона в соответствии с вашими потребностями.
Взгляните на часть книги
Ключевое слово Workbooks относится к совокупности всех открытых рабочих книг. Предоставление имени книги в коллекцию дает нам доступ к этой книге. Когда у нас есть объект, мы можем использовать его для выполнения задач с книгой.
Устранение неполадок в коллекции книг
Когда вы используете коллекцию Workbooks для доступа к книге, вы можете получить сообщение об ошибке:
Run-time Error 9: Subscript out of Range.
Это означает, что VBA не может найти книгу, которую вы
передали в качестве параметра.
Это может произойти по следующим причинам:
- Рабочая книга в настоящее время закрыта.
- Вы написали имя неправильно.
- Вы создали новую рабочую книгу (например, «Книга1») и попытались получить к ней доступ, используя Workbooks («Книга1.xlsx»). Это имя не Книга1.xlsx, пока оно не будет сохранено в первый раз.
- (Только для Excel 2007/2010) Если вы используете два экземпляра Excel, то Workbooks () относится только к рабочим книгам, открытым в текущем экземпляре Excel.
- Вы передали число в качестве индекса, и оно больше, чем количество открытых книг, например Вы использовали
Workbooks (3), и только две рабочие книги открыты.
Если вы не можете устранить ошибку, воспользуйтесь любой из функций в разделе Поиск всех открытых рабочих книг. Они будут печатать имена всех открытых рабочих книг в «Immediate Window » (Ctrl + G).
Примеры использования рабочей книги VBA
Следующие примеры показывают, что вы можете сделать с
книгой.
Примечание. Чтобы попробовать этот пример, создайте две открытые книги с именами Тест1.xlsx и Тест2.xlsx.
Sub SvoistvaRabocheiKnigi() ' Печатает количество открытых рабочих книг Debug.Print Workbooks.Count ' Печатает полное название книги Debug.Print Workbooks("Тест1.xlsx").FullName ' Отображает полное имя книги в диалоговом окне сообщения. MsgBox Workbooks("Тест1.xlsx").FullName ' Печатает количество листов в Тест2.xlsx Debug.Print Workbooks("Тест2.xlsx").Worksheets.Count ' Печатает имя активного в данный момент листа Тест2.xlsx Debug.Print Workbooks("Тест2.xlsx").ActiveSheet.Name ' Закрывает книгу под названием Тест1.xlsx Workbooks("Tест1.xlsx").Close ' Закрывает книгу Тест2.xlsx и сохраняет изменения Workbooks("Tест2.xlsx").Close SaveChanges:=True End Sub
Примечание: в примерах кода я часто использую Debug.Print. Эта функция печатает значения в Immediate Window. Для просмотра этого окна выберите View-> Immediate Window из меню (сочетание клавиш Ctrl + G)
Доступ к рабочей книге VBA по индексу
Вы также можете использовать индексный номер с книгами ().
Индекс относится к порядку, в котором книга была открыта или создана.
Workbooks (1) относится к книге, которая была открыта первой. Workbooks (2) относится к рабочей книге, которая была открыта второй и так далее.
' Первая рабочая книга, которая была открыта Debug.Print Workbooks(1).Name ' Третья рабочая тетрадь, которая была открыта Debug.Print Workbooks(3).Name ' Последняя рабочая книга, которая была открыта Debug.Print Workbooks(Workbooks.Count).Name
В этом примере мы использовали Workbooks.Count. Это количество рабочих книг, которые в настоящее время находятся в коллекции рабочих книг. То есть количество рабочих книг, открытых на данный момент. Таким образом, использование его в качестве индекса дает нам последнюю книгу, которая была открыта
Использование индекса не очень полезно, если вам не нужно знать порядок. По этой причине вам следует избегать его использования. Вместо этого вы должны использовать имя рабочей книги вместе с Workbooks ().
Поиск всех открытых рабочих книг
Иногда вы можете получить доступ ко всем рабочим книгам, которые открыты. Другими словами, все элементы в коллекции Workbooks ().
Вы можете сделать это, используя цикл For Each.
Sub PechatImeniFailaEach() ' Распечатывает полное имя файла всех открытых рабочих книг Dim wrk As Workbook For Each wrk In Workbooks Debug.Print wrk.FullName Next wrk End Sub
Вы также можете использовать стандартный цикл For для доступа ко всем открытым рабочим книгам.
Sub PechatImeniFailaFor() ' Распечатывает полное имя файла всех открытых рабочих книг Dim i As Long For i = 1 To Workbooks.Count Debug.Print Workbooks(i).FullName Next i End Sub
Для доступа к книгам подходит любой из этих циклов.
Стандартный цикл For полезен, если вы хотите использовать другой порядок или
вам нужно использовать счетчик.
Примечание. Оба примера читаются в порядке с первого открытого до последнего открытого. Если вы хотите читать в обратном порядке (с последнего на первое), вы можете сделать это
Sub PechatImeniFailaForKon() ' Распечатывает полное имя файла всех открытых рабочих книг ' в обратном порядке. Dim i As Long For i = Workbooks.Count To 1 Step -1 Debug.Print Workbooks(i).FullName Next i End Sub
Открыть рабочую книгу
До сих пор мы имели дело с рабочими книгами, которые уже открыты. Конечно, необходимость вручную открывать рабочую книгу перед запуском макроса не позволяет автоматизировать задачи. Задание «Открыть рабочую книгу» должно выполняться VBA.
Следующий код VBA открывает книгу «Книга1.xlsm» в папке «C: Документы»
Sub OtkritKnigu() ' Откройте книгу и распечатайте количество листов в ней Workbooks.Open ("C:ДокументыКнига1.xlsm") Debug.Print Workbooks("Книга1.xlsm").Worksheets.Count ' Закройте книгу без сохранения Workbooks("Книга1.xlsm").Close saveChanges:=False End Sub
Рекомендуется проверить, действительно ли существует книга,
прежде чем открывать ее. Это предотвратит ваши ошибки. Функция Dir позволяет
вам легко это сделать.
Sub OtkritKniguDir() If Dir("C:ДокументыКнига1.xlsm") = "" Then ' Файл не существует - сообщение пользователю MsgBox "Could not open the workbook. Please check it exists" Else ' открыть книгу и сделать что-нибудь с ней Workbooks.Open("C:ДокументыКнига1.xlsm").Open End If End Sub
Проверить открыта ли книга
Если вы открываете книгу только для чтения, то не имеет значения, открыта ли она уже. Тем не менее, если вы собираетесь обновить данные в рабочей книге, рекомендуется проверить, открыты ли они.
Приведенную ниже функцию можно использовать для проверки,
открыта ли книга в данный момент. Если нет, то откроется рабочая книга. В любом
случае вы получите открытую рабочую книгу.
Function GetWorkbook(ByVal sFullFilename As String) As Workbook Dim sFilename As String sFilename = Dir(sFullFilename) On Error Resume Next Dim wk As Workbook Set wk = Workbooks(sFilename) If wk Is Nothing Then Set wk = Workbooks.Open(sFullFilename) End If On Error Goto 0 Set GetWorkbook = wk End Function
Вы можете использовать эту функцию так:
Sub PrimerOtkritiyaKnigi() Dim sFilename As String sFilename = "C:ДокументыКнига2.xlsx" Dim wk As Workbook Set wk = GetWorkbook(sFilename) End Sub
Этот код хорош в большинстве ситуаций. Однако, если рабочая книга может быть открыта в режиме только для чтения или может быть открыта в данный момент другим пользователем, возможно, вы захотите использовать немного другой подход.
Простой способ справиться с этим в этом сценарии состоит в
том, чтобы настаивать на том, что файл должен быть закрыт для успешного запуска
приложения. Вы можете использовать функцию ниже, чтобы просто проверить, открыт
ли уже файл, и если это так, сообщить пользователю, что он должен быть закрыт в
первую очередь.
' Функция для проверки, если книга уже открыта Function IsWorkBookOpen(strBookName As String) As Boolean Dim oBk As Workbook On Error Resume Next Set oBk = Workbooks(strBookName) On Error GoTo 0 If Not oBk Is Nothing Then IsWorkBookOpen = True End If End Function
Пример использования этой функции показан ниже. В этом
случае, если рабочая книга уже открыта, вы сообщаете пользователю, что она
должна быть закрыта для продолжения макроса.
Sub PrimerIsp() Dim sFilename As String sFilename = "C:tempwritedata.xlsx" If IsWorkBookOpen(Dir(sFilename)) = True Then MsgBox "File is already open. Please close file and run macro again." Exit Sub End If ' Написать в книгу здесь End Sub
Если вам нужно проверить, открыта ли книга в другом экземпляре Excel, вы можете использовать атрибут ReadOnly книги. Будет установлено значение true, если оно открыто в другом экземпляре.
Закрыть книгу
Закрыть книгу в Excel VBA очень просто. Вы просто вызываете метод Close рабочей книги.
Обычно, когда вы закрываете книгу в VBA, вы не хотите видеть
сообщения из Excel, спрашивающие, хотите ли вы сохранить файл.
Вы можете указать, сохранять ли книгу или нет, и тогда
сообщения Excel не будут появляться.
' Не сохранять изменения wk.Close SaveChanges:= False ' Сохранить изменения wk.Close SaveChanges:= True
Очевидно, что вы не можете сохранить изменения в книге,
которая в данный момент открыта только для чтения.
Сохранить книгу
Мы только что видели, что вы можете сохранить книгу, когда закроете ее. Если вы хотите сохранить его на любом другом этапе, вы можете просто использовать метод Save.
Вы также можете использовать метод SaveAs
wk.SaveAs "C:Резервная копияСчета.xlsx"
Метод WorkAs SaveAs поставляется с двенадцатью параметрами, которые позволяют вам добавить пароль, установить файл только для чтения и так далее. Вы можете увидеть детали здесь.
Вы также можете использовать VBA для сохранения книги в виде копии с помощью SaveCopyAs.
Копировать книгу
Если рабочая книга открыта, вы можете использовать два метода в приведенном выше разделе для создания копии, т.е. SaveAs и SaveCopyAs.
Если вы хотите скопировать книгу, не открывая ее, вы можете использовать FileCopy, как показано в следующем примере:
Sub KopirovatKnigu() FileCopy "C:ДокументыДокументы.xlsm", "C:ДокументыПример копии.xlsm" End Sub
Использование диалогового окна «Файл» для открытия рабочей книги
В предыдущем разделе показано, как открыть книгу с заданным именем. Иногда вам может понадобиться, чтобы пользователь выбрал рабочую книгу. Вы можете легко использовать Windows File Dialog.
FileDialog настраивается, и вы можете использовать его так:
- Выберите файл.
- Выберите папку.
- Откройте файл.
- «Сохранить как» файл.
Если вы просто хотите, чтобы пользователь выбрал файл, вы можете использовать функцию GetOpenFilename.
Следующая функция открывает книгу с помощью диалога файлов.
Функция возвращает полное имя файла, если файл был выбран. Если пользователь
отменяет, он отображает сообщение и возвращает пустую строку.
Public Function UserSelectWorkbook() As String On Error Goto ErrorHandler Dim sWorkbookName As String Dim FD As FileDialog Set FD = Application.FileDialog(msoFileDialogFilePicker) ' Откройте диалоговое окно файла With FD ' Установить заголовок диалога .Title = "Please Select File" ' Добавить фильтр .Filters.Add "Excel Files", "*.xls;*.xlsx;*.xlsm" ' Разрешить выбор только одного файла .AllowMultiSelect = False ' Диалог дисплея .Show If .SelectedItems.Count > 0 Then UserSelectWorkbook = .SelectedItems(1) Else MsgBox "Selecting a file has been cancelled. " UserSelectWorkbook = "" End If End With ' Убирать Set FD = Nothing Done: Exit Function ErrorHandler: MsgBox "Error: " + Err.Description End Function
Когда вы вызываете эту функцию, вы должны проверить, отменяет ли пользователь диалог.
В следующем примере показано, как легко вызвать функцию UserSelectWorkbook и обработать случай отмены пользователя.
Public Sub TestViborPolz() Dim userBook As Workbook, sFilename As String ' Вызовите функцию UserSelectworkbook sFilename = UserSelectWorkbook() ' Если имя файла возвращается пустым, пользователь отменил If sFilename <> "" Then ' Откройте книгу и сделайте что-нибудь с ней Set userBook = Workbooks.Open(sFilename) End If End Sub
Вы можете настроить диалог, изменив Title, Filters и AllowMultiSelect в функции UserSelectWorkbook.
Использование ThisWorkbook
Существует более простой способ доступа к текущей книге, чем использование Workbooks() . Вы можете использовать ключевое слово ThisWorkbook. Это относится к текущей книге, то есть к книге, содержащей код VBA.
Если наш код находится в книге, называемой МойVBA.xlsm, то ThisWorkbook и Workbooks («МойVBA.xlsm») ссылаются на одну и ту же книгу.
Использование ThisWorkbook более полезно, чем использование Workbooks (). С ThisWorkbook нам не нужно беспокоиться об имени файла. Это дает нам два преимущества:
- Изменение имени файла не повлияет на код
- Копирование кода в другую рабочую книгу не
требует изменения кода
Это может показаться очень маленьким преимуществом. Реальность такова, что имена будут меняться все время. Использование ThisWorkbook означает, что ваш код будет работать нормально.
В следующем примере показаны две строки кода. Один с помощью ThisWorkbook, другой с помощью Workbooks (). Тот, который использует Workbooks, больше не будет работать, если имя МойVBA.xlsm изменится.
Sub IzmenenieImeni() ' Обе строки делают одно и то же. Debug.Print ThisWorkbook.FullName Debug.Print Workbooks("МойVBA.xlsm").FullName End Sub
Использование ActiveWorkbook
ActiveWorkbook относится к книге, которая в данный момент активна. Это тот, который пользователь последний раз щелкнул.
Поначалу это может показаться полезным. Проблема в том, что
любая рабочая книга может стать активной простым щелчком мыши. Это означает,
что вы можете легко записать данные не в ту книгу.
Использование ActiveWorkbook также затрудняет чтение кода. Из кода может быть не очевидно, какая книга должна быть активной.
Надеюсь, я дал понять, что вам следует избегать использования ActiveWorkbook, если в этом нет необходимости. Если вы должны быть очень осторожны.
Примеры доступа к книге
Мы рассмотрели все способы доступа к книге. Следующий код показывает примеры этих способов.
Sub PrimerDostupaKKnige() ' Это рабочая книга, которая уже открыта и называется МойVBA.xlsm. Debug.Print Workbooks("МойVBA.xlsm").FullName ' Рабочая книга, содержащая этот код Debug.Print ThisWorkbook.FullName ' Открытая рабочая книга, которая была открыта первой Debug.Print Workbooks(1).FullName ' Открытая рабочая книга, которая была открыта последней Debug.Print Workbooks(Workbooks.Count).FullName ' Рабочая книга, которая в настоящее время активна Debug.Print ActiveWorkbook.FullName ' Рабочая книга не указана - будет использована активная Debug.Print Worksheets("Лист1").Name ' Закрытая рабочая книга с именем Книга1.xlsm в папке 'C:Документы Workbooks.Open ("C:ДокументыКнига1.xlsm") Debug.Print Workbooks("Книга1.xlsm").FullName Workbooks("Книга1.xlsm").Close End Sub
Объявление переменной VBA Workbook
Причина объявления переменной книги состоит в том, чтобы сделать ваш код более легким для чтения и понимания. Проще увидеть преимущество на примере:
Sub OtkrKnigaPerem() Dim wrk As Workbook Set wrk = Workbooks.Open("C:ДокументыКнига1.xlsm") ' Распечатать количество листов в каждой книге Debug.Print wrk.Worksheets.Count Debug.Print wrk.Name wrk.Close End Sub
Вы можете установить переменную книги с помощью любого из
методов доступа, которые мы видели.
Ниже показан тот же код без переменной рабочей книги.
Sub OtkrKnigaNetPerem() Workbooks.Open ("C:ДокументыКнига1.xlsm") Debug.Print Workbooks("Книга2.xlsm").Worksheets.Count Debug.Print Workbooks("Книга2.xlsm").Name Workbooks("Книга2.xlsm").Close End Sub
В этих примерах разница несущественная. Однако, когда у вас много кода, использование переменной полезно, в частности, для рабочего листа и диапазонов, где имена имеют тенденцию быть длинными, например thisWorkbook.Worksheets («Лист1»). Range («A1»).
Вы можете назвать переменную книги как wrkRead или wrkWrite. Затем вы можете сразу увидеть,
для чего используется эта книга.
Создать новую книгу
Для создания новой рабочей книги вы используете функцию добавления рабочих книг. Эта функция создает новую пустую книгу. Это то же самое, что выбрать «Новая книга» в меню «Файл Excel».
Когда
вы создаете новую книгу, вы, как правило, хотите сохранить ее. Следующий код
показывает вам, как это сделать.
Sub SozdatKnigu() Dim wrk As Workbook Set wrk = Workbooks.Add ' Сохранить как xlsx. Это по умолчанию. wrk.SaveAs "C:TempПример.xlsx" ' Сохранить как макрокоманду wrk.SaveAs "C:TempПример.xlsm", xlOpenXMLWorkbookMacroEnabled End Sub
Когда вы создаете новую книгу, она обычно содержит три листа. Это определяется свойством Application.SheetsInNewWorkbook.
Если вы хотите, чтобы в новой книге было другое количество
листов, измените это свойство перед созданием новой книги. В следующем примере
показано, как создать новую книгу с семью листами.
Sub SozdatKniguMnStr() ' Сохраните значение SheetsInNewWorkbook, чтобы мы могли сбросить его позже Dim sheetCnt As Long sheetCnt = Application.SheetsInNewWorkbook ' Установите листы в новой книге, чтобы быть 7 Application.SheetsInNewWorkbook = 7 ' Рабочая книга будет создана из 7 листов Dim wrk As Workbook Set wrk = Workbooks.Add ' Показать количество листов Debug.Print "number of sheets: " & CStr(wrk.Worksheets.Count) ' Сброс к первоначальному значению Application.SheetsInNewWorkbook = sheetCnt End Sub
With и Workbook
Ключевое слово With облегчает чтение и написание кода VBA.
Использование с означает, что вам нужно упомянуть только один раз. С
используется с объектами. Это такие элементы, как рабочие книги, рабочие
таблицы и диапазоны.
В следующем примере есть два Subs. Первый похож на код,
который мы видели до сих пор. Второй использует ключевое слово With. Вы можете
увидеть код гораздо понятнее во втором Sub. Ключевые слова End With обозначают
конец кода раздела с помощью With.
' Не используется ключевое слово With Sub NeIspWith() Debug.Print Workbooks("Книга2.xlsm").Worksheets.Count Debug.Print Workbooks("Книга2.xlsm").Name Debug.Print Workbooks("Книга2.xlsm").Worksheets(1).Range("A1") Workbooks("Книга2.xlsm").Close End Sub ' Использование With делает код легче читать Sub IspWith() With Workbooks("Книга2.xlsm") Debug.Print .Worksheets.Count Debug.Print .Name Debug.Print .Worksheets(1).Range("A1") .Close End With End Sub
Резюме
Ниже приводится краткое изложение основных моментов этой статьи.
- Чтобы получить рабочую книгу, содержащую код, используйте ThisWorkbook.
- Чтобы получить любую открытую книгу, используйте Workbooks («Пример.xlsx»).
- Чтобы открыть книгу, используйте Set Wrk = Workbooks.Open («C: Папка Пример.xlsx»).
- Разрешить пользователю выбирать файл с помощью функции UserSelectWorkbook, представленной выше.
- Чтобы создать копию открытой книги, используйте свойство SaveAs с именем файла.
- Чтобы создать копию рабочей книги без открытия, используйте функцию FileCopy.
- Чтобы ваш код было легче читать и писать, используйте ключевое слово With.
- Другой способ прояснить ваш код — использовать переменные Workbook.
- Чтобы просмотреть все открытые рабочие книги, используйте For Every wk в Workbooks, где wk — это переменная рабочей книги.
- Старайтесь избегать использования ActiveWorkbook и Workbooks (Index), поскольку их ссылка на рабочую книгу носит временный характер.
Вы можете увидеть краткое руководство по теме в верхней части этой статьи
Заключение
Это был подробная статья об очень важном элементе VBA — Рабочей книги. Я надеюсь, что вы нашли ее полезной. Excel отлично справляется со многими способами выполнения подобных действий, но недостатком является то, что иногда он может привести к путанице.
Чтобы получить максимальную пользу от этой статьи, я рекомендую вам попробовать примеры. Создайте несколько книг и поиграйтесь с кодом. Внесите изменения в код и посмотрите, как эти изменения влияют на результат. Практика — лучший способ выучить VBA.
В иерархии Excel объект workbook (рабочая книга) идет сразу после объекта Application и представляет файл рабочей книги. Рабочая книга хранится либо в файлах формата XLS (стандартная рабочая книга) или XLA (полностью откомпилированное приложение). Свойства и методы рабочей книги позволяют работать с файлами.
Свойства объекта Workbook и семейства Workbooks
Свойства |
Выполняемые действия и допустимые значения |
ActiveSheet |
Возвращает активный лист книги.
Например выводит в диалоговом окне имя активного рабочего листа MsgBox «Имя активного листа» & ActiveSheet. Name |
ActiveDialog |
Возвращает активное диалоговое окно |
ActiveChart |
Возвращает активную диаграмму |
Sheets |
Возвращает семейство всех листов книги |
Worksheets |
Возвращает семейство всех рабочих листов книги |
Charts |
Возвращает семейство всех диаграмм книги (которые не внедрены в рабочие листы) |
Count |
Возвращает число объектов семейства workbooks |
HasPassword |
Допустимые значения:
True (если у документа имеется пароль защиты) False (в противном случае) |
WriteReserved |
Допустимые значения:
True (если документ закрыт для записи) False (в противном случае) |
Saved |
Допустимые значения:
True (если не производились изменения в документе со времени его последнего сохранения) False (в противном случае) |
MailSystem |
Возвращает имя инсталлированных на компьютере средств работы с электронной почтой. Допустимые значения:
В следующем примере проверяется, инсталлирована ли электронная почта. Если электронная почта не установлена, то отображается соответствующее сообщение: If Application. MailSystem <> xlMAPI Then MsgBox «Microsoft Mail неинсталлирован» End If |
Методы объекта Workbook и семейства Workbooks
Методы |
Выполняемые действия |
Activate |
Активизирует рабочую книгу так, что ее первый рабочий лист становится активным.
Workbook. Activate |
Add |
Создает новый объект для семейства Workbooks.
Add (Template) Template — задает шаблон, на основе которого создается новая рабочая книга. Допустимые значения: xlWBATChart, xlWBATExce14IntlMacroSheet, xlWBATExce14MacroSheet или xlWBATWorksheet. |
Protect |
Защищает рабочую книгу от внесения в нее изменений.
Protect (Password, Structure, Windows)
В следующем примере устанавливается защита для активной рабочей книги: ActiveWorkbook. Protect Password:= «ВинниПух» |
Unprotect |
Снятие защиты с рабочей книги.
Unprotect (Password) Password — строка, используемая в качестве пароля для защиты листа ActiveWorkbook. Unprotect Password: = «ВинниПух « |
Close |
Закрытие рабочей книги |
Open |
Открытие существующей рабочей книги |
OpenText |
Открытие текстового файла, содержащего таблицу данных |
Save |
Сохранение рабочей книги |
SaveAs |
Сохранение рабочей книги в другом файле.
SaveAs (Filename) Filename — строка, указывающая имя файла, в котором будет сохранена рабочая книга ActiveBook. SaveAs Filename: = „НоваяВерсия“ |
SaveAsCopy |
Сохранить рабочую книгу в другом файле, оставляя рабочую книгу в памяти с прежним именем.
SaveAs (Filename, FileFormat) Filename — строка, указывающая имя файла, в котором будет сохранена рабочая книга ActiveBook. SaveAsCopy Filename: = „ЗапаснаяВерсия“ |
PrintPreview |
Предварительный просмотр |
Printout |
Печать содержимого рабочей книги |
SendMail |
Отсылка почты используя встроенные средства Microsoft Mail (MAPI).
SendMail (Recipients, Subject, ReturnReceipt)
В следующем примере рабочая книга отсылается по электронной почте получателю Порфирию Заковыркину: ThisWorkbook.SendMail recipients: = “ Порфирий Заковыркин» |
События объекта Workbook и семейства Workbooks
Событие |
Когда возникает событие |
BeforeClose |
При закрытии рабочей книги |
BeforePrint |
Перед печатью рабочей книги |
BeforeSave |
Перед сохранением рабочей книги |
Deactivate |
Когда рабочая книга теряет фокус |
NewSheet |
При добавлении нового листа |
Open |
При открытии рабочей книги |
SheetActivate |
При активизации любого рабочего листа |
SheetDeactivate |
Когда рабочий лист теряет фокус |
Возможно вам это будет интересно!
2019-12-21
In Excel, a workbook is one of the most important of all the Excel Objects, and it is also essential to understand how to use and refer to workbooks while writing VBA codes.
In this tutorial, we will explore all the things that you need to know. But, the first thing you need to understand are objects that are involved in using workbooks in VBA.
Objects you need to know:
- Workbooks Object
- Workbook Object
Both of these objects sound the same, but there’s a core difference between both of them.
Workbooks Object
In VBA, the workbooks object represents the collection of the workbooks that are open in Microsoft Excel. Imagine you have ten workbooks open at the same time. And you want to refer to the one workbook out of them. In that case, you need to use the workbook object to refer to that one workbook using its name.
Workbook Object
In VBA, the workbook object represents one single workbook from the entire collection of workbooks open at present in Microsoft Excel. The best way to understand this is to think about declaring a variable as a workbook that you want to use to refer to a particular workbook in the code.
Useful Links: Add Developer Tab | Visual Basic Editor | Run a Macro | Personal Macro Workbook
To work with workbooks in VBA, the first thing that you need to know is how to refer to a workbook in a macro. Here’s the happy thing: there are multiple ways to refer to a workbook. And ahead, we will explore each one of them.
1. By Name
The easiest way to refer to a workbook is to use its name. Let’s say you want to activate the workbook Book1.xlsx, in that case, the code that you need to use should be like the following:
Referring to a workbook with its name is quite simple, you need to specify the name, and that’s it. But here’s one thing that you need to take care of: if a workbook is not saved, then you need to use only the name. And if saved, then you need to use the name along with the extension.
2. By Number
When you open a workbook, Excel gives an index number to that workbook, and you can use that number to refer to a workbook. The workbook that you have opened at first will have the index number “1” and the second will have “2” and so on.
This method might seem less real to you as it’s hard to know which workbook is on which index number. But there’s one situation where this method is quite useful to use, and that’s looping through all the open workbooks.
3. By ThisWorkbook
This workbook is a property that helps you to refer to the workbook where you are writing the code. Let’s say you are writing the code in “Book1” and use the ThisWorkbook to save the workbook. Now even when you change the name of the workbook, you won’t need to change the code.
The above code counts the number of sheets in the workbook where this code is written and shows a message box with the result.
4. By ActiveWorkbook
If you want to refer to a workbook that is active, then you need to use the “ActiveWorkbook” property. The best use of this property is when you are sure which workbook is activated now. Or you have already activated the workbook that you want to work.
The above code activates the workbook “Book1” first and then uses the active workbook property to save and close the active workbook.
Access all the Methods and Properties
In VBA, whenever you refer to an object, VBA allows you to access the properties and methods that come with that object. In the same way, the workbook object comes with properties and methods. To access them, you need to define the workbook first and then enter a dot.
The moment you type a dot (.), it shows the list of properties and methods. Now, you must have a question in your mind about how to identify which one is a property and which one is a method.
Here’s the trick. If you look closely, you can identify a moving green brick and grey hand before each name on the list. So, all the properties have that grey hand before the name and methods have a moving green brick.
For example to use a Method with Workbook
Imagine you want to close a workbook (which is a method), you need to type or select “Close” from the list.
After that, you need to enter starting parentheses to get the IntelliSense to know the arguments you need to define.
With the close method, there are three arguments that you need to define, and as you can see, all these arguments are optional, and you can skip them if you want. But some methods don’t have arguments (for example: activate)
For example to use a Property with Workbook
Imagine you want to count the sheets from the workbook “book1” in that case, you need to use the “Sheets” property and then the further count property of it.
In the above code, as I said, you have book1 defined, and then the sheet property refers to all the sheets, and then the count property to count them. And when you run this code, it shows you a message box with the result.
Using “WITH” Statement with Workbook
In VBA, there’s a “With” statement that can help you work with a workbook while writing a macro efficiently. Let’s see the below example where you have three different code lines with the same workbook, i.e., ActiveWorkbook.
With the “WITH statement”, you can refer to the active workbook a single time, and use all the properties and methods that you have in the code.
- First of all, you need to start with the starting statement “With ActiveWorkbook” and end the statement with “End With”.
- After that, you need to write the code between this statement that you have in the above example.
As you can see in the above code we have referred to the ActiveWorkbook one using the WITH statement, and then all the properties and methods need to be used.
Sub vba_activeworkbook_with_statement()
With ActiveWorkbook
.Sheets.Add Count:=5
.Charts.Visible = False
.SaveAs ("C:UsersDellDesktopmyFolderbook2.xlsx")
End With
End Sub
Let me tell you a simple real-life example to make you understand everything. Imagine you ask me to go to room 215 to get the water bottle, and when I come back, you again send me to room 215 to get a pen, and then again send me back to get a laptop. Now here’s the thing: All the things that you told me to get are in room 215. So better if you sent me to room 215 and told me to get all three things at once.
Read: With – End With
Declaring a Variable as a Workbook
Sometimes you need to declare a variable as a workbook to use it further in the code. Well, this doesn’t require anything special for you to do.
- Use the DIM Statement (Declare).
- Write the name of the Variable.
- Define the type of the variable as Workbook.
Dealing with Errors
When you work with a workbook(s) object in VBA, there are chances that you need to deal with errors as well. Take an example of the “Run-time Error 9: Subscript out of Range” error. This error can occur for various reasons.
- The workbook that you are trying to refer to is not opened.
- Might be you have misspelled the name.
- The workbook you are referring to is not yet saved and you are using the extension along with the name.
- If you are using the index number to refer to a workbook and the number you have used is greater than the total number of workbooks open.
In this Article
- The Workbook Object
- Workbook Index Number
- Activate Workbook, ActiveWorkbook, and ThisWorkbook
- Activate Workbook
- ActiveWorkbook
- ThisWorkbook
- Open Workbook
- Open and Assign to Variable
- Open File Dialog
- Create New (Add) Workbook
- Add New Workbook to Variable
- Close Workbook
- Close & Save
- Close without Save
- Workbook Save As
- Other Workbook VBA Examples
- Workbook Name
- Protect Workbook
- Loop Through all Open Workbooks
- Workbook Activate Event
This guide will introduce you working with the Workbook Object in VBA.
The Workbook Object
First, in order to interact with workbooks in VBA, you must understand the Workbook Object.
With the workbook object, you can reference workbooks by their name like this:
Workbooks("Book2.xlsm").Activate
However, this code will only work if the workbook is open. If the workbook is closed, you will need to provide the full workbook path:
Workbooks.Open ("C:UsersStevePC2Downloadsbook2.xlsm")
Instead of typing out the full path, if your desired workbook is in the same directory as the workbook where your code is stored, you could use this line code to open the workbook:
Workbooks.Open (ThisWorkbook.Path & "book2.xlsm")
This makes use of the ThisWorkbook object that we will discuss in the next section.
Workbook Index Number
Last, you can reference workbooks by their “Index Number”. The index number of a workbook corresponds to the order that the workbook was opened (technically its the workbook’s position in the Workbooks Collection).
Workbooks(1).Activate
This is useful if you want to do something like close the first (or last) opened workbook.
Activate Workbook, ActiveWorkbook, and ThisWorkbook
If a workbook is NOT ACTIVE, you can access the Workbook’s objects like this:
Workbooks("Book2.xlsm").Sheets("Sheet1").Range("A1").value = 1
However, if the workbook is Active, you can omit the workbook object:
Sheets("Sheet1").Range("A1").value = 1
And if you want to interact with the workbook’s active sheet, you can also ommit the sheets object:
Range("A1").value = 1
Activate Workbook
To activate a workbook, use the Activate Method.
Workbooks("Book2.xlsm").Activate
Now you can interact with Book2’s object’s without explicitly stating the workbook name.
ActiveWorkbook
The ActiveWorkbook object always refer to the active workbook. This is useful if you’d like to assign the ActiveWorkbook to a variable to use later.
Dim wb As Workbook
Set wb = ActiveWorkbook
ThisWorkbook
The ThisWorkbook object always refers to the workbook where the running code is stored. To activate ThisWorkbook, use this line of code:
ThisWorkbook.Activate
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More
Open Workbook
To open a workbook, use the Open Method:
Workbooks.Open ("C:UsersStevePC2Downloadsbook2.xlsm")
The newly opened workbook will always become the ActiveWorkbook, allowing you to easily interact with it.
ActiveWorkbook.Save
The Open Method has several other arguments, allowing you to open read-only, open a password-protected workbook, and more. It’s covered here in our article about Opening / Closing Workbooks.
Open and Assign to Variable
You can also open a workbook and assign it to a variable at the same time:
Dim wb As Workbook
Set wb = Workbooks.Open("C:UsersStevePC2Downloadsbook2.xlsm")
Open File Dialog
You can also trigger the Open File Dialog Box like this:
Sub OpenWorkbook ()
Dim strFile As String
strFile = Application.GetOpenFilename()
Workbooks.Open (strFile)
End Sub
VBA Programming | Code Generator does work for you!
Create New (Add) Workbook
This line of code will create a new workbook:
Workbooks.Add
The new workbook now becomes the ActiveWorkbook, allowing you to interact with it (ex. save the new workbook).
Add New Workbook to Variable
You can also add a new workbook directly to a variable:
Dim wb As Workbook
Set wb = Workbooks.Add
Close Workbook
Close & Save
To close a workbook with saving, use the Close Method with SaveChanges set to TRUE:
ActiveWorkbook.Close SaveChanges:=True
Close without Save
To close without saving, set SaveChanges equal to FALSE:
ActiveWorkbook.Close SaveChanges:=False
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Workbook Save As
The SaveAs Method is used to save a workbook as.
To save a workbook with a new name, in the same directory, you can imply use this:
ActiveWorkbook.SaveAs "new"
where “new” is the new file name.
To save a workbook in a new directory with a specific file extension, simply specify the new directory and file name:
ActiveWorkbook.SaveAs "C:UsersStevePC2Downloadsnew.xlsm"
Other Workbook VBA Examples
Workbook Name
To get the name of a workbook:
MsgBox ActiveWorkbook.Name
Protect Workbook
To protect the workbook structure from editing, you can use the Protect Method (password optional):
Workbooks("book1.xlsm").Protect "password"
To unprotect a workbook use the UnProtect Method:
Workbooks("book1.xlsm").Unprotect "password"
AutoMacro | Ultimate VBA Add-in | Click for Free Trial!
Loop Through all Open Workbooks
To loop through all open workbooks:
Sub LoopThroughWBs()
Dim wb As Workbook
For Each wb In Workbooks
MsgBox wb.Name
Next wb
End Sub
Workbook Activate Event
You can run some code whenever a specific workbook is opened with the Workbook Open Event.
Place this procedure your workbook’s ThisWorkbook Module:
Private Sub Workbook_Open()
Sheets("sheet1").Activate
End Sub
This procedure will activate Sheet1 every time the workbook is opened.
Коллекции объектов
Ссылка на объект коллекции — это название коллекции, после которого в скобках указывается индекс объекта или его имя в кавычках. Например, ссылка Workbooks(1) выбирает первую из открытых рабочих книг, а Workbooks(«budget») ссылается на рабочую книгу с именем «budget».
Важно
- Количество элементов коллекции заранее не фиксируется.
- Новый элемент может быть добавлен в произвольное место коллекции.
- Элементы коллекции перенумеровываются при удалении или добавлении элементов в коллекцию.
- Различные коллекции объектов имеют общие методы и свойства, но параметры вызова методов могут различаться.
Объекты Workbooks и Workbook
Документ MS Excel (рабочая книга) это объект Workbook. Можно одновременно работать с несколькими рабочими книгами. Открытые рабочие книги составляют коллекцию рабочих книг — Workbooks.
Свойство Workbooks объекта Application возвращает объект Workbooks.
При открытии или создании рабочей книги элемент Workbook автоматически добавляется в конец коллекции Workbooks, а при закрытии книги соответствующий элемент также автоматически удаляется из коллекции.
Свойства и методы | Примеры операторов и комментарии |
---|---|
Объект Workbooks | |
Свойство Count (R/O Long) | MsgBox «Число открытых рабочих книг » & Workbooks.Count высвечивает число рабочих книг в коллекции |
Метод Add | Workbooks.Add добавляет новую рабочую книгу в коллекцию |
Метод Close | Workbooks.Close используется без аргументов и закрывает все рабочие книги |
Объект Workbook | |
Свойство Colors | Свойство, заданное с индексом, указывает на конкретный элемент палитры. ActiveWorkbook.Colors(5) = RGB(255,0,0) заменяет пятый цвет палитры на красный |
Свойство без индекса возвращает палитру цветов в виде массива из 56 цветов.
ActiveWorkbook.Colors = Workbooks(«AIR.XLS»).Colors заменяет палитру активной книги на палитру цветов книги AIR.XLS. |
|
Свойство Name (R/O String) | MsgBox Workbooks(Workbooks.Count).Name высвечивает имя последней открытой книги |
Свойство FullName (R/O String) | MsgBox ActiveWorkbook.FullName возвращает полное имя активной рабочей книги, включая путь к ней |
Свойство Sheets | ThisWorkbook.Sheets.Count возвращает количество элементов в коллекции листов различных типов рабочей книги, содержащей выполняемый код |
Свойство Charts | ActiveWorkbook.Charts(1).Name возвращает имя первого листа в коллекции диаграммных листов активной книги |
Свойство Worksheets | Workbooks(1).Worksheets(1).Activate активизирует первый лист из коллекции рабочих листов |
Метод Open | Workbooks.Open «AIR.xls» открывает существующую рабочую книгу AIR.xls |
Метод Close |
ActiveWorkbook.Close SaveChanges:=True, Filename=»AIR« закрывает рабочую книгу. Книга удаляется из коллекции, и элементы коллекции Workbooks перенумеровываются.
Параметр SaveChanges сохраняет или отменяет сделанные изменения. Параметр Filename задает название новой рабочей книги |
Метод Activate | Workbooks(«AIR.XLS»).Activate активизирует указанную рабочую книгу |
Метод SaveAs | ActiveWorkbook.SaveAs FileName:=»d:bel_accfirst_book» сохраняет рабочую книгу под именем Filename. Если в Filename папка не указана, то файл сохраняется в текущей папке |
Событийные процедуры
Событийные процедуры записываются на процедурном листе, связанном с объектом. Каждый объект имеет свои собственные события.
Чтобы вставить событийную процедуру для объекта Workbook
- выделите объект ThisWorkbook (Эта книга) в окне проекта;
- перейдите на лист процедур, нажав клавишу F7. Можно выполнить команду View Code или сделать двойной щелчок на объект ThisWorkbook ;
- на процедурном листе в окне выбора объектов (вверху слева) выберите объект Workbook ;
- в окне выбора событий (вверху справа) выберите событие. Автоматически вставляется процедура со стандартным именем, которое состоит из названия объекта и названия события, разделенных нижним подчеркиванием (_), например, для события Open событийная процедура имеет имя Workbook_Open ;
- запишите текст процедуры.
Пример
При вставке нового листа в рабочую книгу процедура запрашивает имя нового листа и вставляет лист в начало рабочей книги.
|
При выборе события NewSheet автоматически появляется новая процедура Workbook_NewSheet с параметром Sh. |
Значение параметра, являющееся ссылкой на объект — новый лист, передается процедуре во время ее выполнения. Метод Move перемещает вставленный лист. Параметр before этого метода определяет новое месторасположение листа — начало рабочей книги.
Объекты Sheets, WorkSheets и WorkSheet
Коллекция Sheets представляет собой совокупность листов различных типов — рабочих листов (коллекция Worksheets ) и листов диаграмм (коллекция Charts ). Таким образом, каждый элемент коллекции Sheets является элементом коллекции WorkSheets или коллекции Charts и наоборот, любой элемент коллекции WorkSheets или коллекции Charts принадлежит коллекции Sheets.
Свойства и методы | Примеры и комментарии |
---|---|
Объекты Sheets, WorkSheets | |
Свойство Count (R/O Long) | MsgBox «Количество рабочих листов в активной книге » & ActiveWorkbook.WorkSheets.Count высвечивает количество рабочих листов в рабочей книге |
Метод Add | Sheets.Add, WorkSheets.Add добавляет новый лист заданного типа в рабочую книгу |
Объекты Sheets, WorkSheets, Sheet, WorkSheet | |
Методы Copy, Move | Копирует, перемещает указанные листы или группу листов в новое место. Worksheets(1).Move after:=Worksheets(Worksheets.Count) перемещает первый лист в конец рабочей книги |
Объекты Sheet, WorkSheet | |
Метод Activate | WorkSheets(«January»).Activate активизирует указанный рабочий лист |
Метод Delete | ActiveWorkbook.Worksheets(1).Delete удаляет первый рабочий лист |
Свойство Name (R/W String) | Возвращает или устанавливает имя листа. WorkSheets(WorkSheets.Count).Name =»LastSheet» переименовывает последний рабочий лист |
Объекты WorkSheet | |
Свойство Columns (R/O) | Возвращает коллекцию столбцов. Worksheets(1).Columns(1).Font.Bold = True устанавливает полужирный шрифт для первой колонки первого рабочего листа |
Свойство ScrollArea (R/W String) | Определяет границы интервала, внутри которого возможно перемещение по ячейкам. При установке значения «пустая строка» доступны все ячейки рабочего листа. Worksheets(1).ScrollArea = «A1:F10» разрешает доступ только к ячейкам A1:F10 |
Свойство Shapes (R/O) | Возвращает коллекцию Shapes — коллекцию графических объектов рабочего листа: рисунки, автофигуры и т.д. ActiveSheet.Shapes(1).AutoShapeType = 21 меняет тип первого графического объекта активного листа на «сердечко» |
Свойство Rows(R/O) | Возвращает коллекцию строк. Worksheets(«Sheet1»).Rows(3).Delete удаляет третью строку |
Метод Calculate | ActiveWorksheet.Calculate производит вычисления во всех ячейках указанного рабочего листа |
Метод CheckSpelling | Используется для проверки правописания (с аргуменами и без аргументов). ActiveSheet.CheckSpelling ignoreUppercase:= True не проверяет слова, записанные только прописными буквами |
Методы
Метод Add
Добавляет новый лист в коллекцию Sheets, WorkSheets. При создании рабочей книги коллекция WorkSheets содержит столько рабочих листов, сколько определено свойством SheetsInNewWorkbook объекта Application.
Внимание
- Метод Add для объектов Workbooks и Sheets имеет различный синтаксис.
Cинтаксис метода для коллекций Sheets, WorkSheets
expression.Add([Before] [,After] [,Count] [,Type])
- expression — выражение, возвращающее коллекцию WorkSheets или Sheets. Указание обязательно;
-
Before 1Возможно задание только одного из двух параметров Before или After
— специфицирует лист, перед которым вставляется новый лист; -
After 2Возможно задание только одного из двух параметров Before или After
— специфицирует лист, после которого вставляется новый лист; - Count — количество вставляемых листов;
- Type — тип вставляемого листа. Используются константы: xlWorksheet (по умолчанию), xlChart (только для объекта Sheets ), xlExcel4MacroSheet, xlExcel4IntlMacroSheet.
Важно
- При отсутствии всех параметров один рабочий лист добавляется перед активным листом.
- При задании параметров Before и After указывается ссылка на лист как индекс или имя в коллекции листов, например, Sheets(1) или Sheets(«Лист1»)
Методы Move и Select
Метод Move используется для перемещения листов.
Синтаксис expression.Move([Before] [,After])
- expression — ссылка на объект, представляющий перемещаемый лист. Указание обязательно;
- необязательные параметры before и after (ссылки на лист, см. описание метода Add ) определяют новое местоположение перемещаемого листа. Если не указан ни один из параметров, то лист перемещается во вновь создаваемую рабочую книгу.
Метод Select выделяет объект. При применении к одному листу методы Activate и Select активизируют указанный лист. Но метод Select используется для группировки листов, т.е. для расширения выделения.
Синтаксис expression.Select([Replace])
- expression — ссылка на объект, представляющий выделяемый лист. Указание обязательно;
- Replace — для расширения выделения аргумент устанавливается в False. Если аргумент не задан или принимает значение True, то вместо старой области выделения создается новая область выделения. Необязательный параметр.
Замечание
- Для выделения листов с конкретными именами используйте функцию Array. Например, Sheets(Array(«Лист8», «Лист12»)).Select.
Пример
Процедура перемещает нечетные листы в конец рабочей книги. В цикле выделяются нечетные листы.
Событийные процедуры
Чтобы вставить событийную процедуру для объекта WorkSheet:
- выделите объект WorkSheet (например, Лист1 ) в окне проекта;
- перейдите на лист процедур этого объекта;
- на процедурном листе в окне объектов (вверху слева) выберите объект WorkSheet ;
- в окне выбора событий (вверху справа) выберите событие;
- запишите текст процедуры.
При выборе события автоматически вставляется процедура со стандартным именем, которое состоит из названия листа и названия события, разделенных нижним подчеркиванием (_).
Пример
При активизации листа Лист1 в ячейку A1 заноситcя название листа.
Рис.
8.8.
Пример работы с событийной процедурой объекта WorkSheet
Объект Range
При работе в MS Excel чаще всего выполняются некоторые действия с группой ячеек рабочего листа. Объект Range — это отдельная ячейка, целиком строка или столбец рабочего листа, выделенный интервал ячеек, непрерывный интервал ячеек или интервал несмежных ячеек.
Для задания объекта Range существуют различные возможности. Например, благодаря свойству ActiveCell, активная ячейка представляется в качестве объекта Range. Свойство Selection определяет выделенный интервал ячеек в качестве объекта Range.
Свойства и методы | Применимы к объектам | Примеры и комментарии |
---|---|---|
Свойство ActiveCell | Application | Оператор ActiveCell.Value=10 устанавливает значение активной ячейки равным 10 |
Свойство Areas | Range | Оператор Range(«A1, B5:B10, C12:C20»).Areas(3).Value = 10 устанавливает значение 10 для третьей области объекта Range — для ячеек интервала C12:C20 |
Свойство Cells | Application, Range, Worksheet | Оператор Cells(7,3).Select активизирует ячейку C7 и равносилен оператору Range(«C7»).Select |
Свойство Columns | Application, Range, Worksheet | Оператор Columns(«A:D»).Select выделяет первые четыре столбца |
Свойство CurrentRegion | Range | Оператор ActiveCell.CurrentRegion.Count подсчитывает количество ячеек с данными в интервале, окружающем активную ячейку |
Свойство Offset | Range | Операторы Range («A2:B10»).Select, Selection.Offset(2,2).Value=10 устанавливают значение 10 каждой ячейки интервала C4:D12.
Равносильно записи Range(«C4:D12»).Value=10 |
Свойство Range | Application, Range, Worksheet | Операторы p=Range(«A:B»).Count, p=Range(«налог»).Count, p=ActiveSheet.Range(«A1:A10«).Count, p=Range(«1:3»).Count, p=Range(«A1:C2, B10:D24″).Count присваивают переменной p количество ячеек в заданных интервалах |
Свойство Rows | Application, Range, Worksheet | Оператор Rows(«1:3»).Select выделяет первые три строки |
Свойство Selection | Application | Оператор Selection.Clear очищает выделенный интервал ячеек |
Метод Union | Range | Union(Range(«A1:C5»), Range(«B10:D12») объединяет два несмежных интервала в один объект Range |
ЗАМЕЧАНИЯ
- Все перечисленные свойства возвращают объект Range, не активизируя новую ячейку.
- Ячейка остается активной до тех пор, пока методы Activate или Select не активизируют новую ячейку.