Выбрать активный лист vba excel

Return to VBA Code Examples

In this Article

  • ActiveSheet
    • Activate Worksheet (Setting the ActiveSheet)
    • ActiveSheet Name
  • Selected Sheets vs ActiveSheet
  • Select Worksheet
    • Select Worksheet by Tab Name
    • Select Worksheet by Index Number
    • Select Worksheet With VBA Code Name
    • Select Current Worksheet
  • More Activate / Select Sheet Examples
    • Set ActiveSheet to Variable
    • Change ActiveSheet Name
    • With ActiveSheet
    • Loop Through Selected Sheets
    • GoTo Next Sheet
  • VBA Coding Made Easy

This article will discuss the ActiveSheet object in VBA. It will also discuss how to activate, select, and go to Worksheets (& much more). Read our full VBA Worksheets Guide for more information about working with worksheets in VBA.

ActiveSheet

In VBA, ActiveSheet refers to the currently active Worksheet. Only one Sheet may be active at a time.

Activate Worksheet (Setting the ActiveSheet)

To set the ActiveSheet use Worksheet.Activate:

Worksheets("Input").Activate

The Activate Sheet command will actually “go to” the sheet, changing the visible Sheet.

vba activate sheet

The above example uses the Sheet (Tab) name.  Instead you can use the VBA code name for the worksheet:

Sheet1.Activate

vba activesheet

ActiveSheet Name

To get the ActiveSheet Name:

msgbox ActiveSheet.name

Selected Sheets vs ActiveSheet

At any point in time, only one Sheet can be the ActiveSheet. However, multiple Worksheets can be selected at once.

When multiple Worksheets are selected only the “top-most” Worksheet is considered active (the ActiveSheet).

vba selected sheets

Select Worksheet

If you would like to select a worksheet instead of activating it. Use .Select instead.

Select Worksheet by Tab Name

This selects a Worksheet based on it’s Sheet Tab Name

Sheets("Input").Select

vba select sheet

Select Worksheet by Index Number

This selects a Worksheet based on it’s position relative to other tabs

Worksheets(1).Select

vba select sheet index number

Select Worksheet With VBA Code Name

Sheet1.Select

Selecting worksheets by code name can prevent errors caused by worksheet name changes.

Select Current Worksheet

To select the current Worksheet, use the ActiveSheet object:

ActiveSheet.Select

More Activate / Select Sheet Examples

VBA Programming | Code Generator does work for you!

Set ActiveSheet to Variable

This will assign the ActiveSheet to a Worksheet Object Variable.

Dim ws As Worksheet

Set ws = ActiveSheet

Change ActiveSheet Name

This will change the ActiveSheet Name.

ActiveSheet.Name = "NewName"

With ActiveSheet

Using the With Statement allows you to streamline your code when working with objects (such as Sheets or ActiveSheet).

With ActiveSheet
    .Name = "StartFresh"
    .Cells.Clear
    .Range("A1").Value = .Name
End With

Notice how you don’t need to repeat “ActiveSheet” before each line of code. This can be a huge time saver when working with a long list of commands.

Loop Through Selected Sheets

The following macro will Loop through all selected sheets, displaying their names.

Sub GetSelectedSheetsName()
    Dim ws As Worksheet

    For Each ws In ActiveWindow.SelectedSheets
         MsgBox ws.Name
    Next ws

End Sub

GoTo Next Sheet

This code will go to the next Sheet. If the ActiveSheet is the last Sheet, then it will go to the first Sheet in the Workbook.

If ActiveSheet.Index = Worksheets.Count Then
    Worksheets(1).Activate
Else
    ActiveSheet.Next.Activate
End If

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!

Select Activate Worksheet

Learn More!

<<Return to VBA Examples

Содержание

  • ActiveSheet
  • Выбранные листы против ActiveSheet
  • Выберите рабочий лист
  • Дополнительные примеры активации / выбора листов

В этой статье будет обсуждаться объект ActiveSheet в VBA. Также будет обсуждаться, как активировать, выбирать и переходить к рабочим листам (и многое другое). Прочтите наше полное руководство по рабочим листам VBA для получения дополнительной информации о работе с рабочими листами в VBA.

В VBA ActiveSheet относится к текущему активному рабочему листу. Одновременно может быть активен только один лист.

Активировать рабочий лист (настройка ActiveSheet)

Чтобы установить ActiveSheet, используйте Worksheet.Activate:

1 Рабочие листы («Ввод»). Активировать

Команда «Активировать лист» фактически «перейдет» к листу, изменив видимый лист.

В приведенном выше примере используется имя листа (вкладка). Вместо этого вы можете использовать кодовое имя VBA для рабочего листа:

Имя ActiveSheet

Чтобы получить имя ActiveSheet:

1 msgbox ActiveSheet.name

