Добрый день всем.
Возникла проблема с методом Find. Вчера убил два часа, но так и не понял, почему он то работает, то нет. Через Find и Offset я пытаюсь сэмулировать экселевский Vlookup. Есть исходный файл с двумя колонками - в первой список ИНН, во второй - список номеров поставщиков. Макрос в testFile находит ИНН (с этим он прекрасно справляется), а потом используя ИНН должен искать мне номер поставщика. Он то работал вчера, то нет. Когда не работал, я сохранял файл, закрывал, открывал, запускал макрос построчно и по коду следил, что происходит после выполнения каждой строки, и он находил поставщика. Потом закрывал файл, открывал, запускал просто так и он не находил поставщика. Выкладываю файл где ищется ИНН и файл со списком поставщиков (готовый макрос не влезает по максимальному объему файла). Необходимый макрос - Sub PriceListShow(). Ниже интересующий меня блок кода, я не пойму, почему он не работает (уже перебрал все возможные варианты, но он так и не ищет строку).
Я начал грешить на то, что у меня String, а в файле со списком поставщиков формат данных "цифровой", но смена переменной на Double никакого результата не принесла.
Как видите ниже, я перепробовал различные варианты запросов (даже vlookup), но опять таки к какому то очевидному пониманию не пришёл. Надеюсь вы мне поможете и/или подскажете, как улучшить код.
Спасибо.
Код |
---|
On Error Resume Next
Dim SupplierINN As String
Dim SupplierBlockStart As String
Dim SupplierBlockEnd As String
SupplierBlockStart = Worksheets("Данные поставщика").Range("A1:C100").Find("*Контак*ормация*поставщика*").Address
SupplierBlockEnd = Worksheets("Данные поставщика").Range("A1:C100").Find("лицо*поставщика*").Address
SupplierINN = Worksheets("Данные поставщика").Range(Worksheets("Данные поставщика").Range(SupplierBlockStart & ":" & SupplierBlockEnd).Find("*ИНН*").Address).Offset(, 1).Value
If SupplierINN = Empty Then
PriceListAuto.Supplier = "НЕТ ИНН"
PriceListAuto.Supplier.BackColor = RGB(254, 230, 61)
PriceListAuto.SupplierLabel = "На вкладке ""Данные поставщика"" не указан ИНН. Уточните ИНН / Введите вручную"
Else
'xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN, , , xlPart).Address).Offset(, 2).Value
'If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find(SupplierINN, , , xlWhole).Address).Offset(, 2).Value
'If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find("*" & SupplierINN & "*", , , xlPart).Address).Offset(, 2).Value
'If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Range(Range("A:A").Find("*" & SupplierINN & "*", , , xlWhole).Address).Offset(, 2).Value
If xSupplier = "" Then xSupplier = Workbooks("PrismaTools.xlsm").Worksheets("Suppliers").Application.WorksheetFunction.VLookup(CDbl(SupplierINN), "A:C", 3, 0)
xSupplierName = Workbooks("Suppliers.xlsm").Worksheets("Suppliers").Range(Range("C:C").Find(xSupplier, , , xlPart).Address).Offset(, 1).Value
If xSupplier = "" Then
PriceListAuto.Supplier = "НЕ НАЙДЕН"
PriceListAuto.SupplierLabel = "Поставщик не найден. Проверьте список поставщиков или введите номер вручную"
Else
PriceListAuto.Supplier = xSupplier
PriceListAuto.Supplier.BackColor = RGB(107, 198, 6)
PriceListAuto.SupplierLabel = xSupplierName
End If
End If
|