Дабы не создавать новую тему,
В моей книге есть макросы, имеющие в своем составе формулы со ссылками на другие листы этой книги. При запуске макросов необходимо проверить книгу на соответствие имен листов (не изменил ли кто случайно). если все ОК, то запускаем другой макрос, если нет, то сообщение, какой лист нужно проверить.
воспользовался примером Busine2012, и Казанский, написал код:
Visual Basic | ||
|
Макрос работает.
Вопрос: можно ли упростить код для проверки имен листов, если число проверяемых листов на правильность имени будет больше 10 (без ухудшения производительности)?
Было бы конечно лучше, если макрос сам переименовывал неправильные названия без участия пользователя..
Заранее спасибо.
Добавлено через 25 минут
Сообщение от dmb2
Было бы конечно лучше, если макрос сам переименовывал неправильные названия без участия пользователя..
Visual Basic | ||
|
Добавлено через 5 минут
Но код проверяет (соответственно и переименовывает неправильные листы) по одному за работу всего цикла. Хотелось бы чтобы сразу все листы проверил, и все исправил.
Добавлено через 5 минут
Возникла мысль, хотелось бы узнать мнение о целесообразности,
Может обойтись без проверки листов и сразу все листы переименовать?
Проверка существования листа в рабочей книге Excel из кода VBA с помощью присвоения его объектной переменной или перебора существующих листов циклом.
Присвоение листа объектной переменной
Пользовательская функция VBA Excel для проверки существования листа в рабочей книге путем определения результата присвоения ссылки на него объектной переменной. Присвоение состоялось (SheetExist = True) – искомый лист существует, произошла ошибка и присвоение не состоялось (SheetExist = False) – лист не существует.
Function SheetExist(WbName As String, ShName As String) As Boolean Dim mySheet As Worksheet On Error Resume Next Set mySheet = Workbooks(WbName).Sheets(ShName) SheetExist = Not mySheet Is Nothing End Function |
Аргументы функции SheetExist:
- WbName – имя открытой рабочей книги, в которой ищется лист.
- ShName – имя искомого рабочего листа.
Перебор существующих листов циклом
Проверка существования рабочего листа в книге Excel с помощью перебора существующих листов циклом VBA и сравнения их имен с именем искомого листа. Совпадение найдено (SheetExist = True) – искомый лист существует, совпадение не найдено (SheetExist = False) – лист не существует.
Function SheetExist(WbName As String, ShName As String) As Boolean Dim mySheet As Worksheet For Each mySheet In Workbooks(WbName).Sheets If mySheet.Name = ShName Then SheetExist = True Exit Function End If Next End Function |
Пример проверки существования листа
Пример проверки существования искомого листа в рабочей книге Excel с помощью пользовательской функции VBA SheetExist:
Sub Primer() If SheetExist(ThisWorkbook.Name, «Лист1») Then MsgBox «Лист существует» Else MsgBox «Лист не существует» End If End Sub |
Имя сторонней открытой книги должно быть указано вместе с расширением:
... If SheetExist(«Книга2.xlsm», «Лист2») Then ... |
Обратите внимание, если книга, имя которой указано в параметре WbName закрыта или не существует, будет сгенерирована ошибка.
Чтобы функция проверки существования рабочего листа SheetExist была доступна из модуля любой книги Excel на вашем компьютере, разместите ее в Личной книге макросов.
Ow1 Пользователь Сообщений: 19 |
#1 11.11.2016 00:52:11 Всем привет, не могу понять, почему не правильно работает макрос (если делать через функцию, как показано в др. сообщ на форуме и в интернетах, проблем нет…).
Изменено: Ow1 — 11.11.2016 01:22:11 |
||
Sanja Пользователь Сообщений: 14838 |
Ну наверное ни в одной открытой книге нет листа с именем «Имя Листа» Согласие есть продукт при полном непротивлении сторон. |
Ow1 Пользователь Сообщений: 19 |
нет имя листа есть, но указывает неправильную книгу Изменено: Ow1 — 11.11.2016 01:01:21 |
Sanja Пользователь Сообщений: 14838 |
#4 11.11.2016 01:04:08
Согласие есть продукт при полном непротивлении сторон. |
||
Ёк-Мок Пользователь Сообщений: 1775 |
>>> имя листа есть Прикрепленные файлы
Удивление есть начало познания © Surprise me! |
SAS888 Пользователь Сообщений: 757 |
#6 11.11.2016 05:32:56 Здравия.
Понимать ее нужно так: если такого листа нет, то присвоить переменной имя текущей книги.
см. пост № 4 Изменено: SAS888 — 11.11.2016 05:39:04 Чем шире угол зрения, тем он тупее. |
||||
Ow1 Пользователь Сообщений: 19 |
Код в 4 посте также не совсем работает, и я понел почему — если лист который мы ищем в 1ой книге с макросом, он почему-то пропускает не видит. хотя форейч проходит по всем книгам… Не понятно… Вот файлы примеров(в файле пример находится макрос): |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#8 11.11.2016 09:43:03 Доброе время суток
И если уж делате таким странным образом, то перед
Вставьте
Иначе, если хотя бы раз лист с таким именем был найден, то в wsSh будет хранится ссылка на успешно найденный лист, и по коду дальше вы будете получать неверное имя книги, так как Resume Next всего лишь пропускает строку, вызвавшую ошибку, но ничего не меняет в состоянии переменных. |
||||||
Юрий М Модератор Сообщений: 60586 Контакты см. в профиле |
А если в нескольких книгах имеется лист с нужным именем? )) |
Андрей VG Пользователь Сообщений: 11878 Excel 2016, 365 |
#10 11.11.2016 21:51:15
P. S. ТСы какие «вежливые» пошли — ни гу-гу. Изменено: Андрей VG — 12.11.2016 09:34:24 |
||||
Ow1 Пользователь Сообщений: 19 |
#11 12.11.2016 21:27:50
Обойдемся пока уникальным именем…
Да, действительно, вы правы. Большое спасибо за подробный ответ. =) Тему можно закрыть. |
||||
Обычно мы можем легко находить / искать ячейки с помощью функции поиска и замены. Но иногда нам нужно искать по имени листа. Например, на панели вкладок листа сжимаются десятки листов, и нам нужно быстро найти рабочий лист и перейти к нему. Так как? В этой статье мы обсудим оба метода, чтобы легко решить эту проблему.
- Поиск по имени рабочего листа с VBA
- Поиск по имени рабочего листа с помощью «Создать список имен листов» Kutools for Excel (5 шаги)
- Поиск по имени рабочего листа с помощью панели навигации Kutools for Excel (2 шаги)
Поиск по имени рабочего листа с VBA
Этот метод представит макрос VBA для простого поиска на листе в активной книге.
1, нажмите другой + F11 одновременно клавиши, чтобы открыть окно Microsoft Visual Basic для приложений.
2. Нажмите Вставить > Модули, а затем вставьте следующий код VBA в новое открывающееся окно модуля.
VBA: поиск по имени листа
Sub SearchSheetName()
Dim xName As String
Dim xFound As Boolean
xName = InputBox("Enter sheet name to find in workbook:", "Sheet search")
If xName = "" Then Exit Sub
On Error Resume Next
ActiveWorkbook.Sheets(xName).Select
xFound = (Err = 0)
On Error GoTo 0
If xFound Then
MsgBox "Sheet '" & xName & "' has been found and selected!"
Else
MsgBox "The sheet '" & xName & "' could not be found in this workbook!"
End If
End Sub
3, нажмите F5 ключ или щелкните Run кнопку для запуска этого VBA.
4. Появится диалоговое окно поиска листа, введите имя листа, на котором вы будете искать, и нажмите кнопку OK кнопка. Смотрите скриншот:
Появится другое диалоговое окно, в котором сообщается, найден рабочий лист или нет. Просто закрой это.
Примечание: Этот VBA требует точно совпадающего имени рабочего листа. Только вы вводите точно полное имя рабочего листа, вы можете узнать этот рабочий лист с помощью этого VBA.
Поиск по имени рабочего листа с помощью «Создать список имен листов» Kutools for Excel
В приведенном выше VBA может быть непросто найти рабочий лист, если вы не можете точно вспомнить и ввести имя рабочего листа. Этот метод познакомит Kutools for ExcelАвтора Создать список имен листов утилита для поиска и простого перехода к рабочему листу.
1. Нажмите Кутулс Плюс > Рабочий лист > Создать список имен листов , чтобы открыть диалоговое окно «Создать список имен листов». Смотрите скриншоты:
2. В открывшемся диалоговом окне Create List of Sheet Names укажите параметры: (1) проверить Содержит список гиперссылок вариант; (2) введите имя для нового созданного индексного листа; (3) указать место нового индексного листа; и (4) перечислите все имена рабочих листов в одном столбце индексного листа.
3, Нажмите Ok кнопка. Теперь создается новый индексный лист, который помещается перед всеми листами.
4. Перейдите к индексной странице и нажмите Ctrl + F одновременно с клавишами, чтобы открыть диалоговое окно «Найти и заменить», введите ключевое слово в поле Найти то, что и нажмите Найти все кнопка. Смотрите скриншот:
Теперь все имена листов, содержащие ключевые слова, найдены и перечислены в нижней части диалогового окна «Найти и заменить». См. Диалоговое окно выше.
5. Щелкните имя найденного рабочего листа в диалоговом окне «Найти и заменить», чтобы выбрать соответствующую ячейку, затем щелкните выбранную ячейку на индексном листе, и он сразу перейдет к соответствующему рабочему листу.
Демо: поиск по имени листа в Excel
Поиск по имени рабочего листа с помощью панели навигации Kutools for Excel
Если у вас есть Kutools for Excel установлен, вы можете легко искать рабочие листы по имени листа в области навигации. Пожалуйста, сделайте следующее:
Kutools for Excel — Включает более 300 удобных инструментов для Excel. Полнофункциональная бесплатная пробная версия 30-день, кредитная карта не требуется! Get It Now
1. По умолчанию открывается панель навигации. Если закрыто, нажмите Кутулс > Область переходов чтобы отобразить панель навигации, а затем щелкните (Рабочая книга и лист) в левой части области навигации.
2. Вперед, чтобы проверить Фильтр флажок в области навигации и введите указанные ключевые слова в следующее поле. Теперь все листы, имена которых содержат указанные ключевые слова, будут найдены и перечислены в поле ниже. Смотрите скриншот:
Внимание: При нажатии на результаты поиска сразу открывается соответствующий рабочий лист.
Демонстрация: поиск по имени рабочего листа с помощью панели навигации Kutools for Excel
Статьи по теме:
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (6)
Оценок пока нет. Оцените первым!
Поиск среди имен листов |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |