Vba excel чем отличается sheets от worksheets
Ссылка на объект коллекции - это название коллекции, после которого в скобках указывается индекс объекта или его имя в кавычках. Например, ссылка Workbooks (1) выбирает первую из открытых рабочих книг , а Workbooks ("budget") ссылается на рабочую книгу с именем "budget" .
- Количество элементов коллекции заранее не фиксируется.
- Новый элемент может быть добавлен в произвольное место коллекции.
- Элементы коллекции перенумеровываются при удалении или добавлении элементов в коллекцию.
- Различные коллекции объектов имеют общие методы и свойства, но параметры вызова методов могут различаться.
Объекты Workbooks и Workbook
Документ MS Excel ( рабочая книга ) это объект Workbook . Можно одновременно работать с несколькими рабочими книгами . Открытые рабочие книги составляют коллекцию рабочих книг - Workbooks .
Свойство Workbooks объекта Application возвращает объект Workbooks .
При открытии или создании рабочей книги элемент Workbook автоматически добавляется в конец коллекции Workbooks , а при закрытии книги соответствующий элемент также автоматически удаляется из коллекции.
ActiveWorkbook.Colors = Workbooks (" AIR .XLS").Colors заменяет палитру активной книги на палитру цветов книги AIR .XLS .
Параметр SaveChanges сохраняет или отменяет сделанные изменения. Параметр Filename задает название новой рабочей книги
Событийные процедуры
Событийные процедуры записываются на процедурном листе, связанном с объектом. Каждый объект имеет свои собственные события.
Чтобы вставить событийную процедуру для объекта Workbook
- выделите объект ThisWorkbook (Эта книга) в окне проекта;
- перейдите на лист процедур, нажав клавишу F7. Можно выполнить команду View Code или сделать двойной щелчок на объект ThisWorkbook ;
- на процедурном листе в окне выбора объектов (вверху слева) выберите объект Workbook ;
- в окне выбора событий (вверху справа) выберите событие. Автоматически вставляется процедура со стандартным именем, которое состоит из названия объекта и названия события, разделенных нижним подчеркиванием (_), например, для события Open событийная процедура имеет имя Workbook_Open ;
- запишите текст процедуры.
При вставке нового листа в рабочую книгу процедура запрашивает имя нового листа и вставляет лист в начало рабочей книги .
Значение параметра, являющееся ссылкой на объект - новый лист, передается процедуре во время ее выполнения. Метод Move перемещает вставленный лист. Параметр before этого метода определяет новое месторасположение листа - начало рабочей книги .
Объекты Sheets, WorkSheets и WorkSheet
Коллекция Sheets представляет собой совокупность листов различных типов - рабочих листов (коллекция Worksheets ) и листов диаграмм (коллекция Charts ). Таким образом, каждый элемент коллекции Sheets является элементом коллекции WorkSheets или коллекции Charts и наоборот, любой элемент коллекции WorkSheets или коллекции Charts принадлежит коллекции Sheets .
Методы
Метод Add
Добавляет новый лист в коллекцию Sheets , WorkSheets . При создании рабочей книги коллекция WorkSheets содержит столько рабочих листов , сколько определено свойством SheetsInNewWorkbook объекта Application .
- Метод Add для объектов Workbooks и Sheets имеет различный синтаксис.
Cинтаксис метода для коллекций Sheets , WorkSheets
- 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 .
I use the terms Sheet and Worksheet interchangeably when talking about Excel, I think most users do. Google also appears to think they are the same thing; If I search for “How to loop through Sheets with Excel VBA”, all the results returned on the first page refer to Worksheets.
Yet, Sheets and Worksheets from a VBA perspective are definitely not the same. Unfortunately, most of the VBA code I write doesn’t really consider the differences… bad habits, I know. Hopefully, by writing this post it will inspire me to correct my bad habits, and prevent you from creating bad habits.
The difference between Sheets and Worksheets
- Worksheet – the sheet with the gridlines and cells
- Chart – the sheet which contains a single chart
- DialogSheet – an Excel 5 dialog sheet. These are effectively defunct as they have been replaced by VBA UserForms
- Macro sheets – A sheet containing Excel 4 macros. These were replaced by VBA in 1995.
- International Macro sheet – A sheet containing an internationally compatible Excel 4 macro (also replaced in 1995).
Since DialogSheets, and both forms of Macro sheets were replaced in the 90’s, we can pretty much ignore them. That leaves just two types of sheets we are likely to encounter: Charts and Worksheets.
So, in summary, when we refer to Sheets in VBA, we are talking about Charts and Worksheets. And when we refer to Worksheets, we are excluding Charts.
What type of sheet is it?
Different sheet types have their own properties. For example, on a Worksheet you can select cells, but you can’t on a Chart sheet, because there are no cells. So, if we want to perform certain actions on the active sheet, we need to know which type of sheet we are on.
Running the code above will generate a message box with either “Worksheet” or “Chart” depending on the type of sheet.
Objects and collections
Understanding objects and collections will help us master the use of Charts, Worksheets and Sheets.
Worksheet – A Worksheet is an object which refers to a single worksheet. Each worksheet is a member of the Worksheets and Sheets collection objects.
Worksheets – Worksheets is a collection object which contains all the individual Worksheet objects in a workbook.
- Can be contained within a Chart Object for a chart contained on the face of the worksheet (outside the scope of this post).
- Can be a member of the Charts and Sheets collection objects.
Charts – Charts is a collection object which contains all the individual Chart sheet objects within a workbook. This should not be confused with the ChartObjects object, which is the collection of charts contained on the face of the worksheet.
Sheets – Sheets is a collection object which contains all the individual Worksheet and Chart sheet objects in a workbook.
Do you know the fastest way to learn foreign languages? It is to read, write, speak, and think in that language as often as possible. Apart from speaking, programming languages are no different. The more you immerse yourself in that language, the faster you will pick it up.
- 100 example codes to practice reading and writing macros that will embed the language into your thinking.
- An introduction to macros in Excel to ensure you can implement the VBA code in the book even if you have no prior knowledge.
- Consistent code layout between examples to enable you to understand the structure and easily customize the code to meet your needs.
- Downloadable workbook containing all the source code, so the examples can be added to your project to give you the benefit of VBA straight away.
Looping through Sheets, Worksheets and Charts
When using the For Each loop, we are looping through each object within a collection.
Example 1 – Looping through each Worksheet in the Worksheets collection
The VBA code below will loop through each Worksheet in the Worksheets collection.
Example 2 – Looping through each Chart in the Charts collection
The following code will loop through each Chart in the Charts collection.
Example 3 – Looping through each Object in the Sheets collection
To loop through every sheet, we cannot declare a Sheet object, because it doesn’t exist. The example below loops through every object (i.e. it will include Chart and Worksheet objects) contained within the Sheets collection.
Example 4 – Looping through every Sheet in the Sheets collection
As an alternative to Example 3, we could count the sheets, then loop using a For loop.
This method of looping by counting the objects will work equally well with Charts and Worksheets.
Get our FREE VBA eBook of the 30 most useful Excel VBA macros.
Automate Excel so that you can save time and stop doing the jobs a trained monkey could do.
By entering your email address you agree to receive emails from Excel Off The Grid. We’ll respect your privacy and you can unsubscribe at any time.
Don’t forget:
If you’ve found this post useful, or if you have a better approach, then please leave a comment below.
Do you need help adapting this to your needs?
I’m guessing the examples in this post didn’t exactly meet your situation. We all use Excel differently, so it’s impossible to write a post that will meet everybody’s needs. By taking the time to understand the techniques and principles in this post (and elsewhere on this site) you should be able to adapt it to your needs.
- Read other blogs, or watch YouTube videos on the same topic. You will benefit much more by discovering your own solutions.
- Ask the ‘Excel Ninja’ in your office. It’s amazing what things other people know.
- Ask a question in a forum like Mr Excel, or the Microsoft Answers Community. Remember, the people on these forums are generally giving their time for free. So take care to craft your question, make sure it’s clear and concise. List all the things you’ve tried, and provide screenshots, code segments and example workbooks.
- Use Excel Rescue, who are my consultancy partner. They help by providing solutions to smaller Excel problems.
What next?
Don’t go yet, there is plenty more to learn on Excel Off The Grid. Check out the latest posts:
Are there any differences or different properties between them? Can they be used synonymously?
Excel Facts
Ron Coderre
MrExcel MVP
The SHEETS object is a parent object for:
Worksheets
Chart Sheets
If a workbook has 3 worksheets and 1 chart sheet, in VBA:
Sheets.Count will include both types. 4
Worksheets.Count will include only worksheets. 3
Jacques
Board Regular
Awesome Ron, now I understand! Thank you for taking the time to explain it.Chekie
Board Regular
The SHEETS object is a parent object for:Worksheets
Chart Sheets
A parent object for Sheets/Worksheets collection is Workbook.
scottylad2
Well-known Member
Almost 1:30am here. Worksheets. for me to hide from my boss in the morning!
Sheets. for me, any minute soon, with a pillow and duvet of course lol
Ron Coderre
MrExcel MVP
A parent object for Sheets/Worksheets collection is Workbook. True, I used the wrong word.Sheets is a collection of Charts and Worksheets.
pgc01
MrExcel MVP
Not really relevant, as you probably will never encounter it.
Sheets collection contains all types of sheets. Although today we only use 2 types of Sheets, Worksheets and Chart Sheets, there used to be 3 more types of Sheets, like Dialog Sheets or Macro Sheets. You may still have in your company old excel files that use them. In that case if you check the Sheets collection you'll seem them all there.
Sheets - collection of the Sheets of all types
Worksheets - collection of Sheets of type Worksheet
Charts - collection of Sheets of type Chart Sheet
dumitrudan608
New Member
/!\ In VBA you should use Worksheets() instead of Sheets() when referencing a sheet from another sheet in a formula. This solved some issues i had, maybe you need to be specific about the sheet type this way.
Not really relevant, as you probably will never encounter it.
Sheets collection contains all types of sheets. Although today we only use 2 types of Sheets, Worksheets and Chart Sheets, there used to be 3 more types of Sheets, like Dialog Sheets or Macro Sheets. You may still have in your company old excel files that use them. In that case if you check the Sheets collection you'll seem them all there.
Sheets - collection of the Sheets of all types
Worksheets - collection of Sheets of type Worksheet
Charts - collection of Sheets of type Chart Sheet
This is the ultimate guide to working with Sheets / Worksheets in Excel.
Sheets Vs. Worksheets
There are two ways to reference Sheets using VBA. The first is with the Sheets object:
The other is with the Worksheets object:
The Sheets Collection contains Worksheets AND Chart Sheets.
So use Sheets if you want to include regular Worksheets AND Chart Sheets. Use Worksheets if you want to exclude Chart Sheets. For the rest of this guide we will use Sheets and Worksheets interchangeably.
Referencing Sheets
There are several different ways to reference Sheets:
- ActiveSheet
- Sheet Tab Name
- Sheet Index Number
- Sheet Code Name
ActiveSheet
Sheet Name
You are probably most familiar with referencing Sheets by their Tab Name:
Sheet Index Number
The Sheet Index number is the sheet position in the workbook. 1 is the first sheet. 2 is the second sheet etc.:
To reference the last Sheet in the workbook, use Sheets.Count to get the last Index Number:
Referencing Sheets in Other Workbooks
Workbooks ( "VBA_Examples.xlsm" ) . Worksheets ( "Sheet1" ) . ActivateActivate vs. Select Sheet
In another article we discuss everything about activating and selecting sheets. The short version is this:
When you Activate a Sheet it becomes the ActiveSheet. This is the sheet you would see if you looked at your Excel program. Only one sheet may be activate at a time.
Activate a Sheet
Select a Sheet
Great Product. AutoMacro doesn't just write your code, it teaches as you go!" - Tony, UK
Select Multiple Sheets
Use an array to select multiple sheets at once:
Worksheet Variable
To declare a worksheet variable:
Assign a worksheet to a variable:
Now you can reference the worksheet variable in your code:
Loop Through All Sheets in Workbook
Worksheet variables are essential when you want to loop through all the worksheets in a workbook. The easiest way to do this is:
This code will loop through all worksheets in the workbook, displaying each worksheet name in a message box. Looping through all the sheets in a workbook is very useful when locking / unlocking or hiding / unhiding multiple worksheets at once.
Worksheet Protection
Workbook Protection
Workbook protection locks the workbook from structural changes like adding, deleting, moving, or hiding worksheets.
You can turn on workbook protection using VBA:
or disable workbook protection:
Note: You can also protect / unprotect without a password by omitting the Password argument:
Worksheet Protection
Worksheet-level protection prevents changes to individual worksheets.
Protect Worksheet
Unprotect Worksheet
There are a variety of options when protecting worksheets (allow formatting changes, allow user to insert rows, etc.) We recommend using the Macro Recorder to record your desired settings.
We discuss worksheet protection in more detail here.
Worksheet Visible Property
You might already know that worksheets can be hidden:
Unhide Worksheet
Hide Worksheet
Very Hide Worksheet
Worksheet-Level Events
Worksheet event procedures must be placed in a worksheet module:
Worksheet Activate Event
Worksheet activate events run each time the worksheet is opened.
This code will select cell A1 (resetting the view area to the top-left of the worksheet) each time the worksheet is opened.
Worksheet Change Event
Worksheet change events run whenever a cell value is changed on the worksheet. Read our tutorial about Worksheet Change Events for more information.
Worksheet Cheat Sheet
Below you will find a cheat sheet containing common code examples for working with sheets in VBA
VBA Worksheets Cheatsheet
VBA worksheets Cheatsheet
Description | Code Example |
---|---|
Referencing and Activating Sheets | |
Tab Name | Sheets("Input").Activate |
VBA Code Name | Sheet1.Activate |
Index Position | Sheets(1).Activate |
Select Sheet | |
Select Sheet | Sheets("Input").Select |
Set to Variable | Dim ws as Worksheet Set ws = ActiveSheet |
Name / Rename | ActiveSheet.Name = "NewName" |
Next Sheet | ActiveSheet.Next.Activate |
Loop Through all Sheets | Dim ws as Worksheet |
VBA Code Generator
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Читайте также: