Активировать лист excel vba: Метод Worksheet.Activate (Excel) | Microsoft Learn

VBA Excel. Рабочий лист (обращение, переименование, скрытие)

Обращение к рабочим листам Excel из кода VBA. Переименование листов, скрытие и отображение с помощью кода VBA Excel. Свойства Worksheets.Name и Worksheets.Visible.

Обращение к рабочим листам

Рабочий лист (Worksheet) принадлежит коллекции всех рабочих листов (Worksheets) книги Excel. Обратиться к листу можно как к элементу коллекции и, напрямую, по его уникальному имени.

Откройте редактор VBA и обратите внимание на вашу книгу в проводнике, где уникальные имена листов указаны без скобок, а в скобках — имена листов, отображаемые на ярлычках в открытой книге Excel. Уникальные имена листов отсортированы по алфавиту и их расположение по порядку не будет соответствовать их индексам (номерам), если листы перемещались по отношению друг к другу. Индексы листов смотрите по порядку расположения ярлычков в открытой книге. Переместили листы — изменились их индексы.

Обращение к рабочему листу в коде VBA Excel:

1

2

3

4

5

6

7

8

‘По уникальному имени

УникИмяЛиста

 

‘По индексу

Worksheets(N)

 

‘По имени листа на ярлычке

Worksheets(«Имя листа»)

  • УникИмяЛиста — уникальное имя листа, отображаемое в проводнике редактора VBA без скобок, с помощью кода VBA изменить его невозможно.
  • N — индекс листа от 1 до количества всех листов в книге, соответствует порядковому номеру ярлычка этого листа в открытой книге Excel.
  • Имя листа — имя листа, отображаемое в проводнике редактора VBA в скобках, с помощью кода VBA изменить его можно.

Количество листов в рабочей книге Excel определяется так:

1

2

3

4

5

6

‘В активной книге

Worksheets. Count

 

‘В любой открытой книге,

‘например, в «Книга1.xlsm»

Workbooks(«Книга1.xlsm»).Worksheets.Count

Переименование листов

В VBA Excel есть некоторые особенности в наименовании листов, так как у рабочего листа есть два свойства, связанных с именем: (Name) и Name. Откройте окно «Properties» в редакторе VBA, нажав клавишу «F4», и выделите любой лист в проводнике. Вы увидите, что в окне «Properties» свойству (Name) в скобках соответствует в проводнике уникальное имя листа без скобок, а свойству Name без скобок соответствует изменяемое имя листа в скобках. Оба имени в окне «Properties» можно редактировать.

С помощью кода VBA Excel можно редактировать только имя листа Name, отображаемое на ярлычке листа и в проводнике без скобок. Для этого используется свойство рабочего листа Worksheets.Name со следующим синтаксисом:

expression. Name

где expression — переменная, представляющая собой объект Worksheet. Смена имени осуществляется путем присвоения нового значения свойству Worksheets.Name.

Допустим, у нас есть лист с уникальным именем (Name) — Лист1, индексом — 1 и именем Name — МойЛист, которое необходимо заменить на имя — Реестр.

Лист1.Name = «Реестр»

Worksheets(1).Name = «Реестр»

Worksheets(«МойЛист»).Name = «Реестр»

Скрытие и отображение листов

Для скрытия и отображения рабочих листов в VBA Excel используется свойство Worksheet.Visible со следующим синтаксисом:

expression.Visible

где expression — переменная, представляющая собой объект Worksheet. Свойству Worksheet.Visible могут присваиваться следующие значения:

  • False — лист становится невидимым, но он будет присутствовать в списке скрытых листов, и пользователь сможет его отобразить с помощью инструментов рабочей книги Excel.
  • xlVeryHidden — лист становится супер невидимым и его не будет в списке скрытых листов, пользователь не сможет его отобразить. Актуально для Excel 2003-2016.
  • True — лист становится видимым.

Аналоги присваиваемых значений:

  • False = xlHidden = xlSheetHidden = 1
  • xlVeryHidden = xlSheetVeryHidden = 2
  • True = xlSheetVisible = -1 (константа xlVisible вызывает ошибку)

Примеры:

Лист1.Visible = xlSheetHidden

Лист2.Visible = -1

Worksheets(Worksheets.Count).Visible = xlVeryHidden

Worksheets(«МойЛист»).Visible = True

Как создать, скопировать, переместить или удалить рабочий лист с помощью кода VBA Excel, смотрите в этой статье.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Проблема с активацией листа в VBA Эксель