Выбранные листы против ActiveSheet

В любой момент времени ActiveSheet может быть только один лист. Однако можно выбрать сразу несколько листов.

Когда выбрано несколько листов, активным считается только самый верхний лист (ActiveSheet).

Выберите рабочий лист

Если вы хотите выбрать лист вместо его активации. Вместо этого используйте .Select.

Выбрать лист по имени вкладки

Это выбирает рабочий лист на основе его имени вкладки листа

1 Таблицы («Ввод»). Выбрать

Выбрать лист по порядковому номеру

Это выбирает рабочий лист на основе его положения относительно других вкладок.

1 Рабочие листы (1) .Выбрать

Выберите рабочий лист с кодовым именем VBA

Выбор листов по имени кода может предотвратить ошибки, вызванные изменением имени листа.

Выбрать текущий лист

Чтобы выбрать текущий рабочий лист, используйте объект ActiveSheet:

Дополнительные примеры активации / выбора листов

Установите ActiveSheet на переменную

Это назначит ActiveSheet переменной объекта рабочего листа.

123 Dim ws как рабочий листУстановить ws = ActiveSheet

Изменить имя ActiveSheet

Это изменит имя ActiveSheet.

1 ActiveSheet.Name = «NewName»

С ActiveSheet

Использование оператора With позволяет оптимизировать код при работе с объектами (такими как листы или ActiveSheet).

12345 С ActiveSheet.Name = «StartFresh».Cells.Clear.Range («A1»). Value = .NameКонец с

Обратите внимание, что вам не нужно повторять ActiveSheet перед каждой строкой кода. Это может значительно сэкономить время при работе с длинным списком команд.

Перебирать выбранные листы

Следующий макрос будет проходить по всем выбранным листам, отображая их имена.

12345678 Sub GetSelectedSheetsName ()Dim ws как рабочий листДля каждого ws в ActiveWindow.SelectedSheetsMsgBox ws.NameСледующий wsКонец подписки

Перейти к следующему листу

Этот код перейдет на следующий лист. Если ActiveSheet является последним листом, он перейдет к первому листу в рабочей книге.

12345 Если ActiveSheet.Index = Worksheets.Count, тоРабочие листы (1) .АктивироватьЕщеActiveSheet.Next.ActivateКонец, если

Вы поможете развитию сайта, поделившись страницей с друзьями

 

Анна Важенина

Пользователь

Сообщений: 25
Регистрация: 05.08.2015

#1

22.11.2018 16:38:19

Добрый вечер форумчане! Помогите люди добрые! :)
Таблицу из одного файла копирую в другой файл «учет комплектаций». Но в учете комплектаций 2 листа. И с каким активным листом был закрыт этот файл, в тот лист макрос и вставит! А мне нужно в определенный лист тоже «учет комплектаций». Пытаюсь конкретизировать Sheets(«учет комплектаций»).Select после открытия файла — перестает работать! говорит «Subscript out of range».

Макрос я слепила из разных советов профессионалов + моих мучений ,чтобы работало в моем случае… :)

Код
Function IsBookOpen(wbFullName As String) As Boolean
    Dim iFF As Integer, retval As Boolean
    iFF = FreeFile
    On Error Resume Next
    Open wbFullName For Random Access Read Write Lock Read Write As #iFF
    retval = (Err.Number <> 0)
    Close #iFF
    IsBookOpen = retval
End Function

Sub выгрузить()
' Копирует таблицы в первую пустую ячейку
 Application.ScreenUpdating = False
 
 Dim Sh1 As Worksheet
 Set Sh1 = ActiveSheet

 
 MsgBox "Файл 'учет комплектаций'" & IIf(IsBookOpen("\SERVER...учет_комплектаций.xlsm"), " уже открыт", " не занят")

 Sh1.Activate
