Страницы: 1
RSS
Использование символов замещения "*", "?" в TextBox для поиска значений в ячейке
 
Добрый день, уважаемые форумчане!

Подскажите как докрутить макрос, что бы он искал значения с использованием символов замещения "*", "?".
Другими словами при вводе в поле textbox значения 7* необходимо что бы выгрузились строки содержащие в определенном столбце значения 711111, 72222, 7444, 73.
Код
Sub Macros2()
Application.DisplayAlerts = False
On Error GoTo MsgErr
 Dim iLastRow As Long
 Dim j As Long
 Dim i As Long
 Dim LastRowReport As Long
 Dim ТекстДляПоиска As Long
 ТекстДляПоиска = LCase(Trim(Me.TextBox1.Text))
 iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
 Range(Cells(3, 1), Cells(iLastRow + 1, 24)).ClearContents
 iLastRow = 2
    For j = 1 To Sheets.Count - 1
        With Sheets(j)
            LastRowReport = .Cells(Rows.Count, 2).End(xlUp).Row
            For i = 1 To LastRowReport
                If LCase(Trim(.Cells(i, 2).Value)) = ТекстДляПоиска Then
                    Range(Cells(iLastRow + 1, 1), Cells(iLastRow + 1, 23)).Value = Range(.Cells(i, 1), .Cells(i, 23)).Value
                    Cells(iLastRow + 1, 24) = Sheets(j).Name
                    iLastRow = iLastRow + 1
            End If
            Next
        End With
    Next
Application.DisplayAlerts = True
MsgBox "Данные выгружены! Если данных нет, проверте корректность введенных данных", vbExclamation + vbOKOnly
Exit Sub
MsgBox "Данные выгружены!", vbExclamation + vbOKOnly
MsgErr:
    MsgBox "Что-то пошло не так! Проверте данные", vbExclamation + vbOKOnly
    Application.DisplayAlerts = True
End Sub

Заранее благодарен за помощь!
Изменено: Кирилл - 19.02.2019 16:43:08
 
о Like до этого никогда не слышали?
Код
if  Нечто  like "7*" then ...
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал:
о Like до этого никогда не слышали?
Нет, я ведь только учусь) Буду рыть в подсказанном Вами направлении. Спасибо!
 
Убрал определение переменной "ТекстДляПоиска" и в 17 строке условие "=" заменил на оператора Like. Вроде бы заработало.... ищет точные значения и значения с символами замещения... буду тестить дальше.

Код
Sub Macros2()
Application.DisplayAlerts = False
On Error GoTo MsgErr
 Dim iLastRow As Long
 Dim j As Long
 Dim i As Long
 Dim LastRowReport As Long
 'Dim ТекстДляПоиска As Long
 ТекстДляПоиска = LCase(Trim(Me.TextBox1.Text))
 iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
 Range(Cells(3, 1), Cells(iLastRow + 1, 24)).ClearContents
 iLastRow = 2
    For j = 1 To Sheets.Count - 1
        With Sheets(j)
            LastRowReport = .Cells(Rows.Count, 2).End(xlUp).Row
            For i = 1 To LastRowReport
                'If LCase(Trim(.Cells(i, 2).Value)) = ТекстДляПоиска Then
                If LCase(Trim(.Cells(i, 2).Value)) Like ТекстДляПоиска Then
                    Range(Cells(iLastRow + 1, 1), Cells(iLastRow + 1, 23)).Value = Range(.Cells(i, 1), .Cells(i, 23)).Value
                    iLastRow = iLastRow + 1
            End If
            Next
        End With
    Next
Application.DisplayAlerts = True
MsgBox "Данные выгружены! Если данных нет, проверте корректность введенных данных", vbExclamation + vbOKOnly
Exit Sub
MsgBox "Данные выгружены!", vbExclamation + vbOKOnly
MsgErr:
    MsgBox "Что-то пошло не так! Проверте данные", vbExclamation + vbOKOnly
    Application.DisplayAlerts = True
End Sub

Изменено: Кирилл - 19.02.2019 17:58:56
 
Цитата
Кирилл написал:Нет, я ведь только учусь)
В таком случае попробуйте обходится без этого
Код
On Error GoTo MsgErr

Иначе Вы не увидите где именно
Код
MsgBox "Что-то пошло не так! Проверте данные", vbExclamation + vbOKOnly
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Кирилл написал:
Range(Cells(iLastRow + 1, 1), Cells(iLastRow + 1, 23)).Value = Range(.Cells(i, 1), .Cells(i, 23)).Value
я бы в левой части все таки сделал ссылку на лист получатель, но Вам видней.
В коде есть
Код
Application.DisplayAlerts = False
для чего?
Изменено: Nordheim - 19.02.2019 19:42:37
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал:
1Application.DisplayAlerts = False для чего?
допускаю - в учебных целях)) как признался ранее Кирилл
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Тут больше подойдет
Код
Application.ScreenUpdating = True
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, Ігор Гончаренко, спасибо за подсказки! Натолкнули меня на изучение еще нескольких операторов. ))
Изменено: Кирилл - 20.02.2019 09:45:23
Страницы: 1
Наверх