Ошибка не воспроизводится. Похоже на недостаток видеопамяти, да и памяти вообще.

Грубая ошибка:

переменная в процедуре

Dim wh_Sheet2612 As Worksheet

глобальная переменная

Public wh_Sheet2612 As Worksheet

Найдите различия… Переменные уровня процедуры могут иметь одинаковые имена в разных процедурах, уровня модуля — в разных модулях… Но нельзя давать переменным одинаковое имя, если эти переменные пересекаются!

Кушаем память.

Много лишних присвоений, без которых можно спокойно обойтись.

Set переменная = объект

Эта строка выделяет область памяти для хранения объекта. Если после использования память принудительно не освобождать, область может остаться занятой. Чем больше присвоений, тем больше памяти отрезается. Поэтому после отработки основной части кода память обязательно нужно освобождать

Set переменная = Nothing

Переменные уровня процедуры. Занимают память до завершения работы процедуры.

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

Например, передача номера искомого вагона в процедуру поиска. Публичная переменная не нужна, значение можно передать в процедуру:

Private Sub cb_2612_Click()
    FindNumber.Поиск_ячейки_с_номером_вагона (ActiveCell.Value)
    Unload MsgForm
End Sub

Сам поиск можно облегчить, по минимуму занимая память (в Вашем варианте активирование листа происходит два раза; в переменные загоняются три объекта; для номеров последней и искомой строки можно использовать одну переменную):

' номер вагона передаем прямо в процедуру'
Sub Поиск_ячейки_с_номером_вагона(sNum As String)
    Dim int_Row As Long
    With Sheets("2612")
        ' определяем последнюю заполненную строку'
        int_Row = .Cells(.Rows.Count, 1).End(xlUp).Row
        If int_Row < 2 Then MsgBox "Нет данных", 64, "УВЫ!": Exit Sub
        ' ищем в диапазоне номер вагона'
        int_Row = . Range("A2:A" & int_Row).Find(What:=sNum, _
                        LookIn:=xlValues, LookAt:=xlPart, MatchCase:=True).Row
        .Activate ' активируем лист'
        .Cells(int_Row, 1).Activate ' активируем строку с номером вагона'
    End With
End Sub

Поиск происходит быстро, зачем Вам ProgressBar? Для большего подтормаживания? )

Попутно.

Не обязательно для каждого макроса создавать отдельные модули. Так можно больше запутаться.

Некоторые процедуры можно объединить в одну. Например, PredpriyatiyePoslednego*. 3 или 4 кода одинаковы, меняются только переменные.

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

В процедурах обработки событий листа можно задавать диапазон реагирования. Не нужно будет писать «Если щелкаем на ячейке, в которой нет номера вагона»…

Нужно не очищать строки, а удалять их. Где удаление строк недопустимо, очищать диапазоны. На листе со справками более 35 000 строк пользовательского диапазона (строк с данными — 1221). А это лишний вес файла, лишний диапазон при обработке массивов…

В общем, писать можно много… Автора вопроса это должно радовать — есть куда расти )

VBA Activate Workbook (файл Excel)

Home / VBA / VBA Activate Workbook (файл Excel)

Действия по активации книги

Активация книги с помощью номера

Активация книги перед активацией этой книги

5

Примечания

Подробнее о книгах VBA

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

Чтобы активировать книгу с помощью VBA, необходимо использовать метод Workbook.Activate. В этом методе вам нужно указать имя книги с помощью объекта Workbook. Это также позволяет вам использовать номер книги вместо имени книги, но вы можете ссылаться только на открытые книги.

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

Действия по активации рабочей книги

  1. Введите «Рабочие книги», чтобы использовать объект рабочей книги.
  2. Укажите имя книги в двойных кавычках.
  3. Введите точку (.), чтобы получить список свойств и методов.
  4. Выберите метод активации из списка или введите его.
  5. В конце запустите код для активации книги.
 Подпрограмма vba_activate_workbook()
    Книги("Book3").Активировать
End Sub 

Примечание: Если вы попытаетесь активировать книгу, которая не открыта, VBA покажет ошибку.

Связанный: Активация рабочего листа с помощью VBA

Полезные ссылки: Запуск макроса — Средство записи макросов — Редактор Visual Basic — Личная книга макросов

Активация книги с помощью номера

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

 Sub vba_activate_workbook()
    Книги(2).Активировать
End Sub 

И если вы пытаетесь активировать книгу, используя несуществующий номер, VBA покажет вам ошибку Run-time error ‘9′ (Индекс вне диапазона).

