Страницы: 1 2 След.
RSS
[ Закрыто ] макрос поиска
 
Люди, помогите, дополнить код, чтобы в случае отсутствия искомого значения выдавалось MsgBox "Значение не найдено". А то в моем случае выдает ошибку. И в идеале, чтобы поиск шел не на всем листе, а только по первому столбцу А.
Код
Private Sub CommandButton1_Click()
Dim x As String
x = InputBox("Введите артикул, который нужно найти", "Ввод данных дя поиска")
    If x = "" Then
    MsgBox "Вы не ввели данные для поиска!", vbInformation, "ошибка"
    Exit Sub
    End If

 x_text = "*" & x & "*"

 Cells.Find(What:=x_text, After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
End Sub

Заранее спасибо!
 
Код
Private Sub CommandButton1_Click()
    x = InputBox("Введите артикул, который нужно найти", "Ввод данных дя поиска")
    If VarType(x) = vbBoolean Then Exit Sub    ' нажата кнопка ОТМЕНА

    x_text = "*" & x & "*"
    Dim cell As Range
    Set cell = Cells.Find(What:=x_text, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole)
    
    If cell Is Nothing Then
        MsgBox "Ничего не найдено", vbCritical
    Else
        cell.Activate    ' выделяем найденную ячейку
    End If
End Sub


Примеры макросов для поиска в Excel можно поглядеть здесь:
http://excelvba.ru/category/Excel/search
 
Cells.Find    ищет по всему листу
Columns(1).Find  по столбцу А
 
EducatedFool, спасибо!
Цитата
Примеры макросов для поиска в Excel
буду изучать. Очень познавательно

Цитата
Kuzmich пишет:Cells.Findищет по всему листу
Columns(1).Findпо столбцу А
заменила Cells.Find на Columns(1).Find, но выдает ошибку
 
Предположу, что вы произвели замену в своем макросе,
где  SearchOrder:=xlByRows
а вы хотите поиск по столбцу, попробуйте  SearchOrder:=xlByColumns
 
Kuzmich, нет, не в своем.
вот таким образом не ищет(
Код
Set cel = Columns(1).Find(What:=x_text, After:=ActiveCell, LookIn:=xlValues, LookAt:=xlWhole)
 
Вам отвечали макросом, где
Set cell=
 
Kuzmich, простите не понимаю.
Код EducatedFool ищет по всему листу. По крайней мере у меня (
 
Попробуйте
Код
Set cell = Columns(1).Find(What:=x_text,  LookIn:=xlValues, LookAt:=xlWhole)

или покажите файл .xls
 
Kuzmich, заработало! :D Ура!
Спасибо!
 
Зачем создавать x_text = "*" & x & "*" ?
Ищите сразу введенный артикул x
Код
Set cell = Columns(1).Find(What:= x , LookIn:=xlValues, LookAt:=xlPart)
 
Создаю x_text, чтобы можно было искать по части артикула. Артикулы бывают длинные где впереди стоят три-четыре нуля. Чтобы долго не вбивать нолики в поисковик. В общем лень двигатель прогресса :-)
 
Juliya, вам пытались сказать, что надо в макросе заменить  LookAt:=xlWhole (точное совпадение) на  LookAt:=xlPart (частичное совпадение), и не придётся дописывать звёздочки к искомому значению
 
EducatedFool, спасибо за пояснения.
Честно говоря, не обратила на это внимания :oops:
 
Люди, помогите, а то сойду с ума. Все-таки Excel довольно сложная штука.  :(
Как найти пустую ячейку знаю, как найти какое-либо значение знаю, а как найти в диапазоне просто не пустую ячейку (значение в ячейке может быть любое). В формулах это пишется <>"", а как в макросах?
Заранее благодарю за помощь!
 
В вашем примере любое значение будет выглядеть так:
x = "*"
 
Sergei_A, спасибо!
Прикольно, а голову ломала полдня)
 
Подскажите, кто-нибудь, пожалуйста, как этот код сделать циклом. Т.е. надо, чтобы код перебирая ячейки нашел первую непустую, очистил ее и пошел дальше по диапазону искать возможные непустые ячейки. И так до конца диапазона.
Код
Sub ClearFiltr()
Dim f As Range, wr As Range
Set wr = Range("A3:K3")
 Set f = wr.Find(What:="*", LookIn:=xlValues, LookAt:=xlPart)
    If f Is Nothing Then
        MsgBox "Фильтр не применялся", vbCritical
    Else
        f.ClearContents
        MsgBox "Условия фильтра удалены", vbInformation
    End If
Range("A3").Select
End Sub

Спасибо!
 
Попробуйте вот так:
Код
Sub ClearFiltr2()
Dim f, wr As Range
Set wr = Range("A3:K3")
 For Each cell In wr  ' начинаем перебирать каждую ячейку в указанном диапазоне    
If ActiveCell <> "" Then ActiveCell = "" 
Next cell
End Sub
Изменено: Gilvanov - 31.01.2013 22:50:39
 
А почему нельзя
Код
 Range("A3:K3").ClearContents
 
Kuzmich, на листе сделала суперфильтр(80 столбцов), который содрала здесь на планете. фильтр работает на Worksheet_SelectionChange и если макрос будет изменять 80 ячеек это очень долго.
 
Gilvanov, не работает(
 
Gilvanov,  хотел сказать
Код
Sub ClearFiltr2()
Dim f, wr As Range
Set wr = Range("A3:K3")
For Each cell In wr  ' начинаем перебирать каждую ячейку в указанном диапазоне
   If cell.Value <> "" Then cell.Value = ""
Next
End Sub
 
всем спасибо!
 
Спасибо за советы! Мне вот почти такой же макрос нужен, можно я тоже со своим вопросом? Нужен поиск по всей книге (много листов), в определённом столбце. Приведенные здесь примеры ищут только в одном листе.
 
Добавьте перебор листов )
 
Макрос в третьем столбце каждого листа будет искать заданный текст:
Код
Sub Finder()
Dim Rng As Range, i As Long, Txt As String
    Txt = "Мяррр" 'Искомый текст
    For i = 1 To Sheets.Count
        Set Rng = Sheets(i).Columns(3).Find(what:=Txt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Rng Is Nothing Then Debug.Print "Найдено на " & Sheets(i).Name & " в ячейке " & Rng.Address(0, 0)
    Next
End Sub



 
Цитата
Юрий М написал:
Макрос в третьем столбце каждого листа будет искать заданный текст:
Спасибо Юрий, а как это совместить с этим? :
Код
Sub поиск()
    x = InputBox("Введите артикул, который нужно найти", "Ввод данных дя поиска")
    If VarType(x) = vbBoolean Then Exit Sub    ' нажата кнопка ОТМЕНА
 
   x_text = "*" & x & "*"
    Dim cell As Range
    
    Set cell = Columns(10).Find(What:=x_text, LookIn:=xlValues, LookAt:=xlWhole)

    If cell Is Nothing Then
        MsgBox "Ничего не найдено", vbCritical
    Else
        cell.Activate    ' выделяем найденную ячейку
    End If
End Sub

С этим окном поиска по столбцу №10, который код привожу удобнее (выделение) но только нужен поиск по всей книге, с последующем переходом на этот лист и выделением найденного.
Изменено: genn931 - 28.01.2017 09:23:37
 
Вы определитесь, что делать с найденными ячейками?
И код следует оформлять соответствующим тегом: ищите такую кнопку <...> и исправьте своё сообщение.
Код
Sub Finder()
Dim Rng As Range, i As Long, Txt As String
    Txt = InputBox("Введите артикул, который нужно найти", "Ввод данных дя поиска")
    If VarType(x) = vbBoolean Then Exit Sub ' нажата кнопка ОТМЕНА
    For i = 1 To Sheets.Count
        Set Rng = Sheets(i).Columns(3).Find(what:=Txt, LookIn:=xlValues, LookAt:=xlWhole)
        If Not Rng Is Nothing Then Debug.Print "Найдено на " & Sheets(i).Name & " в ячейке " & Rng.Address(0, 0)
    Next
End Sub


 
Цитата
Юрий М написал: Вы определитесь, что делать с найденными ячейками?
Прошу прощения если путанно обьяснил, спасибо поправил верхнее сообщение. но как совместить поиск и выделение найденного по всей книге не пойму(((
Изменено: genn931 - 28.01.2017 13:06:20
Страницы: 1 2 След.
Читают тему
Наверх