0
Russkiy
02.09.11
✎
10:40
|
Привет, ребята!
У меня возникло затруднение при решении следующей задачи. Для быстрой обработки данных мне необходимо в макросе (Excel) задействовать встроенный механизм поиска - тот, что запускается через иконку в виде бинокля. Поскольку этот механизм очень проворен - находит заданные данные значительно быстрее перебора ячеек, устроенного конструкцией типа "If Cells(... ,...) = ... Then...". Через Интернет нашёл подходящий фрагмент (привожу здесь уже несколько переделанным под свою конкретную задачу):
Sub ПоискИндНомераПозиции()
Dim Результат As Range
Dim Строка As Long
Dim Колонка As Integer
Dim Артикул As String
Dim ИндНомер As Long
Dim ИндНомера As String
Артикул = ActiveCell.Value
1 Application.ThisWorkbook.Sheets("Инд. номера книг").Select
Set Результат = Columns("A:O").Find(What:=Артикул)
If Результат Is Nothing Then
MsgBox "Найдены индивидуальные номера книги:" & ИндНомера
GoTo 2
Else
Строка = Результат.Row
Колонка = Результат.Column
ИндНомер = 65536 * (Колонка - 1) + Строка
ИндНомера = ИндНомера & " " & CStr(ИндНомер)
Range("A1").Select
ActiveCell.Offset(Строка - 1, Колонка - 1).Activate
Application.ThisWorkbook.Sheets("Наш ассортимент").Select
GoTo 1
End If
2 End Sub
При отработке этой процедуры мне нужно, чтобы поиск данных производился по всему заданному диапазону (Columns("A:O")), и не останавливался бы при нахождении первого же результата, совпадающего с заданной (Артикул). Как это происходит при поиске средствами встроенной функции поиска: ведь там после того, как находится первая ячейка с нужным содержимым, процедура не отключается, а приостанавливается и позволяет продолжить поиск далее по листу с того места, на котором остановилась.
Здесь же вышеприведённая процедура задумана так, чтобы поиск прошёл непрерывно по всему заданному диапазону с накоплением найденных данных (с их трансформацией через пересчёт) в переменной "ИндНомера". То есть, после того, как в пределах заданного диапазона найдена первая ячейка с искомым содержимым, это содержимое трансформируется и запоминается в переменной "ИндНомера", а процесс возвращается к дальнейшему поиску. Но проблема в том, что этот самый дальнейший поиск начинается вновь с начала заданного диапазона, а не с места, где было найдено первое совпадающее значение ячейки, невзирая на то, что в строках "Range("A1").Select" и "ActiveCell.Offset(Строка - 1, Колонка - 1).Activate" я надеялся задать место продолжения поиска: увы, это не работает... В результате процедура работает бесконечно, всё время повторяя один и тот же фрагмент, связанный с первым находимым значением, совпадающим с заданием. И переменная "ИндНомера" быстро разрастается, пополняясь одним и тем же фрагментом...
Я надеюсь, что понятно объяснил ситуацию. Не найдётся ли среди вас специалист, знающий, как заставить эту процедуру продолжать поиск с места, в котором было найдено очередное подходящее значение? Как это сделать?
|
|