Активировать эту книгу

Вы можете обратиться к книге, в которой вы пишете код, с помощью свойства ThisWorkbook. Допустим, у вас одновременно открыто пять рабочих книг, но вы работаете с «Book1.xlsm», поэтому при запуске следующего кода он активирует «Book1.xlsm».

 Подпрограмма vba_activate_workbook()
    ThisWorkbook.Активировать
End Sub 

Проверка перед активацией книги

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

 Подпрограмма vba_activate_workbook()
Dim wb как рабочая книга
Для каждого ББ в рабочих книгах
    Если wb. Name = "Book3.xlsx" Тогда
        wb.Активировать
        MsgBox "Книга найдена и активирована"
        Выйти из подпрограммы
    Конец, если
Следующий бб
    MsgBox "Не найдено"
End Sub 

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

Примечания

  • При использовании имени рабочей книги обязательно используйте правильное расширение файла
  • Если вы хотите активировать книгу, которая еще не сохранена, вам нужно использовать только имя этой книги без суффикса расширения файла.

Подробнее о книгах VBA

Сохранить книгу VBA | VBA Закрыть книгу | Удалить книгу VBA | Эта книга по VBA | Книга переименования VBA | Рабочая тетрадь VBA | Защитить книгу VBA (снять защиту) | VBA Проверить, открыта ли рабочая книга | Открытая рабочая тетрадь VBA | Проверка VBA, существует ли рабочая книга Excel в папке | VBA Создать новую книгу (файл Excel)

  • Рабочая книга VBA

Лист активации VBA | Как активировать лист в Excel VBA?

Для активации или выбора листа в excel мы вручную переходим на лист и нажимаем на вкладку Лист. Но когда мы пишем код, в котором нам нужно связать разные листы в разных формах, мы можем использовать функцию VBA Activate Sheet. Это можно сделать с помощью файла «. Активировать команду «» в VBA. Это автоматически выберет или активирует лист для дальнейшего использования.

Активация листа означает выбор этого листа. И чтобы узнать, активирован ли этот лист или выбран, лучше после запуска кода в excel проверить, можем ли мы увидеть текущий лист или нет.

Как активировать лист в Excel VBA?

Ниже приведены различные примеры активации листа в Excel с использованием кода VBA.

Вы можете скачать этот шаблон Excel с активацией VBA здесь — Шаблон Excel с активацией VBA

Лист с активацией VBA — пример № 1

Существуют различные способы активировать лист в VBA. Для этого мы рассмотрели 3 листа, названные «Первый», «Второй» и «Третий», как показано ниже. Цель именования каждого листа состоит в том, чтобы различать номер листа и имя листа, которые будут использоваться в следующих примерах.

Выполните следующие шаги, чтобы активировать лист в Excel VBA.

Шаг 1: Теперь перейдите в VBA и на вкладке меню Insert выберите Module , как показано ниже.

Модуль — это место, где мы будем писать код для активации листа. После этого у нас откроется новый модуль.

Шаг 2:  В этом модуле создайте подкатегорию функции с любым именем. Для лучшего понимания мы последовательно создали его под именем VBA Activate Sheet. Это поможет отследить нужный модуль.

Код:

 Sub VBA_ActivateSheet1()

End Sub 

Шаг 3: Теперь используйте функцию Sheets для выбора любого листа.

Код:

 Sub VBA_ActivateSheet1()

Листы ("Первый")

End Sub 

Шаг 4:  Теперь, чтобы фактически выбрать или активировать лист в Excel, используйте команду Activate с точкой (. )

Код:

 Sub VBA_ActivateSheet

Листы("Первый").Активировать

End Sub 

Таким образом, мы позволяем листу с именем «Первый» выбираться всякий раз, когда код требует этого.

Шаг 5: Теперь сделайте то же самое для имен листов Second и Third, как показано ниже.

Код:

 Sub VBA_ActivateSheet1()

Листы("Первый").Активировать
Листы("Второй").Активировать
Листы("Третий").Активировать

End Sub 

Шаг 6: Теперь скомпилируйте код шаг за шагом или за один раз. Небольшой код может быть скомпилирован за один раз, что может не привести к ошибке. После этого запустите код, нажав кнопку «Воспроизвести», которая находится под строкой меню.

Мы увидим, что третий лист будет выбран так, как он был расположен в конце. Если мы выполним пошаговую компиляцию, то сможем увидеть, кто активирует первый, второй и третий листы, нажав клавишу F8.

