Поиск листа в книге excel vba

Дабы не создавать новую тему,

В моей книге есть макросы, имеющие в своем составе формулы со ссылками на другие листы этой книги. При запуске макросов необходимо проверить книгу на соответствие имен листов (не изменил ли кто случайно). если все ОК, то запускаем другой макрос, если нет, то сообщение, какой лист нужно проверить.

воспользовался примером Busine2012, и Казанский, написал код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
   Sub ttt()
    
    'Создаём переменную, в которую поместим имя листа.
    Dim sName As String
    Dim aName As String
    
    'Создаём переменную, с помощью которой будем обращаться к нужному листу.
    Dim oSheet As Excel.Worksheet
    'Помещаем в переменные имена листов.
    sName = "ДАННЫЕ"
    aName = "РЕЗУЛЬТАТЫ"
    bName = "ИТОГИ
 
    On Error Resume Next
    
        'Присваиваем листу имя oSheet.
Set oSheet = Worksheets(sName)
  
    
        If Worksheets(sName) Is Nothing Then
            MsgBox "Проверь имя листа ДАННЫЕ.", vbCritical
   Else
    
Set oSheet = Worksheets(aName)
    
    If Worksheets(aName) Is Nothing Then
            MsgBox "проверь имя листа РЕЗУЛЬТАТЫ.", vbCritical
    Else
Set oSheet = Worksheets(bName)
    
    If Worksheets(bName) Is Nothing Then
            MsgBox "проверь имя листа ИТОГИ.", vbCritical
               Else
            MsgBox "Работа разрешена.", vbCritical  ' работа макроса
    End If
 End If
 End If
    
End Sub

Макрос работает.

Вопрос: можно ли упростить код для проверки имен листов, если число проверяемых листов на правильность имени будет больше 10 (без ухудшения производительности)?

Было бы конечно лучше, если макрос сам переименовывал неправильные названия без участия пользователя..

Заранее спасибо.

Добавлено через 25 минут

Цитата
Сообщение от dmb2
Посмотреть сообщение

Было бы конечно лучше, если макрос сам переименовывал неправильные названия без участия пользователя..

Visual Basic
1
Лист1.Name="Данные"

Добавлено через 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
Регистрация: 27.07.2016

#1

11.11.2016 00:52:11

Всем привет, не могу понять, почему не правильно работает макрос (если делать через функцию, как показано в др. сообщ на форуме и в интернетах, проблем нет…).
Его задача: Во всех открытых книгах найти лист с определенным именем.
Помогите разобраться. Спасибо.

Код
Sub fd()
Dim y As String
Dim wbBook As Workbook

    For Each wbBook In Workbooks
    MsgBox (wbBook.Name)
    
    Dim wsSh As Worksheet
    On Error Resume Next
    Set wsSh = wbBook.Sheets("Имя Листа")
      If wsSh Is Nothing Then
         y = wbBook.Name
      End If
    
     Next wbBook

     MsgBox (y)   
End Sub

Изменено: Ow111.11.2016 01:22:11

 

Sanja

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

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

Ну наверное ни в одной открытой книге нет листа с именем «Имя Листа»
Или что значит «не правильно работает»?

Согласие есть продукт при полном непротивлении сторон.

 

Ow1

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

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

нет имя листа есть, но указывает неправильную книгу

Изменено: Ow111.11.2016 01:01:21

 

Sanja

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

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

#4

11.11.2016 01:04:08

Код
Sub fd()
Dim y As String
Dim wbBook As Workbook
Dim wsSh As Worksheet
On Error Resume Next
For Each wbBook In Workbooks
    Set wsSh = wbBook.Sheets("Имя Листа")
    If Not wsSh Is Nothing Then
        MsgBox wbBook.Name
    End If
Next wbBook
End Sub

Согласие есть продукт при полном непротивлении сторон.

 

Ёк-Мок

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

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

>>> имя листа есть
Как на картинке — «Имя Листа»?

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

  • 01.png (2.33 КБ)

Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.

 

SAS888

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

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

#6

11.11.2016 05:32:56

Здравия.
У Вас в коде есть строка

Код
 If wsSh Is Nothing Then y = wbBook.Name

