Добрый день!
Пытаюсь как-то оптимизировать свою работу.
Есть две книги (упрощенные версии вложил) rab, baza.
В книгу rab с помощью ВПР (вставляю макросом) подтягиваются данные из книги baza.
Все работает, но когда в книге rab много строк (несколько тысяч), то работа заметно замедляется.
Как-то мне помогли на планете в подобной ситуации через словари (scripting.dictionary).
Пробовал по аналогии, не получается, нашел на дружественном ресурсе описание Dictionary и Collection, но пока не получается разобраться.
Код по которому получаю данные:
Прошу помочь разобраться.
Спасибо!
				Пытаюсь как-то оптимизировать свою работу.
Есть две книги (упрощенные версии вложил) rab, baza.
В книгу rab с помощью ВПР (вставляю макросом) подтягиваются данные из книги baza.
Все работает, но когда в книге rab много строк (несколько тысяч), то работа заметно замедляется.
Как-то мне помогли на планете в подобной ситуации через словари (scripting.dictionary).
Пробовал по аналогии, не получается, нашел на дружественном ресурсе описание Dictionary и Collection, но пока не получается разобраться.
Код по которому получаю данные:
| Код | 
|---|
Sub Primer()
Dim rab, baza As Workbook
Dim sht As Worksheet
Dim rRange, rCell As Range
        Set rab = ActiveWorkbook
    LastOSNOVA = Cells(Rows.Count, 1).End(xlUp).Row
        Set baza = Workbooks.Open("baza.xlsm")
    For Each sht In baza.Worksheets
     If sht.Range("A1").Value = rab.Sheets("OSNOVA").Range("I1").Value Then
        sht.Activate
        NewName = sht.Name
        BookName = ActiveWorkbook.Name
            Lastbaza = Cells(Rows.Count, 1).End(xlUp).Row
                rab.Sheets("OSNOVA").Range("G2").FormulaLocal = _
        "=ВПР(СЦЕПИТЬ(B2;F2);" & Workbooks(BookName).Sheets(NewName).Range("A:G").Address(External:=True) & ";4;0)"
                rab.Sheets("OSNOVA").Range("H2").FormulaLocal = _
        "=ВПР(СЦЕПИТЬ(B2;F2);" & Workbooks(BookName).Sheets(NewName).Range("A:G").Address(External:=True) & ";5;0)"
    
        rab.Activate
                Sheets("OSNOVA").Range("G2:H2").AutoFill Destination:=Range(Cells(2, 7), Cells(LastOSNOVA, 8))
        End If
    Next
End Sub
 | 
Спасибо!