Dim Rk, Rk0 ''назначение переменных  РАБОТАЕТ!!!
Rk = Columns("A").Rows(294).End(xlUp).Row '''' определение первой пустой ячейки в колонке А
Range("A9:H" & Rk).Select '' выбор блока ячеек в текущем листе
Selection.Copy '' копирование выбранного

Workbooks.Open Filename:= _
        "\SERVER...учет_комплектаций.xlsm"
 Sheets("учет комплектаций").Select   ''-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! если это не вставлять, то все работает. Но таблица может попасть не в тот лист
   
 Dim Sh2 As Worksheet
 Set Sh2 = ActiveSheet


Rk0 = Columns("B").Rows(65000).End(xlUp).Row '' тоже самое определение первой пустой ячейки (точнее последней заполненной)
 
 
Range("B" & Rk0 + 1).Select '' а вот здесь выбор первой пустой
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '' вставка из буфера


Sh1.Activate
   Range("D2").Select
   Selection.Copy
Workbooks("учет_комплектаций.xlsm").Activate
Range("A" & Rk0 + 1 & ":A" & Rk0 + 1 + Rk - 7).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    Dim i As Long
    For i = Range("H" & Rows.Count).End(xlUp).Row To Rk0 Step -1
        If Range("H" & i) = 0 Or Range("H" & i) = "" Then
            Range("A" & i).Delete Shift:=xlUp
        End If
    Next i
  

Application.CutCopyMode = False   ' очистка буфера обмена

 Application.ScreenUpdating = True
 
End Sub

Прикрепленные файлы

  • ДОКУМЕНТАЦИЯ.xlsm (37.15 КБ)
  • учет_комплектаций.xlsm (21.19 КБ)

Изменено: Анна Важенина22.11.2018 17:42:47

 

alexleoix

Пользователь

Сообщений: 434
Регистрация: 08.03.2014

#2

22.11.2018 16:55:31

да уж, название темы не для слабонервных.
Самый постой вариант — перед закрытием книги активировать необходимый Вам лист

В модуль книги:

Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Sheets("НАЗВАНИЕ ЛИСТА").Activate
End Sub

НАЗВАНИЕ ТЕМЫ: «Cделать лист активным средствами VBA»

 

Эххх… Кажется все добрые живут не в европейской части России, где уже поздно и они ушли спать… Ладно, может завтра…

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

#4

22.11.2018 18:29:00

Анна Важенина, код

Код
 Sheets("учет комплектаций").Select   ''-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! если это не вставлять, то все работает. Но таблица может попасть не в тот лист

находится  в модуле «ЭтаКнига» и именно в ней (ДОКУМЕНТАЦИЯ.xlsm) вы пытаетесь выделить лист, что неправильно(и нет в ней такого листа — отсюда и ошибка).
Попробуйте так —

Код
 ActiveWorkbook.Sheets("учет комплектаций").Select   ''-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! если это не вставлять, то все работает. Но таблица может попасть не в тот лист

Изменено: Апострофф22.11.2018 18:35:46

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

#5

22.11.2018 19:51:31

Цитата
Анна Важенина написалА:
Эххх… Кажется все добрые живут не в европейской части России

Обидно за европейскую часть…

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

#6

22.11.2018 20:25:41

Цитата
Апострофф написал:
Обидно за европейскую часть…

И за ТС-ов, которые не считают нужным отвечать на ответы на их просьбу о помощи (это я про #2) — ответ был получен, но Анна решила предъявить претензии к европейской части России…

Анна Важенина, в следующей теме сразу указывайте, из какого региона Вам нужны ответы

 

alexleoix

Пользователь

Сообщений: 434
Регистрация: 08.03.2014

_Igor_61, ТС просила помощи у добрых людей, а получила от вредного кота. Да ещё и с европейской части… :D

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

:)  

 

Апострофф

Пользователь

Сообщений: 720
Регистрация: 06.04.2015

Да ладно нервничать.
Анна Важенина  завтра часиков в 5(мск)  или раньше выйдет на работу, почитает ответы и не исключено — ответит. терпение, судари, терпение!

 
 

Анна Важенина

Пользователь

Сообщений: 25
Регистрация: 05.08.2015

#11

26.11.2018 10:27:32

О БОГИ! Это работает!

Апострофф

, СПАСИБО огромное!!!!!!!
Если кому-то нужно собирать таблицы в один файл с предварительной проверкой не открыт ли он кем-то, то вот это работает (в модуль «ЭтаКнига»):

Код
Function IsBookOpen(wbFullName As String) As Boolean
    Dim iFF As Integer, retval As Boolean
    iFF = FreeFile
    On Error Resume Next
    Open wbFullName For Random Access Read Write Lock Read Write As #iFF
    retval = (Err.Number <> 0)
    Close #iFF
    IsBookOpen = retval
End Function

Sub выгрузить()
'Копирует таблицы в первую пустую ячейку
 Application.ScreenUpdating = False
 
 Dim Sh1 As Worksheet
 Set Sh1 = ActiveSheet

 
 MsgBox "Файл 'учет комплектаций'" & IIf(IsBookOpen("\SERVER...учет_комплектаций.xlsm"), " уже открыт", " не занят")

 Sh1.Activate
Dim Rk, Rk0 ''назначение переменных
Rk = Columns("A").Rows(294).End(xlUp).Row '''' определение первой пустой ячейки в колонке А
Range("A9:H" & Rk).Select '' выбор блока ячеек в текущем листе
Selection.Copy '' копирование выбранного

Workbooks.Open Filename:= _
        "\SERVER...учет_комплектаций.xlsm"

ActiveWorkbook.Sheets("учет комплектаций").Select

 Dim Sh2 As Worksheet
 Set Sh2 = ActiveSheet


