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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2011, 18:19   #1
Pecnekm
Пользователь
 
Регистрация: 04.03.2011
Сообщений: 35
По умолчанию Макрос поиска

Здравствуйте!

Подскажите, пожалуйста, пару моментов из этого макроса:
Код:
Option Explicit
Dim x

Private Sub UserForm_Initialize()
    x = Range("b3:b" & Cells(Rows.Count, 1).End(xlUp).Row).Value
End Sub

Private Sub TextBox1_Change()
    Dim i As Integer
    ListBox1.Clear    'очищаем листбокс
    'при отсутствии символов для поиска - выход
    If Len(TextBox1.Value) = 0 Then Exit Sub
    'осуществляем поиск, заполняем листбокс
    For i = 1 To UBound(x, 1)
        If UCase(x(i, 1)) Like "*" & UCase(TextBox1.Value) & "*" Then
            ListBox1.AddItem x(i, 1)
        End If
    Next i
End Sub

Private Sub ListBox1_Click()
    Dim k As Integer
    If ListBox1.ListIndex = -1 Then Exit Sub
    k = WorksheetFunction.Match(Me.ListBox1.Value, x, 0)
    'данные начинаются с 3-й строки
    Cells(k + 2, 1).Select
End Sub

Private Sub CommandButton1_Click(): Unload Me: End Sub
Честно спионерил его на форуме
До конца не смог разобраться в некоторых моментах:
1. Как сделать чтобы после поиска выбиралась нужная ячейка, а не соседняя?
2. Почему при выборе диапазона "D3:D" выбивает ошибку с это строкой - k = WorksheetFunction.Match(Me.ListBox1 .Value, x, 0)?; на всех других диапазонах работает нормально.
Pecnekm вне форума Ответить с цитированием
Старый 14.03.2011, 18:44   #2
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Цитата:
Сообщение от Pecnekm Посмотреть сообщение
...
2. Почему при выборе диапазона "D3:D" выбивает ошибку с это строкой - k = WorksheetFunction.Match(Me.ListBox1 .Value, x, 0)?; на всех других диапазонах работает нормально.
...

Здравствуйте
Из справки "List of Worksheet Functions Available to Visual Basic"
Цитата:
Если функция ПОИСКПОЗ не находит соответствующего значения, то возвращается значение ошибки #Н/Д.
А это уже не из справки
Код:
On Error Resume Next
k = WorksheetFunction.Match(Me.ListBox1.Value, x, 0)
If Err <> 0 Then
'   Обрабатываем ошибку, например, выводим сообщение
End If
До свидания
OlegVE вне форума Ответить с цитированием
Старый 14.03.2011, 19:17   #3
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Честно спионерил его на форуме
так для того эти файлы и выкладываются)) это форма поиска от Nilem и код рабочий.
а по Вашему вопросу - выкладываете файл, будем смотреть что не так, где что подправить.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 15.03.2011, 11:33   #4
Pecnekm
Пользователь
 
Регистрация: 04.03.2011
Сообщений: 35
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
так для того эти файлы и выкладываются)) это форма поиска от Nilem и код рабочий.
а по Вашему вопросу - выкладываете файл, будем смотреть что не так, где что подправить.
Выложил свою таблицу, только немного почистил её, чтобы не смущать людей .

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

А поиск по № заказа работает, но при нажатии на результат выкидывает ошибку:
Код:
k = WorksheetFunction.Match(Me.ListBox1 .Value, x, 0)
Но если изменить диапазон поиска с "D3:D" на любой другой - работает нормально. Не могу понять почему?
Вложения
Тип файла: rar 123.rar (28.3 Кб, 24 просмотров)
Pecnekm вне форума Ответить с цитированием
Старый 15.03.2011, 12:04   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Потому что строка сравнивается с числом.
Нужно так в данном случае (числа целые)
Код:
k = WorksheetFunction.Match(CLng(Me.ListBox1.Value), x, 1)
P.S.Хотя что-то так больше не работает, формуле похоже строки нужны...

А выбор ячейки тут:
Код:
Cells(k + 2, 1).Select
Замените в одной форме единицу на 2, в другой на 4.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 15.03.2011 в 12:27.
Hugo121 вне форума Ответить с цитированием
Старый 15.03.2011, 12:14   #6
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Pecnekm Посмотреть сообщение
Поиск по клиентам работает нормально, только когда находишь нужную позицию, выбирается ячейка не соответствующая поиску, а соседняя слева.
Пишем так:
Cells(k + 2, 4).Select (4 - это номер столбца)
Цитата:
А поиск по № заказа работает, но при нажатии на результат выкидывает ошибку
Match не хочет сравнивать строку и число. Пишем так:
k = WorksheetFunction.Match(Val(ListBox 1.Value), x, 0) (0 - значит точное соответствие).
Во вложении исправленный вариант.
Пока писал сообщение, Игорь уже все ответил
Вложения
Тип файла: zip 123.zip (40.3 Кб, 60 просмотров)
nilem вне форума Ответить с цитированием
Старый 15.03.2011, 12:16   #7
Pecnekm
Пользователь
 
Регистрация: 04.03.2011
Сообщений: 35
По умолчанию

СПАСИБО, огромное, nilem и Hugo121. Всё заработало! Спасибооо!!
Pecnekm вне форума Ответить с цитированием
Старый 15.03.2011, 12:35   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

... я то ответил, но не на 100% - с единицей недопёр... поэтому подумал, что строки нужны...

А насчёт Match по массиву мы тут уже обсуждали - перебором быстрее, а массивы больше 65535 ячеек WorksheetFunction.Match вообще не принимает.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 15.03.2011 в 12:40.
Hugo121 вне форума Ответить с цитированием
Старый 15.03.2011, 15:06   #9
Pecnekm
Пользователь
 
Регистрация: 04.03.2011
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
А насчёт Match по массиву мы тут уже обсуждали - перебором быстрее, а массивы больше 65535 ячеек WorksheetFunction.Match вообще не принимает.
Да мне не нужно так много максимум нужно 3000-4000.

У меня еще вопросец маленький появился после того как Вы мне макрос помогли исправить:
Excel начал тупить немного, тоесть форматирование и подсчеты работают только после CTRL+S, пока не сохранишь документ - не закрашивает строчку и не подсчитывает данные. С чем это может быть связано? слишком много макросов и документ нагружен ??
Подскажите, пожалуйста!
Pecnekm вне форума Ответить с цитированием
Старый 15.03.2011, 17:08   #10
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Цитата:
Сообщение от Pecnekm Посмотреть сообщение
не закрашивает строчку и не подсчитывает данные.
Автопересчет включен? Проверьте галочку.
nilem вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для поиска совпадений Dealaxer Microsoft Office Excel 18 26.09.2012 17:33
макрос поиска Kraimon Microsoft Office Excel 9 15.02.2011 21:32
макрос поиска в таблицы Chubbakka Microsoft Office Excel 17 29.12.2010 01:42
Макрос для поиска и отметки shafl Microsoft Office Excel 6 17.09.2010 10:57
Макрос поиска текста на листе Movled Microsoft Office Excel 11 29.07.2010 11:59