Я работаю над длинным макросом, чтобы автоматизировать процедуру. К сожалению, часть кода просто не работает - я говорю о поиске. Я попытался использовать vlookup и Index / match внутри цикла While.
Я использовал в основном один и тот же цикл во многих других моих макросах без каких-либо проблем. Я попытался отрегулировать форматы (даже с помощью Painter Format) безуспешно.
Я выделил значения для поиска в новом файле и выполнил только часть поиска, но она все еще не работает.
Обратите внимание, когда я делаю Vlookup или index.Match вручную в Excel, это работает без проблем.
Код:
Sub lookup()
'Variables for the Vlookups
Dim newRow As Long
Dim newCL As String
newRow = 7
Dim rn As Range
Set rn = Worksheets("trysheet").Range("C:C")
Dim mrange As Range
Set mrange = Worksheets("trysheet").Range("A:A")
On Error Resume Next
'lookups
Do While Worksheets("test").Cells(newRow, 4).Value <> ""
newCL = Worksheets("test").Cells(newRow, 4).Value
Worksheets("test").Cells(newRow, 5) = Application.Index(rn,
Application.Match(newCL, mrange, 0))
newRow = newRow + 1
Loop
End Sub
Я пытался использовать Application.WorksheetFunction вместо просто Application. но затем я получаю либо ошибку 1004 - «Невозможно получить свойство Match / Vlookup класса WorksheetFunction», либо ошибка, определенная приложением.
Я был бы очень признателен за любую помощь, я не могу обернуть голову вокруг нее, и это, вероятно, что-то глупое ...
Я также могу отправить файл Excel, если кто-то хочет посмотреть, так как я не могу опубликовать его здесь.
EDIT:
Кстати, я достиг требуемого результата, используя традиционную функцию vlookup (с помощью записи макросов и изменения моего цикла):
Sub lookup()
'Variables for the Vlookups
Dim newRow As Long
newRow = 7
Dim rn As Range
Set rn = Worksheets("trysheet").Range("C:C")
Dim mrange As Range
Set mrange = Worksheets("trysheet").Range("A:A")
On Error Resume Next
'
'Get Employee
Do While Worksheets("test").Cells(newRow, 4).Value <> ""
Worksheets("test").Cells(newRow, 5).FormulaR1C1 = "=VLOOKUP(RC[-1], trysheet!C[-4]:C[-2],3,0)"
newRow = newRow + 1
Loop
End Sub
Я обычно стараюсь избегать этого метода и придерживаюсь application.WorksheetFunction или application.Vlookup (пример), потому что я считаю его более чистым и автоматически удаляет формулу, но в этом случае делает свою работу. Тем не менее, если кто-нибудь может помочь мне понять, почему метод приложения не работает здесь, я буду благодарен, потому что это происходит со мной в первый раз.
yytsunamiyy дал несколько хороших предложений ниже, но все еще не завершен.