Rk0 = Columns("A").Rows(65000).End(xlUp).Row '' тоже самое определение первой пустой ячейки (точнее последней заполненной)
 
 
Range("B" & Rk0 + 1).Select '' а вот здесь выбор первой пустой
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False '' вставка из буфера


Sh1.Activate
   Range("D2").Select
   Selection.Copy
Workbooks("учет_комплектаций.xlsm").Activate
Range("A" & Rk0 + 1 & ":A" & Rk0 + 1 + Rk - 9).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Dim i As Long
    For i = Range("H" & Rows.Count).End(xlUp).Row To Rk0 + 1 Step -1
        If Range("H" & i) = 0 Or Range("H" & i) = "" Then
            Range("A" & i).Delete Shift:=xlUp
        End If
    Next i

 
Application.CutCopyMode = False   ' очистка буфера обмена

 Application.ScreenUpdating = True
 
End Sub

In this post, you’ll be learning how you can select a worksheet and activate it using Excel VBA.

ActiveSheet in Excel

The term ActiveSheet, refers to the currently active Worksheet in Excel VBA.

Let’s see in detail about the active sheet command.

To run the code,

  • Under the developer tab, click visual basic

  • Click the insert option and choose module
  • Enter your code and click run.

How to Activate or Set the WorkSheet in Excel VBA?

To set the ActiveSheet use Worksheet.Activate:

Worksheets("Sheetname").Activate

This sheet will activate a new worksheet in the current workbook.

If you want to activate an existing sheet,

ActiveSheet Name

To get the ActiveSheet Name, use the property ActiveSheet.name in Excel VBA.

ActiveSheet Name

Selected Sheets vs ActiveSheet in Excel VBA

At any point in time, only one Sheet can be the ActiveSheet in Excel VBA.But, multiple Worksheets can be selected at once.

If multiple Worksheets are selected, then the Worksheet with top most priority is considered as active sheet.

Select Worksheet

If you want to select a worksheet instead of activating it you can use .select  in the above codes instead of activate command.

Select Worksheet by Tab Name

This code line selects a Worksheet based on its Sheet Tab Name

