Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2015, 17:51   #1
rbs45
 
Регистрация: 17.01.2015
Сообщений: 6
Хорошо Многократный поиск значения в таблице

Добрый день!

Есть такой код:
Код:
Private Sub CommandButton1_Click()
Dim i As Integer
i = 0
Do
i = i + 1
With Worksheets(1).Range("Схема!$A$1:$AL$1000")
    c = InputBox(Prompt:="Введите номер")
    Set f = Cells.Find(c, After:=ActiveCell, LookIn:=xlValues)
        f.Activate
        f.Interior.ColorIndex = 8
    
End With
Loop Until c = ""
f.Activate
f.Interior.ColorIndex = 2
End Sub
Скрипт находит значение в ячейке, выделяет и перепрыгивает на ячейку если таково значение есть.
Но есть 2 проблемы:
1) При нахождении ячейки, значение формы поиска обнуляется и стаёт пустым, как сделать что бы это значение (первоначальное) оставалось в поле поиска с целью нахождения следующих значений (ну и дальнейшего перепрыгивания к ним как это делается при первом поиске)?
2) Если в форму поиска ввести значение которого не существует в таблице, возникает cообщение: Run-time Error `91` Object variable or with block variable not set. Как избавиться от этого окна - что бы оно вообще не появлялось или чтобы вывело что такого значения не существует в таблице??

Заранее спасибо
rbs45 вне форума Ответить с цитированием
Старый 18.01.2015, 00:48   #2
rbs45
 
Регистрация: 17.01.2015
Сообщений: 6
По умолчанию поиск по таблице

Предложите свой вариант макроса с данным функционалом пожалуйста если нет возможности исправить этот.
rbs45 вне форума Ответить с цитированием
Старый 18.01.2015, 01:46   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Пример поиска " с целью нахождения следующих значений" ищите в хелпе - там всё исчерпывающе описано.
Ну и судя по задаче вместо c = InputBox(Prompt:="Введите номер") нужно использовать текстбокс на форме. Которую Вы не показываете.
Ну а если формы нет - то есть другой вариант. Но файл с многочисленными вариантами лично мне делать лень.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.01.2015, 12:27   #4
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
Подмигивание

Попробуйте этот код :

Код:
Sub mmm()
With Worksheets(1).Range("A4:T12")
s = InputBox("Что ищем ??", , "s22")
Set c = .Find(s, LookIn:=xlValues)
If Not c Is Nothing Then
  firstAddress = c.Address
  Debug.Print c.Address
  ss = c.Address
  Do
      Set c = .FindNext(c)
      Debug.Print c.Address
If c.Address <> firstAddress Then
 ss = ss & " " & c.Address
End If
  Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
MsgBox ss, vbInformation, "Искали  " & s
End Sub
Djeki вне форума Ответить с цитированием
Старый 18.01.2015, 13:17   #5
rbs45
 
Регистрация: 17.01.2015
Сообщений: 6
По умолчанию добавляю форму

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Пример поиска " с целью нахождения следующих значений" ищите в хелпе - там всё исчерпывающе описано.
Ну и судя по задаче вместо c = InputBox(Prompt:="Введите номер") нужно использовать текстбокс на форме. Которую Вы не показываете.
Ну а если формы нет - то есть другой вариант. Но файл с многочисленными вариантами лично мне делать лень.

До поиска :


После поиска: (Хотелось бы сделать так что бы первоначальное значение в строке сохранилось с целью дальнейшего поиска)


Запись не найдена: ( Как избавиться от отладки а просто не выполнять никаих действий или же дать ответ,, что такой записи не существует?)


Спасибо за помощь!
rbs45 вне форума Ответить с цитированием
Старый 18.01.2015, 14:28   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

уважаемый rbs45,

найти в определенном диапазоне опеределенные ячейки - это как два байта отослать!

а вот для чего это Вам? - полнейшая загадка!
что делать с найденным? очистить, окрасить, оставить видимыми только строки с найденными значениями, заменить их на что-то?
допустим, все найдено и собрано в диапазон FindedRange, что дальше?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.01.2015, 14:45   #7
rbs45
 
Регистрация: 17.01.2015
Сообщений: 6
По умолчанию

Цель упростить поиск для людей которые очень далёкие от поиска в меню. Таблица будет с большим количеством информации, допустим до 10 тыс строк и 5-8 столбцов. По сути получается сделать аналог ctrl+f только в моем случае будет большая кнопочка сверху - ПОИСК
Далее - подсветка и перепрыгивание к найденной ячейки с целью узнать значения в других ячейках этой строки. (это реализовано в первом сообщении, но дальше происходит опустошение поля формы + сразу подсвечиваются все ячейки в таблице з таким значением )
Но Это значение (скажем во втором столбике) может повторяться, а в разных строках может быть разная информация.
Т.е. хочется сделать так чтобы первонаачальное значение поиска сохранялось в окне формы после первого нажатия по кнопочке ОК чтобы не пришлось его вводить заново, а просто нажать ещё раз кнопочку ОК и курсор перепрыгнул к следующему такому же значению, которое находится в этом (втором) столбце только строками ниже и так до конца документа.

Последний раз редактировалось rbs45; 18.01.2015 в 14:51. Причина: Дополнение
rbs45 вне форума Ответить с цитированием
Старый 18.01.2015, 15:04   #8
rbs45
 
Регистрация: 17.01.2015
Сообщений: 6
По умолчанию

Чтобы не придумывать велосипед.
1) Помогите сделать как в моём примере на скриншотах, только чтобы при нажатии кнопки "ПОИСК БС" вылетало меню стандартного поиска по таблице Excel.

2) по возможности но не обязательно упростить это меню поиска до подобного вида
rbs45 вне форума Ответить с цитированием
Старый 18.01.2015, 15:11   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Function FindAllIn(That, Where As Range) As Range
  Dim rg As Range, frg As Range, adr1, cnt
  With Where
    Set rg = Where.Cells(1)
    Set rg = .Find(That, after:=rg, LookIn:=xlValues)
    If Not rg Is Nothing Then
      adr1 = rg.Address:  Set frg = rg
      Do
        Set rg = .FindNext(rg):  cnt = cnt + 1
        If Not rg Is Nothing Then Set frg = Application.Union(frg, rg) Else Exit Do
      Loop While rg.Address <> adr1
    End If
    Set FindAllIn = frg:  MsgBox "Найдено:  " & cnt & " шт."
  End With
End Function


sub Test
  findallin("090019", [k:k]).select
end sub
вместо [k:k] - впишите правильную колонку
выполните Test
это не решает Вашу задачу, зато демострирует принцип)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.01.2015, 15:15   #10
rbs45
 
Регистрация: 17.01.2015
Сообщений: 6
По умолчанию

Скажите пожалуста можна ли на кнопку в форме повесить стнадарный поиск в таблице , который вызывается гор. кл. Ctrl+f ??
rbs45 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в таблице произвольных строк и подстановка значения из другой Zme Microsoft Office Excel 1 07.06.2014 10:35
Поиск значения в таблице Exsodus Microsoft Office Excel 1 11.05.2012 19:51
Самопроизвольный лимит значения AutoIndex в таблице MySQL DJ Triton PHP 1 23.04.2010 10:16
Замена значений в одной таблице на значения из другой 1134 Microsoft Office Excel 10 09.04.2010 12:12
Поиск значения в таблице solo7_77 Microsoft Office Excel 3 15.11.2008 01:26