2015-08-28 4 views
0

У меня есть код Excel VBA, который занимает более 5 секунд для сброса массива размера 166 рядов на листе книги. Я попытался скрыть рабочий лист, но все, что я получаю, это значок ожидания для каждой отдельной ячейки.Заполнение листа из массива Excel VBA занимает очень много времени

Dim wkb As Workbook 
Set wkb = Workbooks.Add 

For row = 0 To UBound(fullReport, 1) 
    For col = 0 To UBound(fullReport, 2) 
     wkb.Sheets(1).Cells(row + 1, col + 1) = fullReport(row, col) 
    Next col 
Next row 

Странно, что в первый раз всегда медленно, а затем, иногда после, это немедленно.

+0

У вас есть формулы, которые зависят от установленных вами значений? Также попробуйте установить массив за один раз, 'wkb.Sheets (1) .Cells (1, 1) .Resize (UBound (fullReport, 1), Ubound (fullReport, 2)). Value = fullReport'. – GSerg

+0

Вы можете увидеть видеоролик об этом в действии: https://goo.gl/re3uQg 29 строк занимают 6 секунд. Последние идут быстро, первые, медленные. –

+0

Woah GSerg !! он работает невероятно хорошо. Я не знал, что массив можно назначить за один раз. Огромное спасибо. –

ответ

0

Попробуйте

Application.ScreenUpdating = False 

в начале макроса. Ваш код должен работать быстрее.

+0

Я трюк, но разница была минимальной. Код, который он действительно работал, заменил цикл Double For на wkb.Sheets (1) .Cells (1, 1) .Resize (UBound (fullReport, 1), Ubound (fullReport, 2)). Value = fullReport –

Смежные вопросы