gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:08:13 25 4
gpt4 key购买 nike

我有一个 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 for ~100,000 行在我的机器上大约需要 90 秒)。

但是,您可以通过减少对某些对象的调用次数,更好地使用 With 来提高代码效率。 block 。

这减少了编译器必须引用 Worksheets("WaterFall").Range("WaterFallHeaders") 的次数。到 1。以前,您会引用 3 次或 6 次,具体取决于 If/Else 的哪一侧.

未经测试因为我没有你的工作簿文件来测试它。让我知道这是否有帮助或是否给您带来任何问题。

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

关于performance - 在excel vba中格式化需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16068002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com