Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск среди имен листов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск среди имен листов (Макросы/Sub)
Поиск среди имен листов
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]
К сообщению приложен файл: cube_map.xlsm (36.5 Kb)


Сообщение отредактировал Karbofox - Четверг, 05.06.2014, 15:03
 
Ответить
СообщениеПомогите пожалуйста "исправить" макрос для поиска среди имен листов по части названия.
А то я понакручивал себе уже ... :'( По этому куску кода ищет совпадения, но при выборе "Да" - не останавливается. И соответственно ничего не пишет, если совпадений не было найдено.
[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 в 12:55
SkyPro Дата: Четверг, 05.06.2014, 13:19 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1206
Репутация: 255 ±
Замечаний: 0% ±

2010
А так не подойдет?
К сообщению приложен файл: 5390003.xlsm (38.8 Kb)


skypro1111@gmail.com
 
Ответить
СообщениеА так не подойдет?

Автор - SkyPro
Дата добавления - 05.06.2014 в 13:19
Karbofox Дата: Четверг, 05.06.2014, 14:25 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 69
Репутация: 16 ±
Замечаний: 0% ±

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

Автор - Karbofox
Дата добавления - 05.06.2014 в 14:25
_Boroda_ Дата: Четверг, 05.06.2014, 14:36 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
If choice = 6
[/vba]или[vba]
Код
If choice = vbYes
[/vba]

Почитайте http://msdn.microsoft.com/ru-ru....5).aspx


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
If choice = 6
[/vba]или[vba]
Код
If choice = vbYes
[/vba]

Почитайте http://msdn.microsoft.com/ru-ru....5).aspx

Автор - _Boroda_
Дата добавления - 05.06.2014 в 14:36
DJ_Marker_MC Дата: Четверг, 05.06.2014, 14:40 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

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

Автор - DJ_Marker_MC
Дата добавления - 05.06.2014 в 14:40
Alex_ST Дата: Четверг, 05.06.2014, 14:50 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 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
 
Ответить
СообщениеИз-за того, что у Вас 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]

Автор - Alex_ST
Дата добавления - 05.06.2014 в 14:50
_Boroda_ Дата: Четверг, 05.06.2014, 14:55 | Сообщение № 7
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
VBE пометил красным - фигню какую-то, написанную в MsgBox

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


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

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

Автор - _Boroda_
Дата добавления - 05.06.2014 в 14:55
Alex_ST Дата: Четверг, 05.06.2014, 14:58 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

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



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеСаш, а ты не обратил внимание, что не все русские буквы "скракозяьрились". Значит, с раскладкой было всё в порядке.
А вот если попытаться вставить в VBE текст процедуры из первого поста, то там появляется лишняя не закрытая кавычка среди зюковок.

Автор - Alex_ST
Дата добавления - 05.06.2014 в 14:58
_Boroda_ Дата: Четверг, 05.06.2014, 15:01 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

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


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНу ладно, придет автор - у него и уточним
Кстати, тест
àáâãäå¸æçèêëìíóôõ
éöóêåíãøùçõúýæäëîðïàâûôÿ÷ñìèòüáþ.

Автор - _Boroda_
Дата добавления - 05.06.2014 в 15:01
Alex_ST Дата: Четверг, 05.06.2014, 15:05 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

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



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

Автор - Alex_ST
Дата добавления - 05.06.2014 в 15:05
Alex_ST Дата: Четверг, 05.06.2014, 15:08 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

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

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



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


Сообщение отредактировал Alex_ST - Четверг, 05.06.2014, 15:09
 
Ответить
Сообщение
Кстати, тест
àáâãäå¸æçèêëìíóôõ
éöóêåíãøùçõúýæäëîðïàâûôÿ÷ñìèòüáþ.

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

Автор - Alex_ST
Дата добавления - 05.06.2014 в 15:08
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
 
Ответить
СообщениеФорма\текстбокс\листбокс
код:
[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]
Ничего сверхестественного :)

Автор - SkyPro
Дата добавления - 05.06.2014 в 15:09
Karbofox Дата: Четверг, 05.06.2014, 15:12 | Сообщение № 13
Группа: Проверенные
Ранг: Участник
Сообщений: 69
Репутация: 16 ±
Замечаний: 0% ±

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

То я уже вручную все переписал,а одну строку забыл - там нет лишних кавычек и текста)
Подскажите пожалуйста, а почему не работает часть [vba]
Код
If Err Then MsgBox "Листа с таким именем нет"
[/vba]

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

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

То я уже вручную все переписал,а одну строку забыл - там нет лишних кавычек и текста)
Подскажите пожалуйста, а почему не работает часть [vba]
Код
If Err Then MsgBox "Листа с таким именем нет"
[/vba]

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


Автор - Karbofox
Дата добавления - 05.06.2014 в 15:12
Alex_ST Дата: Четверг, 05.06.2014, 15:17 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

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



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

Автор - Alex_ST
Дата добавления - 05.06.2014 в 15:17
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]
 
Ответить
Сообщение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]

Автор - SkyPro
Дата добавления - 05.06.2014 в 15:22
Alex_ST Дата: Четверг, 05.06.2014, 15:23 | Сообщение № 16
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Потому что ошибки не возникает
 
Ответить
СообщениеПотому что ошибки не возникает

Автор - Alex_ST
Дата добавления - 05.06.2014 в 15:23
_Boroda_ Дата: Четверг, 05.06.2014, 15:26 | Сообщение № 17
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 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]
 
Ответить
Сообщение
а почему не работает часть
Потому, что Вы выходите из цикла, но не из макроса. Нужно что-то типа 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]

Автор - _Boroda_
Дата добавления - 05.06.2014 в 15:26
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск среди имен листов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!