Здравствуйте!
С помощью запускаемого в файле "Тест подхватывания номеров.xlsm" единственного макроса я пытаюсь найти в выбираемой в ходе исполнения макроса папке среди .xls файлов находить значения, как-либо совпадающие с каждым значением из второго столбца файла с макросом. Шерстятся все листы и все задействованные диапазоны листов. Найденные значения вставляются справа от искомого значения в файле с макросом.
Вот код макроса:
Код |
---|
Sub Найти_полный_sn()
Dim Путь As String, Файл As String, sn As Range, Совпадений As Integer, i%, rng As Range
Dim sh As Worksheet
Dim Книга As Excel.Workbook
'выбираем папку с файлами-источниками информации
With Application.FileDialog(msoFileDialogFolderPicker)
.ButtonName = "OK"
.Title = "Выберите папку, содержащую файлы Excel"
If .Show = 0 Then
Exit Sub
End If
Путь = .SelectedItems(1)
End With
Файл = Dir(PathName:=Путь + "\*.xls")
i = 2
Set sn = ActiveSheet.Cells(i, 2)
Do Until sn.Value = "" 'пока не закончатся серийные номера в столбце
Совпадений = 0
Do Until Файл = "" 'пока не закончатся файлы в выбранной папке
Set Книга = Workbooks.Open(Путь + "\" + Файл)
For Each sh In Книга.Sheets 'поиск по листам
sh.Activate
Set rng = sh.UsedRange.Find(What:=sn.Value, LookIn:=xlValues, LookAt:=xlPart)
If Not (rng Is Nothing) Then
Совпадений = 1
sn.Offset(0, Совпадений).Value = rng.Value
Do Until rng Is Nothing
Set rng = sh.UsedRange.FindNext(rng)
If Not (rng Is Nothing) Then
Совпадений = Совпадений + 1
sn.Offset(0, Совпадений).Value = rng.Value
End If
Loop
End If
Next sh
Книга.Close
Файл = Dir
Loop
i = i + 1
sn = ActiveSheet.Cells(i, 2).Value 'следующий серийник
Loop
Set Книга = Nothing
End Sub
|
Возникли следующие неточности работы алгоритма, прошу помочь исправить:
1. Как остановить бесконечное зацикливание, возникающее в самом вложенном Do Loop(это поиск значения на отдельном листе)?
2. Почему-то для первого номера первым находится не короткое значение 60802491, а сразу 23160802491. Почему пропускается первое имеющееся значение
Тестировать макрос можно на втором файле с названием "База с полными номерами.xls", который надо положить в выбираемую в ходе отработки макроса папку.