У меня есть лист excel (2010), где я загружаю данные из базы данных, а затем отформатирую каждую строку на основе определенной ячейки в каждой строке. Код для форматирования занимает довольно много времени. Около 4 минут около 150 рядов и 15 колонн. Вот фрагмент кода. В основном это цикл, который проверяет значение row_type и соответственно устанавливает цвет шрифта, цвет фона и т. Д. Для каждой строки. Есть ли лучший способ сделать это, чем использовать цикл? Любые другие улучшения, которые я могу сделать, если цикл является ответом.Форматирование в excel vba занимает много времени
J = 1
While J <= iNumRows
row_type = Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, -1).Cells(1, 1)
If row_type = "main_row" Then
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).EntireRow.Font
.Bold = False
.ColorIndex = RGB(0, 0, 0)
End With
'yellow Description columns
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).Resize(1, 5).Interior
.Color = RGB(204, 255, 204)
End With
'grey amount columns
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 5).Resize(1, dtCount + 2).Interior
.Color = RGB(217, 217, 217)
End With
'blue action columns
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).Cells(1, 1).Font
.Bold = True
End With
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).Cells(1, 1).Interior
.Color = RGB(184, 204, 225)
End With
Else
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).Resize(1, colCount - 1).Font
.Bold = True
.Color = RGB(51, 51, 255)
End With
With Worksheets("WaterFall").Range("WaterFallHeaders").Offset(J, 0).Resize(1, colCount - 1).Interior
.Color = RGB(255, 255, 204)
End With
End If
J = J + 1
Wend
Благодаря ...
Не могли бы вы создать условный формат, который вы могли бы скопировать и вставить в диапазон? – AxGryndr
Какова ценность 'iNumRows', если вы отлаживаете? Возможно ли, что цикл повторяется больше строк, чем вы хотите? –
Другой вариант - установить Application.ScreenUpdating = false в начале и установить его true, когда вы закончите. Это может уменьшить время отклика. – AxGryndr