Понимать ее нужно так: если такого листа нет, то присвоить переменной имя текущей книги.
Может нужно, все-таки, наоборот?

Код
 If Not wsSh Is Nothing Then y = wbBook.Name

см. пост № 4

Изменено: SAS88811.11.2016 05:39:04

Чем шире угол зрения, тем он тупее.

 

Ow1

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

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

Код в 4 посте также не совсем работает, и я понел почему — если лист который мы ищем в 1ой книге с макросом, он почему-то пропускает не видит. хотя форейч проходит по всем книгам… Не понятно… Вот файлы примеров(в файле пример находится макрос):

 

Андрей VG

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

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

Excel 2016, 365

#8

11.11.2016 09:43:03

Доброе время суток
А для чего столь странная конструкция с On Error Resume Next — что бы не вводить второй цикл? А чем он мешает?

Код
Public Sub listFinder()
    Dim pBook As Workbook, pSheet As Worksheet
    For Each pBook In Application.Workbooks
        For Each pSheet In pBook.Worksheets
            If StrComp(pSheet.Name, "Имя Листа", vbTextCompare) = 0 Then
                MsgBox pBook.Name
            End If
        Next
    Next
End Sub

И если уж делате таким странным образом, то перед

Код
Set wsSh = wbBook.Sheets("Имя Листа")

Вставьте

Код
Set wsSh = Nothing

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

 

Юрий М

Модератор

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

Контакты см. в профиле

А если в нескольких книгах имеется лист с нужным именем? ))

 

Андрей VG

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

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

Excel 2016, 365

#10

11.11.2016 21:51:15

Цитата
Юрий М написал: А если в нескольких книгах имеется лист с нужным именем? ))

:D

Цитата
Ow1 написал: Его задача: Во всех открытых книгах найти лист с определенным именем.

P. S. ТСы какие «вежливые» пошли — ни гу-гу.

Изменено: Андрей VG12.11.2016 09:34:24

 

Ow1

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

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

#11

12.11.2016 21:27:50

Цитата
Юрий М написал: А если в нескольких книгах имеется лист с нужным именем? ))

Обойдемся пока уникальным именем…

Цитата
Андрей VG написал:А для чего столь странная конструкция с On Error Resume Next — что бы не вводить второй цикл? А чем он мешает?

Да, действительно, вы правы. Большое спасибо за подробный ответ. =)

Тему можно закрыть.

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

  • Поиск по имени рабочего листа с 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. Нажмите Кутулс Плюс > Рабочий лист > Создать список имен листов , чтобы открыть диалоговое окно «Создать список имен листов». Смотрите скриншоты:
поиск документов по листу 01

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-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (6)


Оценок пока нет. Оцените первым!

Поиск среди имен листов

Karbofox

Дата: Четверг, 05.06.2014, 12:55 |
Сообщение № 1

Группа: Проверенные

Ранг: Участник

Сообщений: 69


Репутация:

16

±

Замечаний:
0% ±


Excel 2010

Помогите пожалуйста «исправить» макрос для поиска среди имен листов по части названия.
А то я понакручивал себе уже … :'( По этому куску кода ищет совпадения, но при выборе «Да» — не останавливается. И соответственно ничего не пишет, если совпадений не было найдено.
[vba]

Код

Sub Macros()
Dim ws As String
Dim a As Integer

   ws = InputBox(«ВВедите имя листа/часть имени», «Поиск листа по имени», ActiveSheet.Name)

      If ws = «» Then Exit Sub
On Error Resume Next

        For i = 1 To Worksheets.Count
       If InStr(Worksheets(i).Name, ws) > 0 Then
          Worksheets(i).Select
   choice = MsgBox(«Нашли?», vbYesNo)
   If choice = «Yes» Then Exit For ‘ Exit inner loop.
   End If
   Next i
If Err Then MsgBox «Листа с таким именем нет»
End Sub

[/vba]

Сообщение отредактировал KarbofoxЧетверг, 05.06.2014, 15:03

 

Ответить

SkyPro

Дата: Четверг, 05.06.2014, 13:19 |
Сообщение № 2

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

А так не подойдет?

