Vba excel переключение между листами

Обновлено: 05.07.2024

В старом офисе делал панельки, но в новых версиях с xml не хочется морочить голову.
Сейчас реализовано на стандартных функциях листов
Worksheet_BeforeRightClick
Worksheet_BeforeDoubleClick
т.е.
когда кликается в определенной ячейке - возвращается на лист "Меню", а на нем уже меню для перехода в нужный лист.
или вызывается пользовательское контекстное меню, из которого осуществляется переход.
При этом пользователю нужно знать где и как кликнуть, пользовательское к.меню постоянно дорабатывать - трудоемко.

Вопрос:
Как реализовать интерфейс пользователя для перехода между листами, без использования стандартного интерфейса excel (с помощью функций VBA)?

Предполагается реализовать:
- переход на предыдущий активный лист (кнопка 'назад');
- переход на лист
- изменение доступных для перехода листов для пользователей с разными ролями (информация о доступе храниться на отдельном листе в этой книге);
- привязку к доступным для перехода листам (например: с листа 1 можно перейти только на лист 2 и 3, но нельзя перейти на лист4). есть отдельный лист с таблицей связей полей/листов;
- после перехода включение автофильтра для листа на который осуществляется переход с атрибутами фильтра - значением на листе с которого переходим (для некоторых листов);
- выбор ячейки/строки листа на который переходим, исходя из значения в текущей ячейке(строке) на листе с которого переходим.

Добавлю:
- прокрутка листа, закрепление областей листа - используется.
- защита листа нужно включать.
- общий доступ желательно включать.

