在excel vba中格式化需要很长时间

我有一个Excel(2010)工作表,我从数据库中加载数据,然后基于每行中的特定单元格格式化每一行。 格式化代码需要相当长的时间。 约150行15列约4分钟。 这是一段代码。 基本上它是一个循环,检查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 

谢谢…

这看起来不像是需要4分钟才能完成的事情(例如,Range.Autofill约100,000行在我的机器上需要大约90秒)。

但是,通过减less对某些对象的调用次数,可以使代码更有效率,并更好地使用With块。

这将编译器将Worksheets("WaterFall").Range("WaterFallHeaders")引用次数减less到1次。以前,您要引用3次或6次,具体取决于If/Else

未经testing,因为我没有工作簿文件来testing它。 让我知道这是否有帮助,或者如果它给你任何问题。

 J = 1 With Worksheets("WaterFall").Range("WaterFallHeaders") While J <= iNumRows row_type = .Offset(J, -1).Cells(1, 1) If row_type = "main_row" Then With .Offset(J, 0).EntireRow.Font .Bold = False .ColorIndex = RGB(0, 0, 0) End With 'yellow Description columns With .Offset(J, 0).Resize(1, 5).Interior .Color = RGB(204, 255, 204) End With 'grey amount columns With .Offset(J, 5).Resize(1, dtCount + 2).Interior .Color = RGB(217, 217, 217) End With 'blue action columns With .Offset(J, 0).Cells(1, 1) .Font.Bold = True .Interior.Color = RGB(184, 204, 225) End With Else With .Offset(J, 0).Resize(1, colCount - 1) With .Font .Bold = True .Color = RGB(51, 51, 255) End With .Interior.Color = RGB(255, 255, 204) End With End If Wend End With