К сообщению приложен файл:

5390003.xlsm
(38.8 Kb)


skypro1111@gmail.com

 

Ответить

Karbofox

Дата: Четверг, 05.06.2014, 14:25 |
Сообщение № 3

Группа: Проверенные

Ранг: Участник

Сообщений: 69


Репутация:

16

±

Замечаний:
0% ±


Excel 2010

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

 

Ответить

_Boroda_

Дата: Четверг, 05.06.2014, 14:36 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

DJ_Marker_MC

Дата: Четверг, 05.06.2014, 14:40 |
Сообщение № 5

Группа: Друзья

Ранг: Ветеран

Сообщений: 991


Репутация:

213

±

Замечаний:
0% ±


Excel 2019

SkyPro, крутая штука))) добавил себе надстройку. Очень удобно.

 

Ответить

Alex_ST

Дата: Четверг, 05.06.2014, 14:50 |
Сообщение № 6

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Из-за того, что у Вас VBE пометил красным — фигню какую-то, написанную в MsgBox: [vba]

Код

choice = MsgBox(«I’a`?e»e`?», vbYesNo)

[/vba] и не правильно отлавливаете его ответ
Ну и ещё может быть, если у Вас в декларациях прописано Option Explicit, то из-за того, что вместо переменной i определили а[vba]

Код

Sub Macros()
      Dim ws As String
      Dim i As Integer
      ws = InputBox(«Введите имя листа/часть имени», «Поиск листа по имени», ActiveSheet.Name)
      If ws = «» Then Exit Sub
      On Error Resume Next
      For i = 1 To Worksheets.Count
         If InStr(Worksheets(i).Name, ws) > 0 Then
            Worksheets(i).Select
            If MsgBox(«Этот лист?», vbYesNo) = vbYes Then Exit For ‘ Exit inner loop.
         End If
      Next i
      If Err Then MsgBox «Листа с таким именем нет»
End Sub

[/vba]



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 05.06.2014, 14:54

 

Ответить

_Boroda_

Дата: Четверг, 05.06.2014, 14:55 |
Сообщение № 7

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

VBE пометил красным — фигню какую-то, написанную в MsgBox

Леш, там на самом деле все нормально написано. Просто когда копировались данные из окна VBA — язык стоял английский, а когда сюда вставлялись — язык стоял русский. Поэтому русские буквы и поменялись. помнишь, тут даже тема про это была?


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Alex_ST

Дата: Четверг, 05.06.2014, 14:58 |
Сообщение № 8

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Саш, а ты не обратил внимание, что не все русские буквы «скракозяьрились». Значит, с раскладкой было всё в порядке.
А вот если попытаться вставить в VBE текст процедуры из первого поста, то там появляется лишняя не закрытая кавычка среди зюковок.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

_Boroda_

Дата: Четверг, 05.06.2014, 15:01 |
Сообщение № 9

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Ну ладно, придет автор — у него и уточним
Кстати, тест
àáâãäå¸æçèêëìíóôõ
éöóêåíãøùçõúýæäëîðïàâûôÿ÷ñìèòüáþ.


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

Alex_ST

Дата: Четверг, 05.06.2014, 15:05 |
Сообщение № 10

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Блин! Есть свободное время и желание посмотреть, что так понравилось DJ_Marker_MC, а разрешения на загрузку файлов с макросами на работе нет… (Сволочи сисадмины!)
А пока до дому доберусь, забуду :(
Там только процедуры или ещё и форма? Если только текст, то кто-нибудь скиньте его сюда, пожалуйста, повеселите старика (до совещания ещё 45 минут, а делать нечего).



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

Alex_ST

Дата: Четверг, 05.06.2014, 15:08 |
Сообщение № 11

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Кстати, тест
àáâãäå¸æçèêëìíóôõ
éöóêåíãøùçõúýæäëîðïàâûôÿ÷ñìèòüáþ.

при вводе в VBE греческая каппа воспринимается как кавычка.
А «раскракозябрить» скриптом удалось.: абвгдеёжзиклмнуфх
йцукенгшщзхъэждлорпавыфячсмитьбю.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STЧетверг, 05.06.2014, 15:09

 

Ответить

SkyPro

Дата: Четверг, 05.06.2014, 15:09 |
Сообщение № 12

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Форматекстбокслистбокс
код:
[vba]

Код

Private Sub ListBox1_Click()
Sheets(ListBox1.Text).Activate
End Sub

Private Sub TextBox1_Change()
Dim sh As Worksheet
ListBox1.Clear
For Each sh In ThisWorkbook.Worksheets
     If Not TextBox1.Text = «» Then
         If LCase(sh.Name) Like «*» & LCase(TextBox1.Text) & «*» Then
             ListBox1.AddItem sh.Name
         End If
     End If
Next
End Sub

[/vba]
Ничего сверхестественного :)


