Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация кода заполнения ячеек формулами / 5 сообщений из 5, страница 1 из 1
26.02.2006, 16:30:21
    #33566036
Bodrov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация кода заполнения ячеек формулами
Как лучше переписать код чтобы при его выполнении не было мерцания экрана? и выполняется он очень медлено :(
Заранее спасибо !


Private period_d1d2 As Integer ' количество строчек
Private Const RowHeaderOffest As Integer = 8 ' смещение по горизонтали относительно первой строчки

Private Sub fillFormulas()

For Each k In sh_to.Range(sh_to.Cells(RowHeaderOffest + period_d1d2, 4), sh_to.Cells(RowHeaderOffest + period_d1d2, 7))
k.FormulaR1C1 = "=SUM(R[-" & period_d1d2 & "]C:R[-1]C)"
k.Font.Bold = True
Next k

i = 0
For D = d1 To d2 - 1
sh_to.Cells(i + RowHeaderOffest, 1).Value = d1 + i
sh_to.Cells(i + RowHeaderOffest, 2).FormulaR1C1 = "=VLOOKUP(RC[-1],eur!C1:C2,2)"
sh_to.Cells(i + RowHeaderOffest, 3).FormulaR1C1 = "=VLOOKUP(RC[-2],usd!C1:C2,2)"
sh_to.Cells(i + RowHeaderOffest, 7).FormulaR1C1 = "=SUM(RC[-3],RC[-1]/RC[-4],RC[-2]*RC[-5]/RC[-4])"
sh_to.Cells(i + RowHeaderOffest, 7).NumberFormat = "#,##0.00"
i = i + 1
Next D
sh_to.Cells(i + RowHeaderOffest, 7).NumberFormat = "#,##0.00"

End Sub
...
Рейтинг: 0 / 0
26.02.2006, 17:21:41
    #33566127
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация кода заполнения ячеек формулами
Мерцание отменяется так.
Application.ScreenUpdating() = False - в начале функции
Application.ScreenUpdating() = True - в конце функции

По поводу ускорения работы.
Здесь, на мой взгляд, только одна строка замедляет работу:
Код: plaintext
ActiveSheet.Cells(i + RowHeaderOffest,  7 ).NumberFormat = "#,##0.00"
Нужно как можно меньше обращаться к формату конкретной ячейки. Желательно изменять сразу диапазон! Если он заранее не известен, то определять его в программе, а потом уже применять к нему формат ячеек!!!
...
Рейтинг: 0 / 0
26.02.2006, 18:13:16
    #33566223
Bodrov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация кода заполнения ячеек формулами
k-nike огромное спасибо макрос стал намного приятнее работать )
...
Рейтинг: 0 / 0
26.02.2006, 18:23:57
    #33566248
JimOrange
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация кода заполнения ячеек формулами
Я бы при отключении ScreenUpdating включил что-нибудь в StatusBar, чтобы не вызвать эффект "зависания".

Application.ScreenUpdating = False
Application.Statusbar = "Ждите, идет обработка данных..."


Обнуляется StatusBar так же:

Application.Statusbar = False (Переводится в стандартную надпись "готово")
...
Рейтинг: 0 / 0
03.03.2006, 22:08:12
    #33581466
100g
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оптимизация кода заполнения ячеек формулами
Еще выруби автоматический пересчёт. Лучше после вписывания всех формул один раз все пересчитать:
Код: plaintext
1.
2.
3.
4.
Application.Calculation = xlManual
'...... вписываешь все формулы....
Calculate
Application.Calculation = xlAutomatic
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / оптимизация кода заполнения ячеек формулами / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]