Когда компилятор пройдет первую строку, мы увидим, что лист Первый активирован, как показано ниже.

Снова нажав клавишу F8, компилятор пропустит вторую строку кода и мы увидим лист Second активирован.

И когда компилятор дойдет до End Sub структуры кода, мы активируем лист Third, как показано ниже.

Активация листа VBA — пример № 2

Мы также можем использовать команду Worksheet для выбора и активации любого листа. Этот процесс очень похож на пример-1. Для этого снова будем рассматривать имя листа файла First , Second и Third. Выполните следующие шаги, чтобы активировать лист в Excel VBA.

Шаг 1: В модуле начните писать подкатегорию VBA Activate Sheet в последовательности, как показано ниже.

Код:

 Sub VBA_ActivateSheet2()

End Sub 

Шаг 2: Поскольку мы использовали команду Sheet для активации Sheet, здесь мы будем использовать команду Worksheet .

Код:

 Sub VBA_ActivateSheet2()

Рабочие листы ("Первый")

Конечный переходник 

Шаг 3:  Теперь также используйте функцию Activate, завершаемую точкой (.), чтобы активировать лист.

Код:

 Sub VBA_ActivateSheet2()

Рабочие листы ("Первый"). Активировать

End Sub 

Шаг 4: Теперь сделайте то же самое для Листа Second и Third .

Код:

 Sub VBA_ActivateSheet2()

Рабочие листы ("Первый"). Активировать
Рабочие листы("Второй").Активировать
Рабочие листы ("Третий"). Активировать

Конец суб 

Шаг 5: После этого скомпилируйте код. Здесь мы будем выполнять пошаговую компиляцию, чтобы увидеть изменения. Для нажатия F8 выполняется пошаговая компиляция и запуск кода. Когда компилятор пройдет вторую строку кода, мы увидим на листе Excel . Второй активирован или выбран.

Шаг 6: Снова нажмите клавишу F8, чтобы выбрать следующий лист. Мы увидим, как компилятор проходит через третью строку кода и доходит до конца, активируется или выбирается лист с именем Third.

Активация листа VBA — пример №3

Существует еще один способ активировать любой рабочий лист. Для этого также рассмотрим тот же набор листов с теми же именами First, Second и Third, что и в приведенных выше примерах. В этом примере мы увидим 3 комбинации функций Sheet и Worksheet вместе с Select , которые мы будем использовать вместо Activate . Функция select  работает так же, как Activate . Используя комбинацию различных функций для одного и того же использования, мы увидим, как меняется результат.

Выполните следующие шаги, чтобы активировать лист в Excel VBA.

Шаг 1: Для этого откройте модуль и поместите подкатегорию в название выполняемой функции или в любое другое имя по вашему выбору. Мы сохраняем имя, но в последовательности, как показано ниже.

Код:

 Sub VBA_ActivateSheet3()

End Sub 

Шаг 2:  Снова таким же образом используйте функцию Sheets с именем листа, как показано ниже.

Код:

 Sub VBA_ActivateSheet3()

Листы ("Первый")

End Sub 

Шаг 3:  После этого используйте функцию Select , заканчивающуюся точкой (.)

Код:

 Sub VBA_ActivateSheet3()

Листы("Первый").Выбрать

End Sub 

Шаг 4: Теперь во второй строке кода мы будем использовать функцию Sheets вместе с Activate для листа с именем Second , как показано ниже.

Код:

 Sub VBA_ActivateSheet3()

Листы("Первый").Выбрать
Листы("Второй").Активировать

End Sub 

Шаг 5: И для последнего листа с именем Third мы будем использовать рабочие листы вместе с функцией выбора, чтобы активировать его, как показано ниже.

Код:

 Sub VBA_ActivateSheet3()

Листы("Первый").Выбрать
Листы("Второй").Активировать
Рабочие листы ("Третий"). Выбрать

Конец суб 

Шаг 6: Теперь скомпилируйте полный код и запустите код шаг за шагом, чтобы увидеть изменения, нажав клавишу F8. По мере прохождения компилятором первой строки кода активируется лист First .

По мере компиляции второй строки кода будет активирован лист Second .

И, наконец, когда компилятор дойдет до End Sub, активируется лист Third , как показано ниже.

Вот как мы можем использовать комбинацию Sheets и Worksheets вместе с Activate и Выберите функции для активации любого рабочего листа.

Pros of Excel VBA Activate Sheet

  • Выбор любого листа в Excel, а также в VBA довольно прост.