Рассматриваемые варианты:
- объекты activeX, размещаемые на самом листе (например одна кнопка - МЕНЮ);
- объекты activeX, размещаемые на пользовательской форме (форма должна всегда находиться в одном месте на экране и не перекрывать данные);
- функции листа (оставить текущий вариант, сделать подсказки, научить пользователей);
- пользовательское контекстное меню (оставить текущий вариант, , сделать подсказки, научить пользователей (нежелателен - сложно в доработке);
- использование пользовательских меню в ленте (нежелательно - сложно в доработке), и вообще ленту хотелось бы потом убрать.
- использование надстроек с любым из вариантов не рассматривается (файл должен включать все необходимое для его работы).

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

Хочу унифицировать подход к интерфейсу, чтобы пользователи не думали: чтобы сделать то-то, нужно кликнуть дважды там-то, чтобы сделать другое - нужно кликнуть меню на титульном листе и там уже активировать нужную функцию.
А думали так: нужно что-то сделать, значит точно нужно выполнить такую (желательно одну) последовательность действий.

Совета прошу: что лучше всего будет использовать из вариантов.
Может еще есть предложения, опыт использования?

подозреваю, что с защитой листа и общим доступом будут проблемы.
решать буду - по мере поступления работы еще много

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

Проблема в том, что когда я добираюсь до части .Activate, Excel читает, что индекс находится вне диапазона.

Что же мне делать?

1 ответ

Я использую Apache POI для создания excel листов (формат. xls) и использовал следующий фрагмент кода для создания гиперссылок, которые ссылаются на другой лист в том же document/workbook. HSSFSheet summarySheet = workbook.createSheet(Target Sheet); Hyperlink targetLink =.

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

Похоже , что вы оба проходите через r , используя for , и увеличиваете r в своем for . Я также нигде не вижу c , пока он не будет использован.

Кроме того, вместо использования Active / Select , как уже указывалось BruceWayne, явно определите свои листы и диапазоны.

То же самое для ws2 и ThisWorkbook.Sheets("Compiled Data") .

Наконец, вместо того, чтобы устанавливать переменные, почему бы просто не ввести данные прямо?

Похожие вопросы:

Фон: У меня есть файл excel с двумя листами, а именно 'sheet1' и 'sheet2'. Оба листа имеют одинаковые заголовки. Лист1 - заголовок начинается с columnB, а Лист2 - с columnA. Первый заголовок(на.

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

Я хочу сравнить два листа в excel, и если vba найдет дубликаты, он их удалит. Я искал некоторое время и, наконец, нашел здесь то, что мне нужно. Как быстро удалить дубликаты между двумя excel.

Я использую Apache POI для создания excel листов (формат. xls) и использовал следующий фрагмент кода для создания гиперссылок, которые ссылаются на другой лист в том же document/workbook. HSSFSheet.

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

Поэтому я пытаюсь выполнить сложную передачу данных между одним листом master и несколькими листами sub. Сегодня мой первый день с Excel VBA, так что я довольно потерялся, ха-ха. Я решил начать с.

У меня в трудовой книжке два разных листа. Лист 1 и лист 2. Мне нужно сделать vlookup между этими двумя листами (столбец на обоих листах), и если лист 1 содержит какой-либо элемент из листа 2, то.

Всем привет и заранее спасибо. В настоящее время у меня есть VBA в моей книге, чтобы скопировать строки из Demand Log в Change Log, когда ячейки в столбце O имеют определенное значение. VBA работает.

Я пытаюсь написать макрос, который меняется между активными листами только через заданное количество времени. У меня есть несколько скрытых листов, и в настоящее время этот код приведет меня к.

Я хочу переключаться между 2 CSS листами. У меня почти есть код, работающий - но он переключается только один раз, и я не уверен, что лучший способ реализовать переключатель, чтобы я мог ходить.

Предположим, у вас есть книга, содержащая множество листов, но часто вам просто нужно перемещаться между двумя конкретными несмежными листами, такими как Sheet1 и Sheet 30. Как вы могли быстро и легко переключаться между этими двумя несмежными листами в Excel?

Вкладка Office позволяет редактировать и просматривать в Office с вкладками и значительно упрощает работу . Kutools for Excel решает большинство ваших проблем и увеличивает вашу производительность на 80%
  • Повторное использование чего угодно: Добавляйте наиболее часто используемые или сложные формулы, диаграммы и все остальное в избранное и быстро используйте их в будущем.
  • Более 20 текстовых функций: Извлечь число из текстовой строки; Извлечь или удалить часть текстов; Преобразование чисел и валют в английские слова.
  • Инструменты слияния : Несколько книг и листов в одну; Объединить несколько ячеек / строк / столбцов без потери данных; Объедините повторяющиеся строки и сумму.
  • Разделить инструменты : Разделение данных на несколько листов в зависимости от ценности; Из одной книги в несколько файлов Excel, PDF или CSV; От одного столбца к нескольким столбцам.
  • Вставить пропуск Скрытые / отфильтрованные строки; Подсчет и сумма по цвету фона ; Отправляйте персонализированные электронные письма нескольким получателям массово.
  • Суперфильтр: Создавайте расширенные схемы фильтров и применяйте их к любым листам; Сортировать по неделям, дням, периодичности и др .; Фильтр жирным шрифтом, формулы, комментарий .
  • Более 300 мощных функций; Работает с Office 2007-2019 и 365; Поддерживает все языки; Простое развертывание на вашем предприятии или в организации.

Переключение между двумя несмежными листами с кодом VBA

Удивительный! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Экономьте 50% своего времени и сокращайте тысячи щелчков мышью каждый день!

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

1. Удерживайте ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.

2. А затем дважды щелкните ThisWorkbook в Обозреватель проекта чтобы открыть модуль, см. снимок экрана:

doc-toggle-two-sheet1

Внимание: Если Обозреватель проекта не отображается при открытии Microsoft Visual Basic для приложений окна, вы можете нажать Вид И выберите Обозреватель проекта чтобы открыть его, см. снимок экрана:

doc-toggle-two-sheet5

3. А затем вставьте следующий код в Окно модуля.

VBA: переключение между двумя несмежными листами

4. И щелкните два листа (Sheet1 и Sheet30), между которыми вы хотите переключаться один за другим.

5, Затем нажмите F5 для запуска этого кода, если вы нажмете один раз, отобразится Лист 1, и нажмите еще раз, Лист 30 будет переключен. Таким образом, вы можете переключать эти два листа назад и вперед, нажимая кнопку F5 ключ.

Переключение между двумя несмежными листами с помощью Kutools for Excel

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

Kutools for Excel включает более 300 удобных инструментов Excel. Бесплатная пробная версия без ограничений в течение 30 дней. Получить сейчас.

Когда вы установили Kutools for Excel, выполните следующие действия:

1. Откройте книгу, которую хотите использовать. А затем нажмите Kutools > Навигация, см. снимок экрана:

doc-toggle-two-sheet2

2, И Область переходов отобразится, затем щелкните Листы меню.

doc-toggle-two-sheet3

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

Внимание: Вы также можете переключать два листа в двух книгах.


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

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

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

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

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

VBA Activate Sheet - Пример № 1

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


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

Шаг 1: Теперь перейдите к VBA и на вкладке меню « Вставка » выберите « Модуль», как показано ниже.


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

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

Код:


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

Код:


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

Код:


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

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

Код:


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

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

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


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


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


VBA Activate Sheet - Пример № 2

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

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

Код:


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

Код:


Шаг 3: Теперь используйте функцию «Активировать», обозначенную точкой (.), Чтобы активировать лист.

Код:


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

Код:


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


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


VBA Activate Sheet - Пример № 3

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

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

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

Код:


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

Код:


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

Код:


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

Код:


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

Код:


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


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


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


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

Плюсы Excel VBA Activate Sheet

  • Выбрать любой лист в Excel, а также с VBA довольно просто.
  • Эта функция очень полезна, когда наш код связан с данными на разных листах.

То, что нужно запомнить

  • Функция выбора и активации выполняет ту же функцию, что и активация любого листа. Хотя название другое.
  • Различные комбинации выбора и активации вместе с листами и рабочим листом возможны для активации одного или нескольких рабочих листов.
  • Активация любых листов означает выбор этого листа.
  • После выполнения кода сохраните файл в Macro Enable Worksheet. Это помогает сохранить код, чтобы мы могли использовать его несколько раз без каких-либо потерь.

Рекомендуемые статьи

Это руководство к листу активации VBA. Здесь мы обсудили, как активировать лист в Excel, используя код VBA, а также некоторые практические примеры и загружаемый шаблон Excel. Вы также можете просмотреть наши другие предлагаемые статьи -

Переход между книгами при активной UserForm VBA

Весь MS Office, программирование на Visual Basic for Applications и MS VB
Не знаю, может вопрос глупый но я в затупе!
Есть база, при открытии книги запускается форма (их там много).
В эти формы по мере необходимости надо заносить (копировать) из различных excel документов данные . Но при активной UserForm нет никакой возможности не то что бы запустить но и даже активировать раннее открытый другой excel файл.
есть ли выход У формы есть свойство ShowModal
Значение этого свойства по умолчанию - TRUE
Установите это свойство в FALSE, и проблема исчезнет.

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216

Точно .
Спасибо большое!- не знал!!
Теперь другая проблема, появился доступ к листам самой базы- а это не хорошо.Я специально поставил на всех формах запрет закрытия по крестику и пароль который убирается со всех листов книги при открытии книги(чтобы не мешал работе макросов) и одновременном запуске главной формы а при закрытии (закрыть можно только с главной) происходит установка пароля на все листы и автозакрытие книги. Таким образом я не давал возможность юзеру попасть на листы этой базы, даже если он в момент запуска отключит макросы можно только полистать листы - пароль снят не будет. Тоесть в Вашем предложенном варианте появляется доступ к листам базы тогда когда уже пароль снят и там можно накуралесить делов тока держись - кладовщицы народ шустрый .
Наверно в таком случае мне надо подумать над другим способом защиты листов базы, чоб макрос работал а ручки нет. А как на счет скрытых листов.
На тулбаре "Элементы управления" есть кнопка "Свойства".
Стоя на листе в свойстве Visible можно установить значение 2, и тогда лист нельзя будет сделать видимым даже при помощи Формат/Лист/Показать (только из редактора VBA)
Тогда может и заморочки с паролями не понядобятся? Спасибо!
Мысль конешно интересная но как это сделать в моём случае?
число листов в базе колеблется в районе 200 и самое интересное их число непрерывно (в процессе работы с базой) изменяется программно, как добавляются так и удаляются, а пользователь видит только первый лист за формой которому я просто поставил зелёный фон и ярлычки от листов которые он не может активировать(поэтому он и не видит что происходит на рабочих листах). Если бы это сделать как с установкой/снятием паролей одновременно на все листы сколько бы их там не было который я использую

Нет ничего проще

If Sh.Index>1 then Sh.Visible=2

. и спрятали всё, кроме первого

Действительно! Что то я протупил.
но теперь другое, иногда программе надо выбрать лист (например перед загрузкой диапазона в комбобокс из 6 колонок), метод селект завершен неверно, наверно надо перед этим на время делать так Sh.Visible=-1 а потом Sh.Visible=2
Я на верном пути ? Или есть другой выход?
Большой спасибо за помощь!

Для подобных задач можно придумать несколько вариантов реализации.

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

полностью откажитесь от использования методов Select и Activate в своём коде.
В 95 % случаев их использование не требуется, и только замедляет выполнение кода.

В любом случае, для записи в комбобокс использование метода Select не требуется.

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216

Читайте также: