Привет всем.
Начальные условия:
1.Есть средний диапазон данных (5 тыс. строк).
2.Нужно подтянуть к этим данным информацию из другой книги.
Примечание:
В скрипте это все запускается через отдельный инстанс Экселя.
Все ускорения произведены, Visible, Alerts, Updating, Events etc.
Первая книга имеет формат .xls, другая .csv (ну т.е. при открытии она ж все равно автоматом создается)
Попытки решить:
1. В лоб, в цикле подтянуть. Как оказалось, это не шибко быстро, хотя, ВООБЩЕ не быстро.
2. Ручная попытка показала что формулы Эксель (а именно ВПР), работает в разы быстрее, и было решено это дело автоматизировать путем создания оных через скрипт.
То, что хотелось бы видеть рабочим (попытка переделать советы stackoverflow):
Set xlApp = CreateObject("Excel.Application")
Set wbFact = xlApp.Workbooks.Open(fFact)
Set wsFact = wbFact.Worksheets(1)
Set wbClients = xlApp.Workbooks.Open(fClients)
Set wsClients = wbClients.Worksheets(1)
factMaxRow = wsFact.UsedRange.Rows.Count + wsFact.UsedRange.Row - 1
clientsMaxRow = wsClients.UsedRange.Rows.Count + wsClients.UsedRange.Row - 1
Set clRngA = wsClients.Range(wsClients.Cells(2, 1), wsClients.Cells(clientsMaxRow, 12))
Set clRngB = wsClients.Range(wsClients.Cells(2, 2), wsClients.Cells(clientsMaxRow, 12))
Set clRngC = wsClients.Range(wsClients.Cells(2, 3), wsClients.Cells(clientsMaxRow, 12))
factCol = 7
Set factRange = wsFact.Range(wsFact.Cells(2, factCol), wsFact.Cells(factMaxRow, factCol))
factRange.Formula = "=IF(IFERROR(VLOOKUP(RC1;" & wbClients.Name & "!" & clRngA.Address & ";" & CStr(factCol) & ";FALSE))=TRUE;IF(IFERROR(VLOOKUP(RC1;" & wbClients.Name & "!" & clRngB.Address & ";" & CStr(factCol - 1) & ";FALSE))=TRUE;VLOOKUP(RC1;" & wbClients.Name & "!" & clRngC.Address & ";" & CStr(factCol - 2) & ";FALSE);VLOOKUP(RC1;" & wbClients.Name & "!" & clRngB.Address & ";" & CStr(factCol - 1) & ";FALSE));VLOOKUP(RC1;" & wbClients.Name & "!" & clRngA.Address & ";" & CStr(factCol) & ";FALSE))"
Смысл формулы - во чтобы то ни стало подтянуть данные (есть просто 3 идентифицирующие колонки в таблице)
В общем, ошибка "1004". Формулы попроще работают, эта фигня не хочет, прошу указать на ошибку. Как я не пробовал только указывать и ячейки, и диапазоны...
Спасибо.