skypro1111@gmail.com

 

Ответить

Karbofox

Дата: Четверг, 05.06.2014, 15:12 |
Сообщение № 13

Группа: Проверенные

Ранг: Участник

Сообщений: 69


Репутация:

16

±

Замечаний:
0% ±


Excel 2010

Саш, а ты не обратил внимание, что не все русские буквы «скракозяьрились». Значит, с раскладкой было всё в порядке.

То я уже вручную все переписал,а одну строку забыл — там нет лишних кавычек и текста)
Подскажите пожалуйста, а почему не работает часть [vba]

Код

If Err Then MsgBox «Листа с таким именем нет»

[/vba]

Уважаемый Борода,
Вам Спасибо, как всегда!

 

Ответить

Alex_ST

Дата: Четверг, 05.06.2014, 15:17 |
Сообщение № 14

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Спасибо.
Просто и эффективно. Даже в голову не приходило так сделать.
Просто у меня в рабочих книгах больше десятка листов не бывает, вот и не нужно было.
А у девочек в соседней комнате кабельные журналы листов по 50. Они, наверное, оценят.



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

SkyPro

Дата: Четверг, 05.06.2014, 15:22 |
Сообщение № 15

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Karbofox, вместо ошибки проверяйте переключатель:
[vba]

Код

Sub Macros()
Dim ws As String
Dim a As Integer
Dim boo As Boolean ‘ добавим переключатель

    ws = InputBox(«Введите имя листа/часть имени», «Поиск листа по имени», ActiveSheet.Name)

    If ws = «» Then Exit Sub
On Error Resume Next
boo = False
For i = 1 To Worksheets.Count
     If InStr(Worksheets(i).Name, ws) > 0 Then
         Worksheets(i).Select
         choice = MsgBox(«Нашли?», vbYesNo)
         If choice = vbYes Then Exit For
         boo = True ‘если вошли в условие, то переключатель в ТРУ
     End If
Next
     ‘если переключатель остался в ФОЛС, то даем меседж.
     If boo = False Then MsgBox «Листа с таким именем нет»
End Sub

[/vba]

 

Ответить

Alex_ST

Дата: Четверг, 05.06.2014, 15:23 |
Сообщение № 16

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Потому что ошибки не возникает

 

Ответить

_Boroda_

Дата: Четверг, 05.06.2014, 15:26 |
Сообщение № 17

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

а почему не работает часть

Потому, что Вы выходите из цикла, но не из макроса. Нужно что-то типа If choice = 6 Then Exit Sub
И, как уже заметили выше, ошибки-то не возникает
[vba]

Код

Sub Macros()
Dim ws As String
Dim a As Integer

ws = InputBox(«ВВедите имя листа/часть имени», «Поиск листа по имени», ActiveSheet.Name)

If ws = «» Then Exit Sub
      On Error Resume Next

              For i = 1 To Worksheets.Count
          If InStr(Worksheets(i).Name, ws) > 0 Then
          Worksheets(i).Select
          choice = MsgBox(«он?», vbYesNo)
          If choice = 6 Then Exit Sub ‘ Exit inner loop.
      End If
Next i
MsgBox «Листа с таким именем нет»
End Sub

[/vba]

 

Ответить

Like this post? Please share to your friends:
  • Поиск коэффициентов уравнения excel
  • Поиск координаты ячейки excel
  • Поиск координат по адресу excel
  • Поиск контекста в excel
  • Поиск количества уникальных значений в excel