У меня есть лист Excel (2010), где я загружаю данные из базы данных, а затем форматирую каждую строку на основе конкретной ячейки в каждой строке. Код для форматирования занимает довольно много времени. Около 4 минут для примерно 150 строк и 15 столбцов. Вот фрагмент кода. По сути, это цикл, который проверяет значение row_type и соответственно устанавливает цвет шрифта, цвет фона и т. д. для каждой строки. Есть ли лучший способ сделать это, чем использовать цикл? Любые другие улучшения, которые я могу сделать, если зацикливание - это ответ.
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
Спасибо...
iNumRows
при отладке? Возможно ли, что цикл перебирает больше строк, чем вы хотите? - person David Zemens   schedule 17.04.2013Application.ScreenUpdating=False
. Это обычно значительно увеличивает скорость любого кода, который манипулирует объектами рабочего листа. - person David Zemens   schedule 17.04.2013