Sheets("Select sheet).Select

Select Worksheet by Index Number

This code line selects a Worksheet based on its position relative to other tabs

Select Worksheet with VBA Code Name

To select worksheet using VBA code name, enter the following code

Selecting worksheets by code name will prevent errors.

Select Current Worksheet

To select the current Worksheet, you can use the ActiveSheet object:

Change ActiveSheet Name

To change the active sheet name

ActiveSheet.Name = "New active sheet"

GoTo Next Sheet

To go to next sheet, enter the following code. If the active sheet is the last sheet, this command will go to the first sheet.

If ActiveSheet.Index = Worksheets.Count Then

    Worksheets(1).Activate

Else

    ActiveSheet.Next.Activate

End If

Home / VBA / How to Activate a Sheet using VBA

Let’s say you are working with multiple worksheets, and for you, it’s hard to navigate to a sheet using a tab. In this situation, you can use a VBA code to activate any worksheet.

And, to write a VBA code for this you need to use Worksheet.Activate Method. In this post, I’d like to share with you a simple way to write this code to activate or select a worksheet. Before you write this code, you need to understand this method.

In this method, you can specify the worksheet’s name or number which you want to activate. Let’s say you need to activate sheet1, then the code will be:

Worksheets("Sheet1").Activate

Or you can use sheet numbers as well.

Worksheets("1").Activate

So the final code will be:

Sub ActivateSheet1()
Worksheets("Sheet1").Activate
End Sub

Examples: Activate a Worksheet with VBA

In the real life, you can use this method in different ways. Here are some of them.

1. Activate a Worksheet on Opening

If you want to activate a specific worksheet every time when you open the workbook then you name that VBA code auto_open.

Sub auto_open()
Worksheets("Sheet1").Activate
End Su

2. Activate a Worksheet and Hide all other

Maybe you want to navigate to a worksheet and hide all the other worksheets from the workbook. You can do this by using the below code.

Sub HideWorksheet()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> "Sheet1" Then
ws.Visible = xlSheetHidden
End If
Next ws
End Sub

Change the sheet name from the above code to use it further.

Must Read Next

  1. VBA to Create New Sheet
  2. How to Record a Macro in Excel
  3. VBA Option Explicit

VBA is one of the Advanced Excel Skills, and if you are getting started with VBA, make sure to check out there (What is VBA, and Useful Macro Examples and VBA Codes).

Make a particular worksheet visible using a macro in Excel.

This is called activating a worksheet and is rather easy to do.

Sections:

Activate Worksheet by Name

Activate Worksheet by Index Number

Notes

Activate Worksheet by Name

Let’s navigate to, activate, the worksheet called «Sheet2».

Worksheets("Sheet2").Activate

08008f3433d614b4eb713fdcde4e01eb.jpg

Worksheets(«Shee2») is how we reference the sheet to which we want to navigate.

Sheet2 is the name of the sheet to which we want to navigate. Make sure to surround it with double quotation marks.

Activate is what actually takes the user to that worksheet.

Putting it all together, we get: Worksheets(«Sheet2»).Activate

It’s as simple as that.

Activate Worksheet by Index Number

This time, let’s navigate to the second worksheet using its index number.

All we do is to replace «Sheet2» from the last example with 2.

Worksheets(2).Activate

3e8969b16e6f131afc29445b0f9a02ac.jpg

2 is the index number of the desired worksheet and Activate is what takes us to the desired worksheet.

This example can be confusing if you are not used to using index numbers, but index numbers are really helpful when you have to do something like loop through all of the worksheets in the workbook.

Notes

Basically, just reference the desired worksheet, however you want, and then type .Activate after it.

You should not use the Activate feature to navigate to a worksheet so that you can get data from it or put data into it. This is very bad Macro/VBA design and it will make your life hell later on. To get data from separate worksheets, read this tutorial: Select Data from Separate Worksheets with Macros VBA in Excel.

This feature should be used when you want the user to end up on a specific worksheet.

Make sure to download the sample file attached to this tutorial so that you can see this macro in Excel and work with it.

Similar Content on TeachExcel

Copy and Paste Data using Macro VBA in Excel

Tutorial: How to copy and paste data using a Macro in Excel. I’ll show you multiple ways to do this,…

Select Data from Separate Worksheets with Macros VBA in Excel

Tutorial: Select data from other worksheets with Macros and VBA without navigating to those workshee…

Get the Last Row using VBA in Excel

Tutorial:
(file used in the video above)
How to find the last row of data using a Macro/VBA in Exce…

Login to a Website using a Macro

: Connect and login to a website using a macro in Excel.
This allows you to open a website a…

Get the Name of a Worksheet in Macros VBA in Excel

Tutorial: How to get the name of a worksheet in Excel using VBA and Macros and also how to store tha…

Guide to Creating Charts with a Macro in Excel

Tutorial: How to add, edit, and position charts in Excel using VBA.
This tutorial covers what to do …

Subscribe for Weekly Tutorials

BONUS: subscribe now to download our Top Tutorials Ebook!

While working in VBA we sometimes refer to another sheet or use another sheet’s properties, suppose we are in sheet 1 working but we want a value from cell A2 in sheet 2, if we refer to sheet 2’s value without activating the sheet first then we will not be able to access the value so to activate a sheet in VBA we use worksheet property as Worksheets(“Sheet2”).Activate.

In Excel, we always work with worksheets. Worksheets have their name to identify better. In regular spreadsheet workings, we directly navigate through shortcut keysAn Excel shortcut is a technique of performing a manual task in a quicker way.read more, or select the sheet by clicking on them. However, in VBA, it is not that easy. First, we need to specify the sheet name we are referring to. Then, we can use the “Select” method to select the sheet.

Table of contents
  • Excel VBA Activate Sheet
    • What is VBA Activate Method?
      • Example #1 – Activate Sheet by its Index Number
      • Example #2 – Activate Sheet by its Name
      • Example #3 – Activate Sheet from Another Workbook
    • Activate Sheet vs. Select Sheet Method
      • #1 – Activate Method
      • #2 – Select Method
    • Recommended Articles

VBA Activate Sheet

You are free to use this image on your website, templates, etc, Please provide us with an attribution linkArticle Link to be Hyperlinked
For eg:
Source: VBA Activate Sheet (wallstreetmojo.com)

What is VBA Activate Method?

As the name says, it activates the specified worksheet. To activate the sheet, we need to mention the exact worksheet name using the worksheets object. For example, if you want to activate a ” Sales sheet,” you can use the code below.

Worksheets(“Sales”).Activate

Syntax

So, the syntax of the Activate method is as follows:

Worksheet (“Name of the Sheet”).Activate

Here, a worksheet is the object, and activates are the method.

You can download this VBA Activate Sheet Excel Template here – VBA Activate Sheet Excel Template

Example #1 – Activate Sheet by its Index Number

In Excel, we work with multiple sets of worksheets. Often, we need to move from one sheet to another to get the job done. In VBA, we can use the Activate method to activate the particular Excel sheet.

For example, we have created three sheets: “Sales 2015”, “Sales 2016”, and “Sales 2017.”

VBA Activate sheet Example 1

We can activate the sheets in two ways. One is by using sheet index numbers, and another is by using the sheet name.

If we want to select the second sheet, we will use the worksheet object and mention the sheet index number as 2.

Code:

Sub Activate_Example1()

   Worksheets(2).Activate

End Sub

VBA Activate sheet Example 1-1

When you run the code using the F5 key or manually, this will activate the second sheet, “Sales 2016”.

vba activate sheet Example 1-2.mp4

If we want to activate the third sheet, we will use 3 as the sheet index number.

Code:

Sub Activate_Example1()

    Worksheets(3).Activate

End Sub

VBA Activate sheet Example 1-2

It will activate the third sheet, “Sales 2017.”

VBA Activate sheet Example 1-3.png

Now, we will interchange the second and third sheets.

VBA Activate sheet Example 1-4

Technically, “Sales 2017” is our third sheet, and “Sales 2016 is our second sheet. So, now we will use the sheet index number as 3 and see what happens.

Code:

Sub Activate_Example1()

    Worksheets(3).Activate

End Sub

VBA Activate sheet Example 1-2

In our view, it has to select the “Sales 2017” sheet, but it will select the “Sales 2016” sheet because in the order, “Sales 2016” is the third sheet.

vba activate sheet Example 1-4

So, activating the sheet by its name is always a safe option.

Example #2 – Activate Sheet by its Name

Now, we will see how to activate sheets by their name. In the place of a sheet index number, we need to mention the sheet name in double quotes.

Code:

Sub Activate_Example2()

    Worksheets("Sales 2016").Activate

End Sub

VBA Activatesheet Example 2

When we run the code manually or using shortcut key F5, this would activate the sheet “Sales 2016” irrespective of the position in the workbook.

vba activatesheet Example 2-2

Not only the worksheets object, but we can also use the “Sheets” object to activate the sheet.

Below is the code.

Code:

Sub Activate_Example2()

    Sheets("Sales 2016").Activate

End Sub

VBA Activatesheet Example 2-1

Worksheets can access only worksheets object and cannot access “Chart” sheets. However, if we use the Sheets object, we can access all the sheets in the workbook.

Example #3 – Activate Sheet from Another Workbook

Like how we need to mention the sheet name to activate the particular sheet, activating the sheet from another workbook also requires the “Workbook” name.

Code:

Sub Activate_Example3()

    Workbooks("Sales File.xlsx").Sheets("Sales 2016").Activate

End Sub

Activatesheet Example 2-2

It will activate the “Sales 2016” sheet from the workbook “Sales File.xlsx.”

Activate Sheet vs. Select Sheet Method

We can use methods to perform the same action, i.e., Activate and Select. However, there is a slight difference between these two methods.

#1 – Activate Method

By using the Activate method, we can only activate the specified worksheet.

For example, look at the below code.

Code:

Sub Activate_Example()

    Worksheets("Sales 2016").Activate

End Sub

VBA Activate sheet vs select sheet

As we know, this code will select the worksheet “Sales 2016”.

#2 – Select Method

By using the Select method, we can perform other tasks as well.

Now, look at the below code.

Code:

Activate sheet vs select sheet 1

This code not only activates the sheet “Sales 2016” but also selects the range of cells from A1 to A10.

Recommended Articles

This article has been a guide to VBA Activate Sheet. Here, we learn how to use the activate method in VBA to activate a particular Excel sheet, along with practical examples and downloadable templates. Below you can find some useful Excel VBA articles: –

  • VBA TimeValue
  • VBA DatePart Examples
  • Option Explicit in VBA
  • VBA Remove Duplicates
  • VBA StatusBar

Хитрости »

26 Июль 2015              77792 просмотров


Все начинающие изучать VBA сталкиваются с тем, что записанные через макрорекордер коды пестрят методами Select и Activate.
Если не знакомы с работой макрорекордера — Что такое макрос и где его искать?
Это значительно ухудшает читабельность кода и, как ни странно — быстродействие. Но есть недостатки и куда более критичные. Если код выполняется достаточно долго и он постоянно что-то выделяет — пользователь может заскучать и забыться и начнет тыкать мышкой по листам и ячейкам, выделяя не то, что выделил ранее код. Что повлечет ошибки логики. Т.е. код может и выполнится, но совершенно не так, как ожидалось. Поэтому избавляться от Select и Activate необходимо везде, где это возможно.

Для начала рассмотрим два кода, выполняющие одни те же действия — запись в ячейку А3 листа Лист2 слова «Привет». При этом сам код запускается с Лист1 и после выполнения код Лист1 должен остаться активным. Чтобы сделать эти действия вручную потребуется сначала перейти на Лист2, выделить ячейку А3, записать в неё слово «Привет» и вернуться на Лист1. Поэтому запись макрорекордером этих действий приведет к такому коду:

Sub Макрос1()
    Sheets("Лист2").Select            'выделяем Лист2
    Range("A3").Select                'выделяем ячейку А3
    ActiveCell.FormulaR1C1 = "Привет" 'записываем слово Привет
    Range("A4").Select                'после нажатия Enter автоматически выделяется ячейка А4
    Sheets("Лист1").Select            'возвращаемся на Лист1
End Sub

Нигде не говорится, что в большинстве случаев все эти Select и Activate в кодах не нужны. Однако вышеприведенный код можно значительно улучшить, если убрать все ненужные Select и Activate:

Sub Макрос1()
    Sheets("Лист2").Range("A3").FormulaR1C1 = "Привет"
End Sub

Как видно, вместо 5-ти строк кода получилась одна строка. Которая выполняет ту же задачу, что и код из 5-ти строк.
Прежде чем понять как правильно избавляться от лишнего давайте разберемся зачем же тогда VBA записывает эти Select и Activate? Как ни странно, но здесь все очень просто. VBA просто не знает, что Вы будете делать после того, как выделили Лист2. И когда Вы переходите на Лист2 — VBA записывает именно переход(его активацию, выделение). Когда выделяете ячейку — так же именно это действие записывает VBA. Захотите ли Вы затем выделить еще что-то, или закрасить ячейку, или записать в неё формулу/значение — VBA не знает. Поэтому в дальнейшем VBA работает именно с выделенным объектом Selection на активном листе.
Но при написании кода вручную или при правке записанного рекордером мы уже вольны в выборе и знаем, чего хотели добиться и какие действия нам точно не нужны.
Итак, чтобы записать в ячейку слово «Привет» рекордер предложит нам такой код:

Sub Макрос1()
    Range("A3").Select                'выделяем ячейку А3
    ActiveCell.FormulaR1C1 = "Привет" 'записываем слово Привет
    Range("A4").Select                'после нажатия Enter автоматически выделяется ячейка А4
End Sub

однако выделять ячейку(Range(«A3»).Select) совершенно необязательно. Значит один Select уже лишний. После этого идет обращение к активной ячейке — ActiveCell. .FormulaR1C1 = «Привет» означает запись значения «Привет» в эту ячейку.
Пусть не смущает FormulaR1C1 — VBA всегда так указывает запись и значения и формулы. Т.к. перед словом «Привет» нет знака равно — то это значение.
Т.к. ActiveCell является обращением к выделенной ячейке, а выделили мы до этого А3, значит их можно просто «сократить»:

Sub Макрос1()
    Range("A3").FormulaR1C1 = "Привет"
    Range("A4").Select                'после нажатия Enter автоматически выделяется ячейка А4
End Sub

Теперь у нас код получился короче и понятнее. Однако остался один Select: Range(«A4»).Select. Если нет необходимости выделять ячейку А4 после записи в А3 значения, то надо просто удалить эту строку и после выполнения кода активной будет та ячейка, которая была выделена до выполнения(т.е. выделенная ячейка просто не изменится). Таким образом мы с трех строк сократим код до 1-ой:

Sub Макрос1()
    Range("A3").FormulaR1C1 = "Привет"
End Sub

Теперь несложно догадаться, что с листами все в точности так же. Sheets(«Лист2»).Select — Select хоть и не нужен, но и ActiveSheet после него нет. Здесь необходимо знать некоторую иерархию в Excel. Сначала идет сам Excel — Application, потом книга — Workbook. В книгу входят рабочие листы(Worksheets), а уже в листах — ячейки и диапазоны — Range и Cells(Application ->Workbook ->Worksheet ->Range). Если перед Range или Cells не указывать явно лист: Range(«A3»).FormulaR1C1 = «Привет», то значение будет записано на активный лист. Подробнее можно прочесть в статье: Как обратиться к диапазону из VBA

Маленький нюанс: если сокращаем обращение к объектам, то Select-ов быть не должно вообще. Иначе есть шанс получить ошибку «Subscript out of range»:
VBA error 9 - Subscript out of range
буквально это означает, что указанный индекс вне досягаемости. А появляется эта ошибка потому, что нельзя выделить ячейку НЕактивного листа или лист НЕактивной книги. Легко эту ошибку получить например в таком коде:

Sub Макрос2()
    Windows("Книга3").Activate
    'здесь появится ошибка, т.к. пытаемся выделить лист в Книга2 
    'а на данный момент активной является Книга3
    Windows("Книга2").Sheets("Лист3").Select
End Sub

Ошибка обязательно появится, т.к. сначала мы активировали кодом книгу «Книга3», а потом пытаемся активировать лист НЕактивной на этот момент книги «Книга2». А это сделать невозможно без активации той книги, в которой активируемый лист. Т.е. активация должна происходить именно последовательно: Книга ->Лист ->Ячейка. И никак иначе, если мы хотим активировать именно конкретную ячейку конкретного листа в конкретной книге.
И пример с ячейками:

Sub Макрос2()
    Sheets("Лист3").Select
    'здесь появится ошибка, т.к. пытаемся выделить ячейку на листе "Лист1"
    'а на данный момент активным является Лист3
    Sheets("Лист1").Range("C7").Select
End Sub

Так же такая ошибка может появиться и по той простой причине, что указанного листа или книги нет(листа с указанным именем нет в данной книге или книга, к которой обращаемся просто закрыта).

Еще небольшой пример оптимизации:

Sub Макрос2()
    Windows("Книга3").Activate
    Sheets("Лист3").Select
    Range("C7").Select
    ActiveCell.FormulaR1C1 = "Привет"
    Range("C7").Select
    Selection.Font.Bold = True
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

Этот код записывает в ячейку С7 Лист3 книги «Книга3» слово «Привет», потом делает жирным шрифт и назначает желтый цвет заливке. Убираем активацию книги, листа и ячейки, заменив их прямым обращением:

Workbooks("Книга3").Sheets("Лист3").Range("C7").FormulaR1C1 = "Привет"

далее делаем для ячейки жирный шрифт:

Workbooks("Книга3").Sheets("Лист3").Range("C7").Font.Bold = True

и цвет заливки:

With Workbooks("Книга3").Sheets("Лист3").Range("C7").Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With

Тут есть нюанс. Windows необходимо всегда заменять на Workbooks — в кодах я сделал именно так. Если этого не сделать, то получите ошибку 438 — объект не поддерживает данное свойство или метод(object dos’t support this property or metod), т.к. коллекция Windows не содержит определения для Sheets.

Важный момент: лучше всегда указать имя книги вместе с расширением(.xlsx, xlsm, .xls и т.д.). Если в настройках ОС Windows(Панель управленияПараметры папок -вкладка ВидСкрывать расширения для зарегистрированных типов файлов) указано скрывать расширения — то указывать расширение не обязательно — Workbooks(«Книга2»). Но и ошибки не будет, если его указать. Однако, если пункт «Скрывать расширения для зарегистрированных типов файлов» отключен, то указание Workbooks(«Книга2») обязательно приведет к ошибке.

Вместо Workbooks(«Книга3.xlsx») можно использовать обращение к активной книге или книге, в которой расположен код. Обращение к Лист3 активной книги, когда активен Лист2 или другой:

ActiveWorkbook.Sheets("Лист3").Range("A1").Value = "Привет"

Но бывают случаи, когда необходимо производить действия исключительно в той книге, в которой сам код. И не зависеть при этом от того, какая книга активна в данный момент и как она называется. Ведь в процессе книга может быть переименована. За это отвечает ThisWorkbook:

ThisWorkbook.Sheets("Лист3").Range("A1").Value = "Привет"

ActiveWorkbook — действия с активной на момент выполнения кода книгой
ThisWorkbook — действия с книгой, в которой записан код

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

Sub NewBook()
    'объявляем переменную для дальнейшего обращения
    Dim wbNewBook As Workbook
    'создаем книгу
    Set wbNewBook = Workbooks.Add
    'теперь можно обращаться к wbNewBook как к любой другой книге
    'но уже не указывая её имя
    wbNewBook.Sheets(1).Range("A1").Value = "Привет"
    'Sheets(1) - обращение к листу по его порядковому номеру
    '(отсчет с начинается с 1 слева)
End Sub
Sub NewSheet()
    'объявляем переменную для дальнейшего обращения
    Dim wsNewSheet As Worksheet
    'добавляем новый лист в активную книгу
    Set wsNewSheet = ActiveWorkbook.Sheets.Add
    'теперь можно обращаться к wsNewSheet как к любому другому листу
    'но уже не указывая его имя или индекс
    wsNewSheet.Range("A1").Value = "Привет"
End Sub

Не везде Activate лишний
Но есть и такие свойства и методы, которые требуют обязательной активации книги/листа. Одним из таких свойств является свойство окна FreezePanes(Закрепление областей):

Sub Freeze_Panes()
    ThisWorkbook.Activate
    Sheets(2).Activate
    Range("B2").Select
    ActiveWindow.FreezePanes = True
End Sub

В этом коде нельзя убирать Select и Activate, т.к. свойство FreezePanes применяется исключительно к активному листу и активной ячейке, потому что является оно именно методом окна, а не листа или ячейки.
Так же сюда можно отнести свойства: Split, SplitColumn, SplitHorizontal и им подобные. Иными словами все свойства, которые работают исключительно с активным окном приложения, а не с объектами напрямую.

Так же см.:
Что такое макрос и где его искать?
Что такое модуль? Какие бывают модули?
Как обратиться к диапазону из VBA
Что такое переменная и как правильно её объявить?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Выборочная дисперсия в excel это
  • Выбрать активную ячейку excel
  • Выборка случайных чисел excel
  • Выбрать адрес ссылки excel
  • Выборка по диапазону дат excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии